3장. Java
정보처리기사 실기 개념서 · 1부. 프로그래밍 · 절 10개
이 장에서 배우는 것
3-1. 출력과 문자열 연결
+는 왼쪽부터 계산하며, 한쪽이 문자열이 되는 순간부터 이후는 모두 문자열 연결이다. char는 숫자와 더하면 정수(유니코드 값)가 된다.
3-2. 생성자와 호출 순서
new B("hi")는 super()가 자동으로 들어가 A()가 먼저 출력된다.
3-3. 상속·오버라이딩·동적 바인딩
a.show()는 Animal의 메서드지만 그 안의 sound() 호출도 실제 객체인 Dog의 것으로 연결된다 — "부모 메서드 안에서 호출되는 오버라이딩 메서드"는 단골 함정이다.
3-4. 오버로딩 vs 오버라이딩
add(1.0, 2)는 int 2가 double로 자동 변환되어 double 버전이 선택된다. final 메서드는 오버라이딩 불가, final 클래스는 상속 불가, final 변수는 값 변경 불가(상수)다.
3-5. static — 클래스 공유 멤버
static 변수는 객체가 몇 개든 하나다 — 어느 참조로 바꿔도 모두에게 보인다. static 메서드 안에서는 this와 인스턴스 멤버를 쓸 수 없다.
3-6. 추상 클래스와 인터페이스
println(객체)는 그 객체의 toString()을 호출한다. area()가 double이므로 6.0처럼 소수점이 붙는다.
3-7. 문자열 — == vs equals, 불변성
같은 리터럴은 상수 풀의 한 객체를 공유하므로 a == b는 true, new String은 새 객체라 a == c는 false
3-8. 배열과 참조
b = a는 배열 복사가 아니라 같은 배열을 가리키는 참조 복사
3-9. 예외 처리
return을 만나도 finally가 먼저 실행된 뒤 값이 반환된다. 예외가 난 줄의 나머지("try " 출력)는 실행되지 않는다.
3-10. 형변환·오버플로·컬렉션
int 최댓값 + 1은 최솟값으로 넘친다(오버플로), (byte) 200은 200 − 256 = −56