여니의 성장 diary
article thumbnail
728x90
반응형

한 번 밀렸더니 블로그에 작성할 내용이 점점 밀려가서 다시 제자리를 찾기위해

오늘은 블로그에 게시할 글이 여러개이기 때문에 빠르게 슉슉 =333

 

수업진도에 복습에 예제 풀어보고 문제풀이까지 갈 길이 멀다요...


인터페이스 구현 & 추상메소드

 

클래스의 다형성을 학습하면서 잠시 다뤘던 interface를 구현하는 방법에 대해 배웠다.

 

먼저 상위타입의 RemoteControl 인터페이스를 생성하여 필드와 메소드를 정의해준다.

인터페이스 내에 정의된 필드를 인터페이스 필드라고 하고, 인터페이스 내에서는 상수만 필드로 선언이 가능하다.

또한 인터페이스 내에서는 "public static final" 구문을 생략하여도 상수로 구분된다.

 

다음으로 메소드의 경우 인터페이스 내에서는 추상메소드, 정적메소드, 디폴트메소드를 정의할 수 있고,

추상메소드는 "public abstract" 구문이 생략된 형태로써 몸체를 갖지않는 메소드이다.

 

정적메소드는 public 접근제한자를 생략한 형태이며,

추상메소드와 디폴트메소드는 정적메소드가 아닌 인스턴스 메소드이다.

 

 

다음으로 RemoteControl 인터페이스를 구현하기 위한 Audio, Television 클래스를 생성한다.

Audio, Television 클래스는 RemoteContol 인터페이스를 상속하고, 인터페이스 내 메소드를 오버라이딩하였다.

 

인터페이스 내의 모든 추상메소드는 반드시 오버라이딩(구현)을 해주어야하고,

디폴트 메소드는 선택적으로 오버라이딩 할 수 있다는 것을 알아두어야한다.

 

 

다음으로 추상메소드 구현만을 위한 Dummy 클래스를 생성해주고, 추상메소드를 모두 구현해 준 다음

Dummy를 상속하는 DummyB 클래스를 생성하여 디폴트 메소드를 구현하도록 한다.

 

 

마지막으로 메인메소드에서 RemoteControl 타입의 Television, Audio, DummyB 객체를 생성하여

(인터페이스 타입은 구현객체의 상위타입이 될 수 있음을 활용)

RemoteControl에 정의된 필드와 메소드를 모두 활용해보았다.

 

구현을 위한 클래스 DummyB는 추상클래스 구현을 위한 Dummy 클래스를 상속하고 있고,

Dummy 클래스는 또 다시 RemoteControl 인터페이스를 상속하고 있으므로

DummyB 객체는 RemoteConrol 타입과 Dummy 타입 모두 활용이 가능한 것을 확인하였다.

 

출력 결과는 다음과 같다.

 


인터페이스 구현 - 다중상속

 

같은 방법으로 먼저 필드와 생성자, 게터, 세터를 가진 추상클래스 Building을 생성해주었다.

 

추상클래스 Building에서는 hp, buildTime을 필드로 정의하고,

필드를 매개변수로 하는 생성자 Building, 그리고 hp의 게터 세터를 정의하였다.

 

 

그리고 각각 다른 추상메소드를 정의하는 인터페이스 4개를 생성해주었다.

 

건물 생성을 위한 Generatable, 건물을 들어올리기 위한 Liftable,

건물 수리를 위한 Repairable, 건물 업그레이드를 위한 Upgradable 인터페이스이다.

 

 

클래스와는 달리 인터페이스는 다중상속이 가능하다는 특징을 활용하여

Building 클래스를 상속하고, Upgradable, Repariable 인터페이스를 구현하는 Academy 클래스를 생성하였다.

 

그리고 Upgradable의 추상메소드, Repairable의 추상메소드를 모두 구현하고,

Building 생성자를 그대로 반환하는 생성자를 정의해주었다.

 

 

같은 방법으로 Building 클래스를 상속하고, Generatable, Repairable, Liftable 인터페이스를 구현하는

Barraks 클래스를 생성하고 모든 추상메소드를 구현하도록 정의해주었다.

 

 

그리고 메인메소드에서 Building 타입의 Barraks 객체와 Generatable 타입의 Barracks 객체를 각각 생성해주었다.

 

Building 타입의 b1은 getHp(), setHp() 메소드만 활용할 수 있고,

Genratable 타입의 b2는 genrateUnit() 메소드만 활용이 가능하였다.

 

Barraks는 Buiding 클래스와 Generatable 인터페이스를 모두 상속하는 클래스이기 때문에

해당 타입으로 객체를 생성하는 것은 자동 형변환을 통해 가능하지만

해당 타입에 정의된 메소드만 활용이 가능하다는 것을 확인할 수 있었다.

 

Building타입의 객체 b1을 Barraks 타입으로 강제 형변환하면

모든 Barraks 클래스 내의 모든 메소드를 호출할 수 있다는 것을 확인할 수 있었다.

 

출력 결과는 다음과 같다.

728x90
반응형
profile

여니의 성장 diary

@pponyo

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!