티스토리 뷰
반응형
자바에서 추상 클래스 및 추상 메서드
- 클래스 앞에 abstract 키워드를 이용하여 추상 클래스로 정의한다.
- 추상 메서드도 리턴 타입 앞에 abstract 키워드를 이용하여 추상 메서드를 정의한다.
- 추상 클래스에 추상 메서드가 있을 경우 반드시 자식 클래스에서 오버라이딩하여 재정의 해야합니다.
- 추상 클래스는 extends를 이용하여 상속 받아 사용합니다.
- 다중 상속 불가
abstract class Game {
String str = "홍길동";
public abstract void start();
public void end() {
System.out.println("게임 끝");
}
}
class StarCraft extends Game{
@Override
public void start() {
// 재정의 할 코드
System.out.println("게임 시작");
}
}
코틀린에서 추상 클래스 및 추상 함수
- abstract 키워드 사용시 클래스나 함수에 open 키워드를 따로 명시하지 않아도 됩니다.
- 추상 함수는 반드시 오버라이딩하여 재정의 해야합니다.
- 다중 상속 불가
- 상속, 오버라이딩 방법 (이전 글 상속 참고)
abstract class Game {
var str = "홍길동"
abstract fun start()
fun end() = println("게임 끝")
}
class StarCraft : Game(){
override fun start(){
// 재정의 할 코
println("게임 시작")
}
}
자바에서 인터페이스
- 변수는 public static final로 사용 하며, 생략 가능
- 메서드 또한 public abstract로 사용 하며. 생략 가능
- 인터페이스 메서드에 코드를 작성 할 시 default 키워드를 이용합니다.
- 인터페이스 또한 추상 메서드는 반드시 오버라이딩하여 재정의 해야합니다.
- 인터페이스는 extends가 아닌 implements를 이용하여 구현
- 여러 인터페이스 사용가능 ex) implements Game, Game2, Game3, ...
interface Game {
public static final int x = 0;
String str = "홍길동";
void start();
abstract void pause();
default void end() {
System.out.println("게임 끝");
}
}
public class StarCraft implements Game {
@Override
public void start() {
// 재정의 할 코드
System.out.println("게임 시작");
}
@Override
public void pause() {
// 재정의 할 코드
System.out.println("일시 정지");
}
}
코틀린에서 인터페이스
- abstract로 정의 된 부분은 반드시 오버라이딩하여 재정의 해야합니다.
- 인터페이스에 초기화 된 변수를 사용하고 싶을 경우 변수 getter을 이용
- 인터페이스에 초기화 없는 변수는 오버라이딩하여 재정의 해야합니다.
- 인터페이스는 클래스가 아니기에 구현 시 Game() 이아니라 Game 괄호가 필요없습니다.
- 여러 인터페이스 사용가능 ex) class StarCraft : Game, Game2, Game3, ... {}
interface Game {
val x: Int // abstract
val str: String get() = "홍길동"
abstract fun start()
fun end() {
println(x)
}
}
class StarCraft : Game {
override val x: Int = 10
override fun start() {
// 재정의 할 코드
println("게임 시작")
}
}
보통 추상 클래스는 기능 확장, 인터페이스는 뼈대(기틀) 마련용으로 사용합니다.
자바8 이후로는 경계선이 더 모호해져서 ... 1:1 일경우 추상 1:n 일경우 인터페이스로
코드 작성 방법에는 답이 없으니 업무 환경이나 프로젝트 환경에따라 맞춰서 하시면 될듯합니다.
위 코드를 이해하기 위해서는 아래 코틀린 문법이 필수입니다.
2019/05/19 - [Kotlin] - 코틀린 기초 문법) 1. 코틀린 변수 정의하기
2019/05/19 - [Kotlin] - 코틀린 기초 문법) 2. 코틀린 함수 정의하기
2019/05/22 - [Kotlin] - 코틀린 기초 문법) 10. 코틀린 클래스와 생성자, init 키워드 알아보기
2019/05/23 - [Kotlin] - 코틀린 기초 문법) 11. 코틀린 상속, open 키워드 알아보기
2019/05/24 - [Kotlin] - 코틀린 기초 문법) 12. 코틀린 오버라이딩, 오버로딩 알아보기
반응형
'Kotlin' 카테고리의 다른 글
17. 코틀린 inner(내부) 클래스 및 중첩 클래스 (0) | 2019.05.28 |
---|---|
코틀린 기초 문법) 16. 코틀린 Sealed Class (실드 클래스, 봉인된 클래스) (2) | 2019.05.28 |
코틀린 기초 문법) 14. 코틀린 lateinit, 속성 참조(더블 콜론 ::) (0) | 2019.05.25 |
코틀린 기초 문법) 13. 코틀린 const (컴파일 타임 상수) (0) | 2019.05.25 |
코틀린 기초 문법) 12. 코틀린 오버라이딩, 오버로딩 알아보기 (0) | 2019.05.24 |
댓글
최근에 올라온 글
최근에 달린 댓글