8Days) Java 기초(1) - 변수, 타입, 문자열, 연산자, 콘솔 입출력

nacSeo (낙서)·2022년 10월 31일
0

◉ 학습목표

1. Java 언어의 특징을 설명할 수 있다.
2. 변수와 타입, 문자열, 연산자, 그리고 콘솔 입출력에 대해 이해할 수 있다.
3. 페어와 관련 연습문제들을 풀어보며 적용시킬 수 있다.
  1. 자바 (Java)

⦿ 학습내용

☞ 1. 자바의 특징

① 운영체제에 독립적 : JRE를 통해 모든 운영체제에서 실행 가능
② 객체 지향 언어 (Object Oriented Programming, OOP)
③ 함수형 프로그래밍 지원 (람다식, 스트림)
④ 자동 메모리 관리 (Garbage Collection)

☞ JDK (Java Development Kit) : JRE + 개발에 필요한 도구

✔︎ JRE (Java Runtime Environment) : JVM + 표준 클래스 라이브러리
✔︎ JVM (Java Virtual Machine) : 서로 다른 운영체제에서 자바를 실행하기 위한 프로그램

☞ 메서드 : 어떤 기능을 수행하기 위한 일련의 코드들의 집합체, 클래스 내 포함되어 있는 함수

☞ 함수 : 특정 기능을 수행하는 코드들을 묶은 것

☞ 메서드 정의

A main(B C) {	// 반환_타입 메서드_이름(매개변수_타입 매개변수_이름) {
	D			//	메서드_바디
}				//	}

✔︎ A (반환 타입) : 메서드가 반환할 반환값의 종류 및 유형을 의미, 메서드를 정의할 때 메서드 이름 앞에 반환 타입 명시
✔︎ B (매개변수의 타입) : 어떤 유형의 값을 메서드가 입력받을 것인지를 명시하는 것을 의미
✔︎ C (매개변수의 이름) : 입력받은 값에 어떤 이름을 붙여 사용할 것인지를 명시하는 것을 의미
✔︎ D (메서드 바디) : 구체적으로 메서드가 어떤 기능을 수행할지에 대한 코드를 작성하는 부분, return을 사용하여 반환

☞ 메서드 호출

✔︎ 메서드 이름에 호출 연산자 ( )를 붙여 호출

☞ main 메서드

public static void main(String[] args) {

}

✔︎ void : 반환 타입
✔︎ main : 메서드의 이름
✔︎ String[] : 매개변수의 타입
✔︎ args : 매개변수의 이름
✔︎ { } : 안에 코드 작성

☞ 슈도코드 (pseudo code) : 코드 작성 전에, 사람의 언어로 먼저 작성하는 것

※ 슈도코드(의사코드)를 작성해야하는 이유? : 작은 부분부터 계획과 순서에 따라 작성해야 큰 규모 코드를 작성할 수 있음!🔥

  1. 변수와 타입

⦿ 학습내용

☞ 변수 (Variable) : 값이 변할 수 있는 데이터를 임시적으로 저장하기 위한 수단

☞ 변수 선언 : 어떤 값을 저장할 메모리 공간을 확보하고, 해당 메모리 공간을 식별할 수 있는 이름을 붙이는 것

☞ 값 할당(=대입) : 변수에 값을 저장하는 것

☞ 변수 명명 규칙

✔︎ 일반적으로 카멜 케이스(camelCase) 사용 : 두 번째 단어부터 대문자로 시작
✔︎ 영문자, 숫자, _, $ 사용 ⭕️, 대소문자 구별 ⭕️
✔︎ 숫자로 시작하는 변수명 사용 ❌
✔︎ 이미 사용중인 예약어 (reserved word) 사용 ❌
ex) int byte(x), ìnt class(x)

☞ 상수 (Constant) : 변하지 말아야 할 데이터를 임시적으로 저장하기 위한 수단

✔︎ 재할당이 금지된 변수
✔︎ final 키워드 사용해 선언, 관례적으로 대문자에 언더바(_)를 넣어 구분
ex) final double CALCULATOR_PI = 3.14;

☞ 상수를 사용하는 이유?

✔︎ 프로그램이 실행되면서 값이 변하면 안되는 경우
✔︎ 코드 가독성을 높이고 싶은 경우
✔︎ 코드 유지관리를 손쉽게 하고자 하는 경우

☞ 타입 (Type)

✔︎ 정의 : 어떤 값의 유형과 종류
✔︎ 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식이 결정

