2020. 4. 20. 16:50ㆍJAVA
abstract class(추상 클래스)
- 인스턴스를 생성하지 못하는 클래스
- 변수를 선언할 수 있지만 생성자를 호출하지 못하는 클래스
- 다형성 구현을 위해 만들어진 클래스
abstract method
- 내용이 없는 메소드
- 자바에서는 이 메소드는 추상 클래스나 인터페이스에만 존재해야 함.
- 상속받은 클래스에서는 반드시 오버라이딩해서 내용을 만들어야 함.
- 메소드의 결과형 앞에 abstract를 추가하면 됨.
Interface
- final상수와 abstract method 그리고 default method를 가진 것으로 protocol이라고 하기도 함.
- 클래스를 만들 때 사용하는 class라는 예약어 대신에 interface라는 예약어를 사용해 생성
- 변수를 만들때 final을 붙이지 않아도 자동으로 추가되어 값을 변경할 수 없도록 함.
- 메소드를 만들때 abstract를 붙이지 않아도 자동으로 abstract가 추가되서 추상 메소드가 됨.
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 |