[CodeStatesLog] Polymorphism, Abstraction

hk·2022년 5월 13일
0

CodeStatesLog

목록 보기
11/15

[Week03, Day014][FRI 13 MAY 2022]
Java OOP 심화 2
Polymorphism 다형성, Abstraction 추상화


Polymorphism 다형성

다형성이란 '여러가지 형태를 가질 수 있는 능력' 을 의미하며, 자바에서는 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.

자바의 정석 p.246

class Tv {
	boolean power;
    int channel;
    
    void power() { power = !power; }
    void channelUp { ++channel; }
    void channelDown { --channel; }
}

class SmartTv extends Tv{
	String text;
	void caption() { 내용생략}
}

자바의 정석이랑 유어클래스 읽어봤는데 먼소린지 모르겠다
주말에 유투브도 찾아보고.. ㅠㅠ


abstract 제어자

abstract는 클래스와 메서드를 형용하는 키워드로 사용
메서드 앞에 붙은 경우를 ‘추상 메서드(abstract method)’
클래스 앞에 붙은 경우를 ‘추상 클래스(abstract class)’

어떤 클래스에 추상 메서드가 포함되어있는 경우
해당 클래스는 자동으로 추상 클래스가 됩니다.

abstract class AbstractExample { 
// 추상 메서드가 최소 하나 이상 포함돼있는 추상 클래스

	abstract void start(); 
    // 메서드 바디가 없는 추상메서드
}

추상 클래스는 미완성 설계도, 인스턴스 생성불가

추상클래스는 키워드 'abstract'를 붙이기만 하면 된다. 이렇게 함으로써 이 클래스를 사용할 때 클래스 선언부의 abstract를 보고 이 클래스에는 추상메서드가 있으니 상속을 통해서 구현해주어야 한다는 것을 알 수 있다.

abstact method

메서드는 선언부와 구현부로 구성되어 있다. 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것이 추상 메서드이다. 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것이다.

  • abstract를 쓰는 이유?
    말 바꾸기가 쉽기 때문이다. 모호함을 취함..
    body를 구체적으로 명시하지 않는 이유는 확장이 편하기 때문.
주석을 통해 어떤 기능을 수행할 목적으로 작성하였는지 설명한다. 
abstract 리턴타입 메서드이름();

abstract class player { //추상클래스
	abstract void play(int pos); //추상메서드
    abstact void stop; //추상메서드
}

class AudioPlayer extends Player {
	void play(int pos){ /*내용생략*/ }  //추상메서드를 구현
    void stop(){ /*내용생략*/ } //추상메서드를 구현

abstract class AbstactPlayer extends Player{ 
	void play(int pos){/*내용생략*/}; //추상메서드를 구현
}

interface 인터페이스

인터페이스는 일종의 추상 클래스이다. 인트페이스는 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다.

추상 클래스를 부분적으로만 완성된 미완성 설계도라고 한다면, 인터페이스는 구현된 것은 아무것도 없고 밑그림만 그려져있는 기본 설계도라 할 수 있다.

interface 인터페이스이름 {
	public static final 타입 상수이름 = 값;
    public abstract 메서드이름(매개변수목록);
}

일반적인 클래스와 달리 인터페이스의 멤버들은

  • 모든 멤버변수는 public static final이어야하며, 이를 생략할 수 있다.
  • 모든 메서드는 public abstract 여야하며 이를 생략할 수 있다.
    (static 메서드와 디폴트 메서드는 예외)
profile
cloud master가 될 거야! (not 석사)

0개의 댓글