☞ 기본 타입과 참조 타입

✔︎ 기본 타입 (primitive type)
✓ 값을 저장할 때, 데이터의 실제 값이 저장
✓ 정수 타입(byte, short, int, long), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
✔︎ 참조 타입 (reference type)
✓ 값을 저장할 때, 데이터가 저장된 곳을 나타내는 주소값이 저장
✓ 객체의 주소를 저장, 8개의 기본형을 제외한 나머지 타입

☞ 리터럴(Literal) : 문자가 가리키는 값 그 자체

✔︎ float 타입 변수 + 실수형 리터럴 할당 → 리터럴 뒤 접미사에 f
ex) float weight = 74.5f;
✔︎ long 타입 변수 + 정수형 리터럴 할당 → 리터럴 뒤 접미사 L
ex) final long LIGHT_YEAR = 9460730472580L;

☞ 정수 타입

✔︎ 정수형의 오버플로우와 언더플로우
✓ 오버플로우
① 자료형이 표현할 수 있는 범위 중 최대값 이상의 값을 표현한 경우 발생
② 최대값을 넘어가면 해당 데이터 타입의 최소값으로 순환
✓ 언더플로우
① 자료형이 표현할 수 있는 범위 중 최소값 이하의 값을 표현한 경우 발생
② 최소값을 넘어가면 해당 데이터 타입의 최대값으로 순환

☞ 실수 타입

✔︎ 실수형의 오버플로우와 언더플로우
✓ 오버플로우 : 값이 음의 최소 범위 or 양의 최대 범위를 넘어갔을 때 발생, 값은 무한대
✓ 언더플로우 : 값이 음의 최대 범위 or 양의 최소 범위를 넘어갔을 때 발생, 값은 0

☞ 논리 타입 - boolean

☞ 문자 타입 - char (반드시 작은 따옴표('')로 사용)

☞ 타입 변환

✔︎ 자동 타입 변환
① 바이트 크기가 작은 타입 → 큰 타입으로 변환할 때
② 덜 정밀한 타입 → 더 정밀한 타입으로 변환할 때
✔︎ 수동 타입 변환
✓ 큰 타입 → 작은 타입으로는 자동 타입 변환 ❌
✓ 캐스팅(casting) : 캐스팅 연산자()를 사용하여, 괄호 안에 변환하고자 하는 타입을 적어서 수동으로 타입 변환
ex) byte byteValue = (byte)intValue;

  1. 문자열 (String)

⦿ 학습내용

☞ 문자열 타입 - String

✔︎ 선언 : String 변수명;
✔︎ 선언한 변수에 문자열을 할당하는 방법
① 문자열 리터럴을 할당 : 변수 = "문자열";
② String 클래스의 인스턴스를 생성하여 할당 : 변수 = new String("문자열");

☞ String 클래스의 매서드

✔︎ charAt() 메서드 : 해당 문자열의 특정 인덱스에 해당하는 문자를 반환, 해당 문자열의 길이보다 큰 인덱스 or 음수 → 오류 발생 💥
✔︎ compareTo() 메서드 : 해당 문자열과 사전 편찬 순으로 비교
compareToIgnoreCase() 메서드 : 대소문자 구분 ❌
✔︎ concat() 메서드 : 두 문자열 연결
✔︎ indexOf() 메서드 : 특정 문자나 문자열이 처음 등장하는 위치의 인덱스를 반환
✔︎ trim() 메서드 : 문자열의 띄어쓰기와 탭 문자를 제거
✔︎ toLowerCase(), toUpperCase() : 문자열의 대소문자를 변경

  1. 연산자 (Operator)

☞ 연산자 : 하나의 값 또는 여러 개의 값을 피연산자로 하여 새로운 값을 만들어내는 기호

☞ 산술 연산자 : 사칙연산에 사용되는 연산자(+, -, *, /)와 나머지 연산자(%)

☞ 증감 연산자

✔︎ 전위형 증감연산자 : 증감 연산 수행 후, 그 결과값을 적용 ex)++num1
✔︎ 후위형 증감연산자 : 기존 값 적용 후, 증감 연산 수행 ex)num1++

☞ 복합 대입 연산자

ex) num = num1 +2; = num1 += 2;

☞ 대소 비교 연산자 : >, <, <=, >= (이항 비교만 가능)

☞ 등가 비교 연산자 : ==, !=

☞ 논리 연산자 : AND 연산자(&&), OR 연산자(||), NOT 연산자(!)

