본문 바로가기

Java

Java 문법 - 추상클래스, 인터페이스

@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