일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- vuejs
- QTcpServer
- 자료구조
- 디자이어HD
- 안드로이드
- QT
- Qt4
- 스타2
- 윈도우7
- Java
- 재귀함수
- 엑티브엑스
- HTML
- 알람프로그램
- 잡담
- 고속도로
- c언어
- Qt 소켓프로그래밍
- android SAF
- Qt OpenGL
- 이륜차
- 마영전
- qt 설치
- 스타크래프트2
- 바이크
- 오토바이
- 양평역
- 자바
- FFI
- 정성하
- Today
- Total
프로그래밍과 잡담
[이펙티브자바] 상속보다는 인터페이스를 사용하라.. 본문
뭐 이펙티브자바 보면 나오는 말이다..
상속보다는 인터페이스를 이용하라고 나온다.
왜냐하면 상속은 캡슐화( 정보 은닉) 를 깨는 것이기 때문에 사용하지 말라고 한다.
그러면서 각종 상속을 쓰면 안돼는 이유가 줄줄줄 나온다.
1. 상위 클래스에서 만든 버그가 상속 받은 자식 클래스로 같이 간다는것.
2. 오버라이드 가능한 메소드로 인해서 하위 클래스가 망가지던가 이상하게 동작할 수 있다는것.
3. 오버라이드 가능한 메소드들의 자기 사용을 조심해야한다.
등등등..
그리고 일반 클래스를 만들 꺼면 final을 붙이거나 private 생성자를 이용해서 상속을 못하게 하라고 한다.
예1)
final class super{...}
예2)
class super{ private super(){...} }
상속을 써서 가장 큰 문제점은 역시나 정보를 유출 시킨다는 점이다.
이것은 책에서도 굵게 써져있다.
OOP(Object Oriented Programming) 객체 지향 프로그래밍을 사용하는 언어들을 보면 대부분 같을 것이다.
나의 경우는 자바를 많이 배웠을므로 자바같은 경우는
상속을 하면 private는 자식 클래스가 접근이 불가능 하지만 protected나 public은 접근이 가능하기 때문이다.
OOP하면 나오는 캡슐화, 정보은닉이 나온다. 상속을 이것을 깬다.
반면에 인터페이스를 그럴 이유가 없기 때문에 사용하라는거 같다.
인터페이스는 추상 클래스나 일반 클래스들과는 다르게 메소드 정의만 사용할 수 있기 때문이다.
//인터페이스 구조 interface inter{ public void overrideMe(); ... } //추상 클래스 구조 abstract class AClass{ protected int field; protected abstract void overrideMe(){ } .... }
일반클래스는 당연한거고 추상클래스도 필드를 가질 수 있을 뿐만 아니라 메소드를 구현 할 수 있기 때문에 잘못 만들면 정보은닉이 실패하게 될 수 있기 때문이다.
사실 혼자 프로그램을 만들면 이딴거 지킬 필요 없다. 왜냐 어차피 자신이 만든거면 남이 건들 일이 없기 때문이지.
하지만 여럿이하게되면 이와같은 방식으로 해야 할 것 같아 보인다. 그게 나중을 위해서도 좋을 테니...
'프로그래밍 > Java,Kotlin' 카테고리의 다른 글
[Spring] 외부파일로 JDBC 셋팅 (0) | 2020.10.29 |
---|---|
[라스비안] jar 파일을 OS가 시작 시 실행하기 (0) | 2017.08.19 |
[이클립스] 나의 자바 구문 강조 (0) | 2014.09.28 |
[Java] 쓰레드... (0) | 2012.09.28 |
[자바] 상속을 막는 방법. (0) | 2012.08.22 |