일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Java
- BFS
- map
- 힙덤프
- string
- NIO
- deque
- CSS
- Calendar
- 스프링부트
- union_find
- math
- scanner
- dfs
- set
- date
- 스택
- alter
- Union-find
- sql
- 큐
- JPA
- html
- javascript
- List
- spring boot
- 리소스모니터링
- priority_queue
- Properties
- GC로그수집
- Today
- Total
매일 조금씩
11/19 - Java 책내용 복습 본문
복습 진도
chapter 2 ~ 10
1) 자료
기본 자료형 중심
변수와 타입
연산자
* 객체 자료형
2) 제어
조건문과 반복문
확인 문제 - 답을 적는 방식
----------------------------------------------
3) 객체 자료형
참조타입
클래스
상속
인터페이스
중첩클래스(중첩 인터페이슨데 이것만 해도된다.)
예외처리
확인 문제 중심으로 출제
-----------------------------------------------
2장. 변수와 타입
- 소스 코드 내에서 직접 입력된 값(정수, 실수, 문자, 문자열, 논리)을 리터럴이라고 부른다.
- 리터럴은 '상수' 와 같은의미지만 프로그램의 '상수'와 구분하기 위해서 '리터럴' 용어를 사용한다.
- 변수는 초기화 되어야 읽을 수 있고, 초기화되지 않은 변수는 읽을 수가 없다.
- 변수 이름의 첫번째 글자는 문자이거나 '&', '_' 이여야 하고 숫자로 시작할 수 없다.
- byte(1) < short(2) < int(4) < long(8) < float(4) < double(8)
- 예외 : char 의 범위가 0~65535이므로 음수가 저장될 수 없다.
- byte -> char (자동 타입 변환 X)
- char -> short(자동 타입 변환 X) -> 범위가 비슷하지만 char은 양수에 조금더 큰 범위를 가짐.
- 실수 맅터럴을 float 타입 변수에 저장하려면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여야 한다.
- 연산식에서의 자동 타입 변환 : 다른 타입의 피연산자가 있을 경우 두 피연산자 중 크기가 큰 타입으로 자동 변환된 후 연산을 수행.
- 자바는 정수 연산일 경우 int 타입을 기본으로 한다. 그 이유는 피연산자를 4byte 단위로 저장하기 때문이다.
- 크기가 4 byte 보다 작은 타입(byte, char, short)은 4byte인 int타입으로 변환된 후 연산이 수행된다.
- 따라서 연산결과도 int 타입이 된다.
3장. 연산자
- NaN 값인지 검사할 때 == 연산자를 쓰면 안된다.
- NaN 은 != 연산자를 제외한 모든 비교 연산자를 사용할 경0우 false 값을 리턴하기 때문이다.
- NaN 값을 검사하려면 반드시 Double.isNaN() 을 사용해야 한다.
4장. 조건문과 반복문
- 자바 6까지는 switch문의 괄호에 정수 타입(byte, char, int, long) 변수나 정수값을 산출하는 연산식만 올 수 있었다.
- 자바 7부터는 String 타입의 변수도 올 수 있다.
5장. 참조 타입
- 참조 타입에는 배열, 열거, 클래스, 인터페이스가 있다.
- 참조 타입 변수의 메모리 생성 위치는 스택이다.
- 참조 타입은 null 값으로 초기화 할 수 있다.
- 로컬 변수는 스택 영역에 생성되며 실행 블록이 끝나면 소멸된다.
- 메소드 코드나 상수, 열거 상수는 정적(메소드)영역에 생성된다.
- 참조하는 변수나 필드가 없다면 의미 없는 객체가 되기 때문에 이것을 쓰레기로 취급하고 JVM은 쓰레기 수집기를 실행시켜 쓰레기 객체를 힙 영역에서 자동으로 제거한다.
- String 타입의 문자열 비교는 equals()를 사용한다.
- boolean 타입 배열 항목의 초기값은 false이다.
6장. 클래스
- 클래스가 public class 로 선언되면 기본 생성자에도 public이 붙는다.
- 클래스가 public없이 class 로만 선언되면 기본 생성자에도 public이 붙지 않는다.
- 클래스의 구성요소 : 필드, 생성자, 메서드
- 인스턴스 필드 초기화는 생성자에서 할 수 있다. 클래스(static)필드 초기화는 static 블록 안에서 할수 있다.
- 생성자에서 다른 생성자를 호출 할 때에는 this()를 사용한다.
- 생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다.
- 외부에서 객체를 생성할 수 없도록 생성자에 private 접근 제한자를 붙일 수 있다.
- 정적 메소드와 정적 블록 내부에 인스턴스 필드나 메소드를 사용할 수 없다. 또한 this 키워드도 사용이 불가능하다.
- final 필드는 상수가 아니다.
- final 필드는 객체마다 저장되고, 생성자의 매개값을 통해서 여러 가지 값을 가질 수 없다.
- static final 필드는 상수이다.
- 상수는 객체마다 저장되지 않고, 클래스에만 포함된다. 한번 초기값이 저장되면 변경 할 수 없다.
- 클래스가 패키지에 소속되려면 패키지 선언을 반드시 해야한다.
- 패키지 선언을 하지 않으면 자바는 자동으로 디폴트 패키지를 만들어서 그안에 파일을 저장한다.
- default 접근 제한자는 같은 패키지에 소속된 클래스에서만 사용할 수 있는 멤버를 만든다.
- public > protected > default > private
- public : 모두 접근가능
- protected : 동일 패키지 + 상속받은 외부 패키지에서 접근 가능
- default : 동일 패키지에서 접근 가능
- private : 해당 클래스에서 접근 가능
7장. 상속
- 부모 객체가 자식객체로 강제 타입 변환되려면 Parent parent = new Child()처럼 자식 생성자로 생성된 부모 객체여야 한다.
- 자식 생성자로 생성된 부모객체는 생성된 그 자식으로만 강제 형변환이 가능하다.
- 자식이 부모로 자동 형변환 되거나 부모가 자식으로 강제형변환되면 둘다 자식 클래스의 고유한 메서드로는 접근이 불가능하다.
- 자식이 오버라이딩한 메서드로만 접근이 가능하다.
- protected 접근 제한을 갖는 메소드는 다른 패키지라도 자식 클래스라면 재정의 가능하다.
- super()는 부모의 기본생성자를 호출한다.
- 만약 부모 클래스에 매개값을 갖는 생성자가 있다면 자식생성자의 맨 첫줄에 super(매개값)으로 명시적으로 호출 되어야한다.
- 클래스를 선언할 때 abstract를 붙이면 new연산자를 이용해서 객체를 만들지 못하고 상속을 통해 자식클래스만 만들수 있게 된다.
- abstract 클래스는 메서드에서 필드의 초기화도 가능하다.
- abstract 클래스는 상속되어야 사용될수 있다.
- abstract 메서더는 abstract 클래스 내에서만 선언되며, 자식을 통해서 반드시 구현{} 되어야 한다.
8장. 인터페이스
- abstract는 이름만 abstract이지 클래스와 구성요소(필드, 생성자, 메서드)가 같다.
- 그러나 인터페이스는 상수와 메서드(추상, 디폴트, 정적)만을 가진다.
- 인터페이스의 상수는 public static final 이 생략 된다.
- 인터페이스의 메서드는 public abstract 가 생략된다.
- 따라서 인터페이스 내의 상수와 메서드는 public 이 생략된 것이고, abstract는 default가 생략된 것이다.
- 구현 객체는 인터페이스 타입으로 자동 변환 된다.
9장. 중첩클래스
- 인스턴스 멤버 클래스는 Outer o = new Outer(); 선언후 Outer. Inner io = o. new Inner(); 이렇게 선언한다.
- 메서드 호출은 io.메소드명();
- 정적 멤버 클래스는 Outer 클래스 선언 필요 없이 바로 Outer.Inner io = new Outer.Inner(); 이렇게 선언한다.
- 메서드 호출은 Outer.Inner.메서드명();
- 로컬 클래스는 바깥 클래스의 모든 필드와 메서드를 사용할 수 있다.
- 로컬 클래스는 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없다. static 붙일 수 없다.
- final 특성을 가진 매개 변수나 로컬 변수만 로컬 클래스 내부에서 사용할 수 있다. (해당 메소드 내에서만 사용하려면 상속되면 안됨)
- 익명 객체는 단독으로 생성할 수 없고, 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.