코드스테이츠 Day13
<객체 지향 프로그래밍 심화>
- 상속(Inheritance)
- 기반 클래스의 속성과 기능을 이어받아 새로운 확장된 클래스에서 사용하는 것
- class 확장된 클래스명 extends 기반이 되는 기존 클래스명{}
- Java는 단일 상속만 가능
- 'SportsCar는 Car이다.'의 관계(is)
- cf. 포함 관계 : 다른 클래스를 참조 변수로 선언하여 사용하는 것
- 'Employee는 Address를 가지고 있다.'의 관계(has)
- 메서드 오버라이딩 가능
- 모든 객체를 상위 클래스 타입으로 선언하면 배열로 묶어서 편리하게 관리 가능
- super. : 상위 클래스의 객체를 가리킴
- super() : 생성자 내부의 첫 줄에서 상위 클래스의 생성자 호출
- Object 클래스 : Java의 모든 클래스의 최상위 클래스. 아무런 상속 없을 시 자동으로 컴파일러가 'extends Object' 추가.
- 캡슐화
- 목적 : 데이터 보호, 정보 은닉(data hiding)
- 패키지 : 특정 목적을 공유하는 클래스와 인터페이스의 묶음(폴더와 파일의 관계)
- import문을 통해 다른 패키지 내의 클래스 사용 가능
- 제어자 : 형용사의 역할
- 접근 제어자 : data 보호 및 은닉. 각 대상에 대해 단 한 번만 사용할 수 있음
- public : 모든 접근 허용
- protected : 동일 패키지 또는 상속받은 확장된 클래스에서 접근 가능
- default(기본값) : 동일 패키지 내에서만 접근 가능
- private : 동일 클래스에서만 접근 가능
- getter & setter 메서드 : private 접근 제어자가 포함된 객체의 데이터 값을 수정하고 싶을 때 사용
- set() : 외부에서 메서드에 접근하여 조건에 맞을 경우 데이터 값을 변경
- get() : setter로 변경한 변수 값을 return
- 기타 정리한 것
- 클래스를 만들 때는 가장 먼저 무엇을 객체(붕어빵)로 만들지 고려하기
- command + N : IntelliJ에서 getter/setter 간편하게 만들 수 있는 단축키
- super. 으로 상위 클래스 인스턴스 표시할 때, 상위 클래스의 필드 호출할 때 뿐만 아니라 상위 클래스의 메서드를 호출 할 때도 이렇게 사용해야 함. super.run() 이런 식으로...
- super. 이후에 상속된 상황에 따라 여러 getter들을 이어서 붙일 수 있음. super.getCar().getName() 이런 식으로...
- 캡슐화를 통해 관련 기능은 관련 클래스 내에서 모두 해결해야 한다. 하나의 클래스에서 관련 기능을 모두 해결하게 하여, 상속만 하면 되도록. 수정할 때도 하나의 클래스만 수정하면 되도록. ---> 객체의 자율성 증가 ---> 결합도 낮아짐(good)
<느낀 점>
파이썬 공부할 때도 상속에 대해 공부하긴 했었는데, 뭔가 더 디테일하게 들어가서인지 좀 어려웠다. 오후 줌 미팅 들으면서 생각보다 이해가 부족했다고 느꼈고, 그래서 추가적으로 정리한 것(3)이 꽤 많았다.
수요일에 개인 실습한다는데, 직접 해봐야 알 것 같다.