* 공부 정리일자 (2022년 8~12월)
- 책 : 명품 자바 에센셜
- 개인적으로 공부 및 복습하면서 정리한 내용입니다. (사진 제외)
* 목차
2강. 자바 기본 프로그래밍 (책 50p)
2.1 자바 프로그램의 구조 (책 50p)
2.2 식별자 (책 53p)
2.3 자바의 데이터 타입 (책 54p)
2.4 자바의 키 입력 (책 62p)
2.5 연산자 (책 66p)
2.6 조건문 (책 76p)
1. 복습 (중요 키워드 위주)
2장 – 자바 기본 프로그래밍 (책 50p)
2.1) 자바 프로그램의 구조
* 예제 2-1 : Hello, 자바 프로그램의 기본 구조
(1) 클래스 만들기
- Hello 이름의 클래스 선언
- class 키워드로 클래스 선언
- public으로 선언하면 다른 클래스에서 접근 가능
- 클래스 코드는 { } 내에 모두 작성
(2) 주석문
- // 한 라인 주석
- /* 여러 행 주석 */
(3) main() 메소드
- 자바 프로그램은 main()에서 실행 시작
- public static void으로 선언
- String[] args로 실행 인자를 전달 받음
(4) 메소드
- C/C++에서의 함수를 메소드로 지칭
- 클래스 바깥에 작성할 수 없음
(5) 메소드 호출
- sum() 메소드 호춯
- sum() 호출 시 변수 i의 값과 정수 10을 전달
- sum()의 n, m에 각각 20, 10 값 전달
- sum()은 n과 m 값을 더한 30 리턴
- 변수 s는 정수 30을 전달받음
(6) 변수 선언
- 변수 타입과 변수 이름 선언
- 메소드 내에서 선언된 변수는 지역 변수
-- 지역 변수는 메소드 실행이 끝나면 저장 공간 반환
(7) 문장
- ; 로 한 문장의 끝을 인식
|
(8) 화면 출력
- 표준 출력 스트림에 메시지 출력
- 표준 출력 스트림 System.out의 println() 메소드 호출
- println()은 여러 타입의 데이터 출력 가능
- println()은 출력 후 다음 행으로 커서 이동
2.2) 식별자 (identifier) (책 53p)
* 식별자란?
- 클래스, 변수, 상수, 메소드 등에 붙이는 이름
* 식별자의 원칙
- ‘@’, ‘#’, ‘!’와 같은 특수 문자, 공백 또는 탭은 식별자로 사용할 수 없으나 ‘_’, ‘$’는 사용 가능
- 유니코드 문자 사용 가능. 한글 사용 가능
- 자바 언어의 키워드는 식별자로 사용불가
- 식별자의 첫 번째 문자로 숫자는 사용불가
- ‘_’ 또는 ‘$’를 식별자 첫 번째 문자로 사용할 수 있으나 일반적으로 잘 사용하지 않는다.
- 불린 리터럴 (true, false)과 널 리터럴(null)은 식별자로 사용불가
- 길이 제한 없음
* 대소문자 구별
- int barChart; 와 int barchart; 는 서로 다른 식별자 선언
* 사용 가능한 예
* 잘못된 예
2.3) 자바의 데이터 타입 (책 54p)
(1) 자바의 데이터 타입
* 기본 타입 : 8 개
- boolean, char, byte, short, int, long, float, double
* 레퍼런스 타입 : 1 개이며 용도는 다음 3 가지
- 클래스(class)에 대한 레퍼런스
- 인터페이스(interface)에 대한 레퍼런스
- 배열(array)에 대한 레퍼런스
(2) 자바의 기본 타입
* 특징
- 기본 타입의 크기는 CPU나 운영체제에 따라 변하지 않음
(3) 문자열
* 문자열은 기본 타입이 아님
* String 클래스로 문자열 표현
- 문자열 리터럴 – “JDK”, “한글”, “계속하세요”
- 문자열이 섞인 + 연산 -> 문자열 연결
(4) 변수와 선언
* 변수
- 프로그램 실행 중에 값을 임시 저장하기 위한 공간
-- 변수 값은 프로그램 수행 중 변경될 수 있음
* 변수 선언
- 데이터 타입에서 정한 크기의 메모리 할당
(5) 리터럴 (literal)
(5.1) 리터럴
* 프로그램에서 직접 표현한 값
* 정수, 실수, 문자, 논리, 문자열 리터럴 있음
(5.2) 정수 리터럴
* 10진수, 8진수, 16진수, 2진수 리터럴
* 정수 리터럴은 int 형으로 컴파일
* long 타입 리터럴은 숫자 뒤에 L 또는 l을 붙여 표시
- ex) long g = 24L;
(5.3) 실수 리터럴
* 소수점 형태나 지수 형태로 표현한 실수
- 12. 12.0 .1234 0.1234 1234E-4
* 실수 타입 리터럴은 double 타입으로 컴파일
* 숫자 뒤에 f(float)나 d(double)을 명시적으로 붙이기도 함
(5.4) 문자 리터럴
* 단일 인용부호(' ')로 문자 표현
- 'a', 'W', '가', '*', '3', '7‘, ‘글’
- \u다음에 4자리 16진수로, 2 바이트의 유니코드(Unicode)
* 특수문자 리터럴은 백슬래시(\)로 시작
(5.5) 논리 타입 리터럴
* 논리 값 표시
- true 또는 false 뿐
- boolean 타입 변수에 치환하거나 조건문에 이용
(5.6) 기본 타입 이외 리터럴
* null 리터럴
- 레퍼런스에 대입 사용
* 문자열 리터럴 (스트링 리터럴)
- 이중 인용부호로 묶어 표현
-- "Good", "Morning", "자바", "3.19", "26", "a"
- 문자열 리터럴은 String 객체로 자동 처리
(6) 상수
* 상수 선언
- final 키워드 사용
- 선언 시 초깃값 지정
- 실행 중 값 변경 불가
* 상수 선언 사례
(7) var 키워드
* 기존의 변수 선언 방식 : 변수의 타입 반드시 지정
* var 키워드 (Java 10부터 도입)
- 타입을 생략하고 변수 선언 가능
- 컴파일러가 추론하여 변수 타입 결정
* 변수 선언 시 초깃값이 주어지지 않으면 컴파일 오류
* var는 지역 변수 선언에만 한정
* 예제 2-2 : var 키워드를 사용하여 변수 선언
* 예제 2-3 : 변수, 리터럴, 상수 사용하기
- 원의 면적을 계산하여 출력하는 프로그램을 작성하라.
(8) 타입 변환
* 타입 변환
- 한 타입의 값을 다른 타입의 값으로 변환
(8.1) 자동 타입 변환
- 컴파일러에 의해 원래의 타입보다 큰 타입으로 자동 변환
- 치환문(=)이나 수식 내에서 타입이 일치하지 않을 때
(8.2) 강제 타입 변환
* 강제 타입 변환
- 개발자의 의도적 타입 변환
- () 안에 개발자가 명시적으로 타입 변환 지정
* 강제 변환은 값 손실 우려
* 예제 2-4 : 타입 변환
- 자동 타입 변환과 강제 타입 변환이 들어 있는 코드이다. 실행 결과는 무엇인가?
2.4) 자바의 키 입력 (책 62p)
(1) System.in
- 키보드와 연결된 자바의 표준 입력 스트림
- 입력되는 키를 바이트(문자 아님)로 리턴하는 저수준 스트림
- System.in을 직접 사용하면 바이트를 문자나 숫자로 변환하는 많은 어려움 있음
(2) Scanner 클래스
* 읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴
- java.util.Scanner
* Scanner 객체 생성 (import 문 필요)
- 키보드에 연결된 System.in에게 키를 읽게 하고, 원하는 타입으로 변환하여 리턴
* Scanner에서 키 입력 받기
- Scanner는 입력되는 키 값을 공백으로 구분되는 토큰 단위로 읽음
- 공백 문자 :‘\t’,‘ \f’,‘ \r’,‘ ’,‘ \n’
* 개발자가 원하는 타입 값으로 쉽게 읽을 수 있음
* Scanner 주요 메소드
* 예제 2-5 : Scanner를 이용한 키 입력 연습
- Scanner를 이용하여 이름, 도시, 나이, 체중, 독신 여부를 입력 받고 / 다시 출력하는 프로그램을 작성하라.
2.5) 연산자 (책 66p)
(1) 식과 연산자
* 연산
- 주어진 식을 계산하여 결과를 얻어내는 과정
(2) 산술 연산자
* 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)
* /와 % 응용
- 10의 자리와 1의 자리 분리
- x가 홀수인지 판단
- n의 값이 3의 배수인지 확인
* 예제 2-6 : /와 % 산술 연산자 응용
- 초 단위의 정수를 입력 받고, 몇 시간, 몇 분, 몇 초인지 구하여 출력하는 프로그램을 작성하라.
(3) 증감 연산
* 1 증가 혹은 감소 시키는 연산
* ++, --
(4) 대입 연산
* 연산의 오른쪽 결과는 왼쪽 변수에 대입
* 예제 2-7 : 대입 연산자와 증감 연산자 사용하기
- 다음 코드의 실행 결과는 무엇인가?
(5) 비교 연산, 논리 연산
* 비교연산자 : 두 개의 값을 비교하여 true/false 결과
* 논리연산자 : 두 개의 논리 값에 논리 연산. 논리 결과
* 예제 2-8 : 비교 연산자와 논리 연산자 사용하기
- 다음 코드의 실행 결과는 무엇인가?
(6) 조건 연산
* 3 개의 피연산자로 구성된 삼항(ternary) 연산자
- opr1?opr2:opr3
- opr1이 true이면, 연산식의 결과는 opr2, false이면 opr3
* if-else을 조건연산자로 간결하게 표현 가능
* 예제 2-9 : 조건 연산자 사용하기
- 다음 코드의 실행 결과는 무엇인가?
(7) 비트 연산
* 비트 개념
* 비트 연산
- 비트 논리 연산
-- 비트끼리 AND, OR, XOR, NOT 연산
* 비트 시프트 연산
- 비트를 오른쪽이나 왼쪽으로 이동
* 피 연산자의 각 비트들을 대상으로 하는 연산
* 비트 논리 연산 응용 (옵션)
- 냉장고에는 8개의 센서가 있고
이들은 flag 변수와 연결되어 있다고 할 때,
냉장고의 온도가 0도 이상으로 올라가면 비트 3이 1이 되고,
0도 이하이면 비트 3이 0을 유지한다.
- 문제) 현재 냉장고의 온도가 0도 이상인지 판단하는 코드는?
(8) 시프트 연산
* 예제 2-10 : 비트연산자와 시프트연산자 사용하기- 다음 코드의 실행 결과는 무엇인가?
2.6) 조건문 (책 76p)
(1) 단순 if 문, if-else 문
* 단순 if 문
- if의 괄호 안에 조건식(논리형 변수나 논리 연산)
-- 실행문장이 단일 문장인 경우 둘러싸는 {, } 생략 가능
* if-else 문
- 조건식이 true면 실행문장1, false이면 실행문장2 실행
* 예제 2-11 : if-else 사용하기
- 나이를 입력 받아 20대인지 판별하는 프로그램을 작성하라
(2) 다중 if-else 문
* 다중 if문
- 조건문이 너무 많은 경우, switch 문 사용 권장
* 예제 2-12 : 다중 if-else를 이용하여 학점 매기기
- 다중 if-else문을 이용하여 / 입력 받은 성적에 대해 학점을 부여하는 프로그램을 작성하라.
* 중첩 if-else문, 예제 : 2-13 중첩 if-else문 사례
- if 문이나 else 문, 혹은 if-else 문에 if문이나 if-else문을 내포할 수 있다.
-- 점수와 학년을 입력 받아 60점 이상이면 합격, 아니면 불합격을 출력하라.
-- 다만 4학년은 70점 이상이어야 합격이다. 60점 이상인 경우 4학년을 구분하여 처리해야 한다.
(3) switch문
* switch문은 식과 case 문의 값과 비교
- case의 비교 값과 일치하면 해당 case의 실행문장 수행
-- break를 만나면 switch문을 벗어남
- case의 비교 값과 일치하는 것이 없으면 default 문 실행
- default문은 생략 가능
(3.1) switch문에서 break문의 역할
* switch문 내의 break문
- break문을 만나면 switch문 벗어남
- case 문에 break문이 없다면, 다음 case문으로 실행 계속
-- 언젠가 break를 만날 때까지 계속 내려 가면서 실행
(4) case 문의 값
- 문자, 정수, 문자열 리터럴(JDK 1.7부터)만 허용
- 실수 리터럴은 허용되지 않음
* 예제 2-14 : switch 문 사용하기
- 1~12 사이의 월을 입력 받아 봄, 여름, 가을, 겨울을 판단하여 출력하라.
'프로그래밍 공부 > Java' 카테고리의 다른 글
[ Java 프로그래밍 ] 공부 정리 - 1장 본문 퀴즈 및 연습문제 (0) | 2023.04.30 |
---|---|
[ Java 프로그래밍 ] 공부 정리 - 4강. 클래스와 객체 (0) | 2023.04.30 |
[ Java 프로그래밍 ] 공부 정리 - 3강. 반복문과 배열 그리고 예외 처리 (0) | 2023.04.30 |
[ Java 프로그래밍 ] 공부 정리 - 1강. 자바의 시작 (0) | 2023.04.26 |
[ Java 프로그래밍 ] 공부 정리 - 목차. (0) | 2023.04.26 |