@markdown
# Java 추상 클래스, 인터페이스
____
## Abstract
- 추상 클래스는 `new`로 생성할 수 없다.
- `abstract` 메소드 하나를 가지고 있다면, 반드시 해당 클래스는 추상 클래스이어야 한다.
## 클래스 형변환
____
<pre><code class="java" style="font-size:14px">1. 자동(묵시적 변환)
double = int
부모 = 자식
2. 강제(명시적 변환)
int = (int)double
자식 = (자식)부모
</code></pre>
## Interface
____
- 7버전에서는 상수+추상메소드만 가능
- 8버전에서는 default, method, static method 추가
<pre><code class="java" style="font-size:14px">public interface TV {
int channel6 = 6; //public static final 생략한 상수
public static final int channel9 = 9;
public abstract void powerOn();
void powerOff(); //public abstract 생략(써도되고 안써도되고)
//public void print() 처럼 구현은 안되지만 8버전 부터는 default 키워드 사용하여 구현할 수 있다.
public default void print(){
System.out.println("default 지정자 추가");
}
//interface에 직접 접근하기 위해 static 키워드 사용하여 접근 할 수 있도록 8버전에서 변경됨
public static void show(){
System.out.println("static 지정자 추가");
}
}
</code></pre>
## Factory 패턴
____
- 객체 생성하는 역할을 담당하는 클래스
- 인터페이스를 정의하여 어떤 클래스의 만들지는 서브클래스에서 결정하게 만든다.
- 팩토리 메소드 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 서브클래스에게 맡기는 것
<pre><code class="java" style="font-size:14px">public class TVFactory {
public static TV makeTV(String brand){
if(brand.equals("samsung")){
return new SamsungTV();
} else if(brand.equals("LG")){
return new LGTV();
} else {
return null;
}
}
public static void main(String[] args) {
TV tv = TVFactory.makeTV("samsung");
tv.powerOn();
tv.print();
TV.show();
tv.powerOff();
}
}
</code></pre>
## 개방 - 폐쇄의 원칙(The Open-Closed Principle)
____
- 객체 지향의 설계 원칙으로 인터페이스의 구현에는 개방되지만 인터페이스의 변경에는 폐쇄적이라는 원칙
- 이 원칙을 이용하여 인터페이스를 사용하는 외부에서는 일관된 참조를 할 수 있으며 인테페이스를 구현하는 내부에서는 다양한 구현부를 제공할 수 있다는 장점이 있다.
'Java' 카테고리의 다른 글
Java 문법 - hashCode(), 객체 복제 (0) | 2017.05.02 |
---|---|
Java 문법 - Inner 클래스, 예외처리 (0) | 2017.05.01 |
Java 문법 - 접근제한자 활용 (0) | 2017.04.27 |
Java 정규식 표현 정리 (0) | 2017.04.27 |
Java 문법 - 변수형, 연산자 (0) | 2017.04.26 |