오늘부터는 객체지향프로그래밍 심화과정으로 넘어가서 캡!상추다! 를 배우기 시작한다. 캡슐화, 상속, 추상화, 다형성을 공부하는 건데 이게 자바의 심장이라고 하시니 좀 더 진지하게 공부해야겠다.
학습목표
1.상위, 하위클래스의 상속관계의 핵심파악.
2.extend키워드를 사용하여 두개이상의 클래스간의 상속관계정의.
3.포함관계와 상속관계의 차이 이해.
4.메서드 오버라이딩의 정의, 성립조건, 장점 이해.
5.super와 super()의 차이.
6.Object클래스가 자바클래스 상속계층도의 최상단에 위치하는 걸 이해.
~는 ~이다. (IS-A)
가 성립하면 상속.~는 ~를 가지고있다. (HAS_A)
가 성립하면 포함관계.class 자식클래스이름 extend 부모클래스이름 {... }
super : 하위클래스에서 상속받은 상위 클래스의 객체의 멤버값을 참고. (this와 비슷)
super() : 상위 클래스의 생성자 호출
Object 클래스는 자바의 클래스 상속계층도의 최상위 클래스.
자바 컴파일러는 아무 상속을 받지 않는 클래스에 자동적으로 Object클래스를 상속받도록 함. (자동으로 extends Object
삽입)
java.lang 패키지
java.lang.Object 클래스
Object 클래스의 대표적 메서드
toString() : 객체정보를 문자열로 출력. String타입 반환
equals(Object obj) : 등가비교연산과 동일하게 스택메모리값 비교. boolean형으로 반환.
hashCode() : 객체의 위치정보관련. Hashtable이나 HashMap에서 동일 객체 여부 판단. int형으로 반환
wait() : 현재 thread 일시정지. void 타입
notify() : 일시정지중인 thread 재동작. void타입
clone() : 인스턴스 복제 후 새로운 인스턴스 생성 및 반환.
- 필드값만 복제.
- 필드값이 배열이나 인스턴스일경우 제대로된 복제 불가능.
- 이 경우 해당 클래스에서 clone()을 오버라이딩하여 복제가 제대로 이뤄지도록 재정의.
- 데이터보호를 이유로 Cloneable인터페이스를 구현한 클래스의 인스턴스만 사용가능.
학습목표
1.캡슐화의 핵심 개념과 목적 이해.
2.패키지의 개념, import문 사용법 이해.
3.접근제어자 4가지 이해.
4.데이터 보호수단 getter/setter메서드 이해.
패키지(Package) : 특정 목적을 공유하는 클래스와 인터페이스 묶음.
패키지가 있는 경우 소스코드의 첫줄에 package 패키지명
을 반드시 표시.
대표적 패키지
java.lang : 자바의 기본 클래스들
java.util : 확장클래스들
java.io : 자바 입출력 관련 클래스
java.nio : 자바 입출력 관련 클래스
패키지로 클래스를 묶으면 : 클래스 충돌 방지. 같은 이름의 클래스라도 다른 패키지에 속할 시 충돌발생x.
import문 : 다른 패키지 내의 클래스를 사용하기 위함. 일반적으로 패키지구문과 클래스 구문 사이에 작성.
import문 문법
import 패키지명.클래스명; //패키지명과 패키지명을 생략하고자 하는 클래스명
import 패키지명.*; // 같은 패키지 여러 클래스명 사용할때.
제어자(Modifier) : 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드. 형용사의 역할(파란 하늘 , 붉은 노을)
접근 제어자는 각 대상에 대해 단 한번만 사용 가능.
private : 동일 클래스에서만 접근가능
default : 동일 패키지 내에서만 접근가능
protected : 동일패키지 + 다른패키지의 하위클래스에서 접근가능
public : 접근제한X.
변수명 앞에 아무런 접근제어자를 붙이지않으면 자동으로 default.
private접근제어자가 포함되어있는 객체 변수의 데이터값을 추가 혹은 수정하고싶을때 getter / setter 사용.
setter메서드 : 외부에서 메서드에 접근하여 데이터값을 변경가능하게 함. 메서드명에 set을 붙여서 사용.
getter메서드 : setter로 설정한 변수값을 읽어오는데 사용. 메서드명 앞에 get을 붙여서 사용.
생각보다 쉬운듯 하면서도 어려운 내용이다.
그래도 코드를 따라서 써가며 더 빨리 이해했고 실력이 그만큼 상승한것같다.
역시 가장 좋은 공부방법은 직접 코드를 작성하는것같다.