본문 바로가기

Java/[패스트캠퍼스] 100% 환급 챌린지

패스트캠퍼스 환급챌린지 47일차 미션 (3월 18일) : 시그니처 백엔드 Path 초격차 패키지 Online. 강의 후기

https://fastcampus.co.kr/dev_online_besignature
수강 강의명

강의 내용

[1] 인터페이스의 등장
[2] 인터페이스와 다형성

 

[1] 인터페이스의 등장

일반 클래스와 추상 클래스

Radio(하위 클래스), TV(하위 클래스), RemoCon(상위 클래스)

*RemoCon(상위 클래스) : Radio와 TV의 공통 기능을 정의(채널 올림/내림, 소리 올림/내림)

 

일반 클래스
하위 클래스(Radio/TV)가 상위 클래스(RemoCon)의 메서드를 재정의해도 되고, 안 해도 되기 때문에 다형성을 보장할 수 없음

추상 클래스

하위 클래스의 재정의를 강제함으로써 다형성이 보장되지만, 구현 메서드로 인해 하위 클래스가 오동작 될 수 있음

추상 메서드
하위 클래스에서 자신에 맞게 재정의하여 사용해야 함
chUp();

chDown();
volUp();
volDown();

구현 메서드
재정의하지 않고 그대로 사용할 경우 오동작 될 수 있음
TV에는 필요한 기능이지만, Radio에는 불필요할 수 있음
internet() { 인터넷이 된다. }

 

Q. 서로 다른 동작을 가지는 클래스를 상속 관계로 만들어 동작시켜야 한다면?(추상 클래스)
추상 클래스는 추상 메서드와 구현 메서드를 갖으므로 기능이 비슷한 클래스들을 묶을 때 사용해야 함
// 추상 클래스 : 추상 메서드 + 구현 메서드
public abstract class RemoCon {
    // 추상 메서드
    // 공통 기능 : chUp(), chDown(), volUp(), volDown()
    public abstract void chUp();
    public abstract void chDown();
    public abstract void volUp();
    public abstract void volDown();

    // 구현 메서드
    public void internet() {
        System.out.println("인터넷이 구동된다.");
    }
}
public class Radio extends RemoCon {
    @Override
    public void chUp() {
        System.out.println("Radio의 채널이 올라간다.");
    }

    @Override
    public void chDown() {
        System.out.println("Radio의 채널이 내려간다.");
    }

    @Override
    public void volUp() {
        System.out.println("Radio의 소리가 올라간다.");
    }

    @Override
    public void volDown() {
        System.out.println("Radio의 소리가 내려간다.");
    }
}
public class TV extends RemoCon {
    @Override
    public void chUp() {
        System.out.println("Tv의 채널이 올라간다.");
    }

    @Override
    public void chDown() {
        System.out.println("Tv의 채널이 내려간다.");
    }

    @Override
    public void volUp() {
        System.out.println("Tv의 소리가 올라간다.");
    }

    @Override
    public void volDown() {
        System.out.println("Tv의 소리가 내려간다.");
    }
}
public class InterfaceTest {
    public static void main(String[] args) {
        // 리모콘으로 Radio와 Tv를 동작시키시오.
        RemoCon remo = new Radio();
        remo.chUp();
        remo.chDown();
        remo.volUp();
        remo.volDown();
        remo.internet();  // 오동작

        remo = new TV();
        remo.chUp();
        remo.chDown();
        remo.volUp();
        remo.volDown();
        remo.internet();
    }
}

 

[2] 인터페이스와 다형성

인터페이스

추상 메서드로만 이뤄진 클래스(다형성 100% 보장)

하위 클래스는 인터페이스가 갖는 동작을 구현(implements)시켜야 함(상속 X)

메서드를 정의할 때 abstract 키워드는 생략 가능(묵시적으로 추상 메서드가 된다.)

