본 게시글은 하단 책을 읽고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
목차
1. abstract 키워드(추상 메서드와 추상 클래스)
- 추상 메서드
- 정의: 선언부o, 구현부x
- 특징
- 추상 메서드 하나라도 있는 클래스 → 추상 클래스로 선언되어야함
- 추상 클래스는 객체 만들 수 없음
- 추상 메서드는 하위 클래스에서 반드시 구현되어야 함.(오버라이딩 필수)
- 예시 및 필요성: 하위 클래스에선 의미가 있지만 상위 클래스에선 의미가 없는 메서드 && 상속 관계로 인해 상위 클래스에서 없어선 안되는 메서드 → 추상 메서드로 나타내면 됨.
Driver.java
고양이.java
동물.java (잘못된 버전)
- Driver.java에서 동물 클래스 타입의 참조 변수를 통해, 고양이 클래스의 객체가 가진 울어보세요() 메서드를 호출하고 있으므로 동물 클래스의 울어보세요() 메서드는 반드시 존재해야 함.
- 동물 객체의 울어보세요() 메서드는 선언만 있고 몸체는 없는 형태여야함 → 추상 메서드
동물.java (추상 메서드로 수정한 버전)
- 추상 클래스는 객체를 만들 수 없어서 동물 타입으로 객체 만들려 하면 오류 뜸.
2. 생성자
- 객체 생성자 메서드(생성자)
- 정의: 객체를 생성하는 메서드
- 형태: 클래스명()
- 특징
- 반환값이 없고 클래스명과 같은 이름을 가짐
- 개발자가 만들지 않아도, 인자 없는 기본 생성자가 자동으로 만들어짐
- 인자가 있는 생성자를 하나라도 만든다면, 기본 생성자가 자동으로 만들어지진 않음
- 예시
3. 클래스 생성 시의 실행 블록, static 블록
- static 블록
- 정의: 클래스가 스태틱 영역에 배치될 때 실행되는 코드 블록(클래스 생성자 대신)
- 특징
- 클래스가 제일 처음 사용될 때 클래스 정보가 T메모리의 스태틱 영역에 로딩되며, 단 한 번 해당 클래스의 static 블록이 실행됨
- 클래스가 제일 처음 사용되는 경우
- 클래스의 객체를 최초로 만들 때
- 클래스의 정적 메서드를 사용할 때
- 클래스의 정적 속성을 사용할 때
- 예시
4. final 키워드
- 변수에 붙은 fina → 변경 불가한 상수 (다른 언어의 const와 같은 역할. 자바에서 const는 not used)
- 정적 상수, 객체 상수: 선언 시 초기화 가능
- 지역 상수: 선언 시 혹은 최초 한 번만 초기화 가능
5. instanceof 키워드
- 정의: 객체가 특정 클래스의 인스턴스인지 물어보는 연산자. 결과는 true 혹은 false임.
- 형태: 객체참조변수 instanceof 클래스명
- 특징
- 클래스의 상속 관계와 인터페이스의 구현 관계에서 쓰임
- 객체 참조 변수의 타입이 아닌 실제 객체의 타입에 의해 처리함
예시 1
예시 2
- 예시 1과 달리 예시 2는 조류객체의 타입이 동물이다. 허나, 실행결과엔 변함 없다.
- 이유) 객체 참조 변수의 타입이 아닌 실제 객체의 타입에 의해 처리하기 때문
6. package 키워드
- 네임스페이스
- 두 개의 클래스 이름 같아 이름 충돌 발생 → 네임스페이스 나누어 클래스의 전체 이름 지정
- ex) Customer, Customer → 마케팅사업부.Customer, 고객사업부.Customer
- 홍길동의 스마트폰, 일지매의 스마트폰 → 소유자로 네임스페이스 나누어 두 스마트폰을 구분함. 이때, 소유자가 패키지임.
7. interface 키워드, implements 키워드
- 인터페이스
- 정의
- 특징: public 추상 메서드와 public 정적 상수만 가질 수 있음
- 예시
8. this 키워드
- 특징
- 원래는 지역변수와 속성변수(객체변수, 정적변수)의 이름이 같은 경우 지역 변수가 우선함
- this 키워드를 사용하면 객체 변수를 사용할 수 있음
- 클래스명을 접두사로 사용하면 정적 변수를 사용할 수 있음
9. super 키워드
- 정의: 바로 위 상위 클래스의 인스턴스를 지칭하는 키워드
- 특징
- 상위 클래스의 인스턴스 메서드 호출 가능해짐 ex) super.method()
- 상위의 상위 클래스의 인스턴스에는 접근 불가능함 ex) super.super.method() // 에러