티스토리 뷰

반응형

자바에서 추상 클래스 및 추상 메서드

  • 클래스 앞에 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. 코틀린 오버라이딩, 오버로딩 알아보기

 

반응형
댓글
최근에 올라온 글
최근에 달린 댓글