Abstract

2020. 4. 20. 16:50JAVA

abstract class(추상 클래스)

- 인스턴스를 생성하지 못하는 클래스

- 변수를 선언할 수 있지만 생성자를 호출하지 못하는 클래스

- 다형성 구현을 위해 만들어진 클래스

 

abstract method

- 내용이 없는 메소드

- 자바에서는 이 메소드는 추상 클래스나 인터페이스에만 존재해야 함.

- 상속받은 클래스에서는 반드시 오버라이딩해서 내용을 만들어야 함. 

- 메소드의 결과형 앞에 abstract를 추가하면 됨.

 

Interface

- final상수와 abstract method 그리고 default method를 가진 것으로 protocol이라고 하기도 함.

- 클래스를 만들 때 사용하는 class라는 예약어 대신에 interface라는 예약어를 사용해 생성

- 변수를 만들때 final을 붙이지 않아도 자동으로 추가되어 값을 변경할 수 없도록 함.

- 메소드를 만들때 abstract를 붙이지 않아도 자동으로 abstract가 추가되서 추상 메소드가 됨.

 

생성하는법

 

class에서 가져다가 사용, 여러개 implements 가능

 

default method

- 인터페이스에 내용이 있는 메소드를 필요로 할 때 사용

- 이 메소드는 접근지정자를 public, protected, private 대신에 default로 기재

- 이 메소드는 추상 메소드가 아니라서 클래스에서 구현하지 않아도 됨.

- 목적은 추상 메소드는 하위 클래스에서 무조건 구현해야 하는데 default method는 재정의 하면

   재정의 한 기능을 갖고 그렇지 않으면 기본 기능을 갖는다.

- default method는 선택적 구현이 가능함.(해도 그만 안해도 그만)

- 또 다른 목적은 유지보수를 할 때 인터페이스에 추상 메소드를 만들면 기존의 인터페이스를 구현한 모든

  클래스가 이 메소드를 만들어야 하지만 default method로 추가하면 기존 클래스는 만들지 않아도

  에러 발생 X

 

인터페이스도 상속 가능

- 인터페이스가 다른 인터페이스에 상속 가능

- implements 대신 extends를 사용해 상속

 

Template Method Pattern

- Business Logic(Service)을 구현할 때 고객의 요구사항을 interface를 이용해서 표현하고

  Interface를 implements한 클래스에서 내용을 만드는 방식

- 자바에서는 인터페이스를 이용해서 구현하고 swift에서는 프로토콜을 이용해 구현 

 

쉽게 말해서 템플릿 메소드 패턴은 모양을 만들고 내용을 구현하는 것이고

ex) Starcraft -> StarcraftImpl

 

다형성은 동일한 코드가 대입된 인스턴스에 따라 다르게 반응하는 것.

Starcraft -> Zerg

Starcraft -> Terran

Starcraft -> Protoss

 

* 클래스를 상속받는 경우 뒤에 Ex를 붙이고 인터페이스를 implements 하는 경우 impl을 붙이는 경우가 많음

  JDK에서는 Listener, able로 끝나는 이름들은 무조건 인터페이스.

  Adaptor로 끝나는 이름은 추상 클래스.

 

final

1) final class: 상속을 할 수 없는 클래스

- 시스템과 관련된 중요한 클래스들은 상속을 하게 되면 시스템에 문제가 발생할 수 있기 때문에 상속을 못하도록 함.

 

2) final method: 오버라이딩 할 수 없는 메소드

- 시스템과 관련된 중요한 메소드들은 오버라이딩을 하게되면 시스템에 문제가 발생할 수 있기때문에

  오버라이딩 못하도록 함.

 

3) final variable: 변수의 값을 변경할 수 없도록 한 것

- 변수의 상수화

- 읽기 전용의 데이터를 만드는 기능으로 변경을 할 수 없도록 하기 위해서 생성하는 경우도 있고

   클래스 내에서 사용할 옵션으로 사용하기 위해서 생성하기도 함.

- 이름을 만들때 모두 대문자로 하는 것이 관례

 

클래스들 사이의 관계

- 기본적으로 하나의 프로그램에 사용된 모든 클래스들은 다른 클래스와의 관계를 가져야 함.

1. is a 관계(상속)

2. has a 관계(포함)

1) 다른 클래스의 인스턴스를 가지고 메소드를 호출하기 위해서 생성

2) 다른 클래스들의 인스턴스를 모아서 새로운 하나를 만들기 위해서 생성

'JAVA' 카테고리의 다른 글

내부 클래스  (0) 2020.04.21
Business Logic 구현 방법  (0) 2020.04.20
다형성  (0) 2020.04.20
참조형 변수의 대입  (0) 2020.04.20
Super  (0) 2020.04.20