☞ 연산자 우선순위

  1. 콘솔 입출력 (I/O)

⦿ 학습내용

☞ 콘솔 출력

① 출력 : System.out.print()
② 출력 후 줄바꿈 : System.out.println()
③ 형식대로 출력 : System.out.printf()
※ 지시자와 출력포맷

☞ 콘솔 입력

import java.util.Scanner;					// Scanner클래스 가져옴

Scanner scanner = new Scanner(System.in);	// Scanner클래스의 인스턴스 생성
String inputValue = scanner.nextLine();		// 입력한 내용이 inputValue에 저장

System.out.println(inputValue);				// 입력한 문자열 출력

import java.util.Scanner; : Scanner를 소스코드로 불러오기
Scanner scanner = new Scanner(System.in); : new 연산자를 통해 인스턴스를 생성, 변수 scanner에 할당
String inputValue = scanner.nextLine(); : scanner.nextLine() 로 문자열을 입력받아, ìnputValue 변수에 할당되어 저장
※ 문자열 : nextLine(), 정수형 : nextInt(), 실수형 : nextFloat()

  1. 기타) 연습문제 풀이 간 내용

⦿ 학습내용

☞ 메서드 시그니처

public int add (int num1, int num2) {

}

✔︎ 메서드 시그니처 : public int ~ (int num1, int num2)
✔︎ 메서드 이름 : add , 대표할 수 있는 이름으로 설정
✔︎ 메서드 바디 : { }

☞ 호출 연산자 = ( )

☞ String.format과 printf

✔︎ 형식대로 나오게 해주는 것은 같음
✔︎ String.format은 문자를 생성할 때 사용
✔︎ printf는 콘솔 문자 출력할 때 사용

☞ equals() : 내용을 비교하는 메서드

ex) str1.equals(str2) : str1str2 값을 비교

☞ length() : 문자열의 길이를 알아내는 메서드

ex) str.length() : str 문자열 길이를 알아냄

☞ Math 클래스의 메서드

✔︎ Math.abs() : 절대값을 반환하는 메서드
✔︎ Math.floor() : 소수점 버림
✔︎ Math.ceil() : 소수점 올림
✔︎ Math.round() : 소수점 반올림
✔︎ Math.max() : 두 값을 비교하여 큰 값 반환
✔︎ Math.min() : 두 값을 비교하여 작은 값 반환

◉ 느낀 점

☞ 드디어 자바에 첫 발을 디뎠다. 자바를 배울 때 국룰처럼 가장 처음배우는 변수와 타입, 문자열과 같은 내용들을 공부하였는데 시작부터 영 이해가 쉽진 않다. 그러나 처음 배우는 내용이니만큼 자바 공부의 기본 베이스라 생각하기에 이해가 될 때까지 복습, 또 복습이다.. 😹

오늘은 자바 첫 페어프로그래밍이 있었다. 나름 공부했다 생각하고 페어와 만나 진행하는 문제풀이였는데 처음엔 잘 가는가 싶더니 어느 순간부터 버벅거리고 막히기 시작했다 🥲 그럴 때 일수록 천사같은 페어분께서는 답답하다고 바로 정답을 알려주지 않고, 힌트를 조금씩 주며 내가 생각해내가며 스스로 풀어갈 수 있게 진정한 '네비게이터'역할을 해주셨다..! (감동🥹) 그 덕분에 조금이라도 더 사고하며 답을 끼워맞추는 게 아닌, 이해하고 넘어갈 수 있게 된 것 같다 :) 더군다나 개발 직종에 종사하시다 오신 페어분께서 문제풀이가 끝나고 시간이 남을 때 더 궁금한 질문을 받아주셨고, 오늘도 정말 큰 도움이 됐던 페어 프로그래밍이었다! 페어분께서도 나에게 알려주시며 확실히 자신의 것으로 만들 수 있는 기회가 되었으면 하는 바람으로 조금이라도 도움이 되었으면 한다 🙏

항상 다짐하는 거지만 페어에게 폐를 끼치지 않기 위해서라도 수업 이외의 시간을 활용하여 나를 좀 더 갈고 닦아야 한다. 언젠간 나도 이 때까지 만난 페어님들처럼 친절하고 능력있는 페어가 되고 싶다 ☺️ 내일도 화이팅 해보자!!!🔥🔥🔥

◉ 내일의 키워드

・ 조건문
・ 반복문
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글