상위 클래스가 인터페이스이면 하위 클래스의 내부 동작 방식을 몰라도 모든 메서드를 동작시킬 수 있다.
*추상 클래스 : 추상 메서드와 구현 메서드를 갖음(다형성 일부 보장)
*추상 메서드 : 하위 클래스가 무조건 재정의해야 함(다형성 보장)
*implements : 구현하다

 

인터페이스와 규약

인터페이스는 동작을 설명하는 규약/약속/정의

하한(최소값, 최대값)을 정하지 않으면 규약이라 보기 어려움
하한을 결정할 수 있는 정보를 인터페이스 안에 넣어야 함

 

인터페이스에서 사용하는 final static 상수

인터페이스는 추상 메서드 + final static 상수를 갖는다.

[final static]로 작성하거나 [static final]로 작성하면 된다(작성 순서 무방)

*변수 : 변하는 수
*상수 : 한 번 값이 들어가게 되면 더 이상 변경할 수 없는 수

*final(종단) : 변수에 값을 초기화하면 더 이상 변경할 수 없음
*static : 인터페이스는 객체를 생성할 수 없기 때문에 객체 생성없이 접근 가능해야 함

*인터페이스에서 사용하는 메서드 : abstract 키워드 생략 가능
*인터페이스에서 사용하는 변수 : static final/final static 키워드 생략 가능

Q. 아래의 스펙을 보고 클래스를 설계하여 하나의 리모콘으로 Radio와 TV를 구동하시오.
(1) Radio와 TV는 채널을 올리고, 채널을 내리고, 소리를 올리고, 소리를 내리는 공통 기능이 있다.
(2) 단, TV에만 인터넷 기능이 있다.
public interface RemoCon {
    public int MAXCH = 99;
    public int MINCH = 1;

    // 추상 메서드
    // 공통 기능 : chUp(), chDown(), volUp(), volDown()
    public void chUp();
    public void chDown();
    public void volUp();
    public void volDown();
    public void internet();
}
public class Radio implements RemoCon {
    @Override
    public void chUp() {
        System.out.println("Radio의 채널이 올라간다.");
    }

    @Override
    public void chDown() {
        System.out.println("Radio의 채널이 내려간다.");
    }

    @Override
    public void volUp() {
        System.out.println("Radio의 소리가 올라간다.");
    }

    @Override
    public void volDown() {
        System.out.println("Radio의 소리가 내려간다.");
    }

    @Override
    public void internet() {
        System.out.println("Radio에서는 인터넷이 지원되지 않습니다.");  // 기능이 없다는 표현
    }
}
public class TV implements RemoCon {
    @Override
    public void chUp() {
        curch++;

        if (curch > RemoCon.MAXCH) {  // 하한
            curch = 1;
        }
        System.out.println("TV의 채널이 올라간다.");
    }

    @Override
    public void chDown() {
        curch--;

        if (curch > RemoCon.MINCH) {  // 하한
            curch = 99;
        }
        System.out.println("TV의 채널이 내려간다.");
    }

    @Override
    public void volUp() {
        System.out.println("TV의 소리가 올라간다.");
    }

    @Override
    public void volDown() {
        System.out.println("TV의 소리가 내려간다.");
    }

    @Override
    public void internet() {
        System.out.println("TV에서 인터넷이 실행된다.");
    }
}
public class InterfaceTest {
    public static void main(String[] args) {
        // 리모콘으로 Radio와 Tv를 동작시키시오.
        RemoCon remo = new Radio();
        remo.chUp();
        remo.chDown();
        remo.volUp();
        remo.volDown();
        remo.internet();  // Radio에서는 인터넷이 지원되지 않습니다.

        remo = new TV();
        remo.chUp();
        remo.chDown();
        remo.volUp();
        remo.volDown();
        remo.internet();  // TV에서 인터넷이 실행된다.
    }
}

 


 

수강 화면수강 화면
수강 화면

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/48sS29N

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr