12. 인터페이스와 특수 클래스

zza·2023년 9월 21일
0

Java

목록 보기
12/19

※ chap7

추상클래스


<-> 구체적

  • 미완성 설계도
  • 부모 역할. but, 추상클래스인 경우 객체를 만들 수 없다.(new 못함)
  • abstract 를 붙인다.
  • 추상메서드를 하나라도 가졌으면 추상클래스이다.
  • 상속의 특징을 이용하여, 공통사항을 묶어 부모 역할을 하는 추상클래스를 만든다.

  • 추상메서드는 !무조건! 자식이 재정의해야 한다.
  • 부모는 메서드 이름만 써놨으므로(선언만 했다).
  • 추상클래스를 상속받으면 자식도 추상클래스이므로 재정의하지 않으면, 자식도 객체 생성할 수 없다.

  • 상속만을 위해 만든 클래스
  • {body}가 없다.

응용(지금 하지마)

문제

  1. { } 없이 ; 으로 끝나야 한다.
  1. x
  1. x
    : 하나 이상의 추상 메서드를 포함한 클래스는 추상 클래스이다(o)
    <-> 추상클래스 선언 후 모든 메서드를 구현했다 -> 그래도 추상클래스이다.(abstract class 했으니까)

인터페이스

의미

  • 인터페이스는 접근제어 지정 안하면 public
    (cf. 다른 것들은 defualt)
  • 상수는 상관없음

-인터페이스는 콘센트

  • 컴퓨터가 바뀐다고 사용 방법이 크게 달라지지 않는다 -> 같은 운영체제(window OS) 사용
    : 운영체제가 인터페이스

기초

  • 인터페이스는 상수와 추상메서드만 가질 수 있다.
  • 인터페이스와 클래스는 다르므로 서로 상속할 수 없다.

  • class C1 implements A
    : C1은 A를 구현하겠다! (상속의 extends와 비슷)

  • 인터페이스에 속한 모든 추상메서드를 구현하지 않으면 인터페이스를 구현한 자식 클래스는 사용할 수 없다.

  • 인터페이스는 클래스와 달리 강제적이다.

다중 상속

  • 인터페이스 규격에 맞게 구현했다면, 인터페이스는 여러개 받을 수 있다.
  • 컴퓨터는 전원, 키보드, 마우스 등 여러개 인터페이스를 구현하고 있다.

  • 인터페이스끼리 extends(상속)할 수 있다.

  • 클래스는 인터페이스를 상속(extends)받을 수 없고, 구현(implements)할 수 있다.
    : 상속은 같은 애들끼리만 가능.

  • 인터페이스는 클래스를 상속/구현 할 수 없다.

  • 클래스 상속은 1개만 가능.

문제

  1. o
    :몰라도 돼..
    인터페이스는 상수, 추상메서드만 가진다.
  1. o
    : .java 를 컴파일러가 읽기 위해 class형태로 바꾼다.
  1. implements
    = 구현
  1. default, static, private
    : 안 쓴다.
  1. 인터페이스

인터페이스 다형성

추상클래스 정리

return num1 + num2

문제

  1. run( )
    : bus, autocar 모두 사용하고 있다 > 부모가 구현했거나 or 자식이 오버라이딩 했거나..
    : 문제만 보고는 Car에서 run이 기울어야 하는지 아닌지 알 수 없다.

  2. bus
    : new로 객체 생성했다 > 추상x > 기울이지x

  3. load( )
    : autocar 혼자 사용하고 있는 메소드 + autocar는 일반 클래스(기울이지 않았으니까) -> 구현한 메소드

문제

인터페이스 정리

  • 상속은 is-a 관계
    ex) 나는 사람이다, 고양이는 동물이다.

  • 구현은 has-a 관계
    ex) 자동차는 엔진을 가지고 있다, 캐릭터는 스킬을 가지고 있다.

  • 상속은 실선+빈화살표 class-----▷class
  • 구현은 점선+빈화살표 class- - -▷interface

  • 고객의 요구사항 명세서가 인터페이스가 된다.
  • 프론트와 백엔드를 구분한다.
  • 호환률이 좋다(=갈아끼우기 쉽다)
    : 자바가 아닌 언어를 사용해도(바꿔도) 된다.

  • 반환타입 있으면 클래스와 이름이 같아도 메서드.(생성자는 반환타입 없음)

  • 클래스 다중상속 안되는 이유??

  • 인터페이스 다중상속 되는 이유??
    : 인터페이스는 구현하는 클래스가 메소드를 재정의하면서 같은 이름의 메서드를 합칠 수 있다. -> 충돌 가능성이 없다.(인터페이스에는 애초에 메서드의 {내용}이 없기 때문에)

- 스택 : LIFO(Last In First Out) 방식

- 큐 : FIFO(First IN First Out)

deQ로 나가고 enQ로 들어온다.(한 방향)

문제

  1. implements
  1. 추상클래스(abstract)
  1. 상수
  1. 다형성
  1. default, static

중첩 클래스와 중첩 인터페이스

  • 이런것도 있다..

  • 멤버클래스 정도만 가끔 사용한다.
    B클래스를 A클래스만 쓸 때. 캡슐화 용도

  • this로 부른다.

익명클래스

  • 한번만 쓰고 안 쓸 클래스
    ※ chap7 - anonymous

복습

문제

  1. 3
    : A.this.변수명으로 출력은 가능하나 수정은 x
  1. 1
  1. x
    : 공유하는 코드만 가능
  1. o
  1. 내부 클래스

▲몰라도 돼...

1.3
:인터페이스는 구현부가 없기때문에, 인스턴스 변수, 생성자(new)도 없다. 인터페이스의 모든 멤버는 public으로 공개된다.

  1. pass

  1. 2
    :추상메서드(메서드 abstract 생략 가능)를 가지면 무조건 추상클래스.
    :4번 지금은 가능한 사용 방식이나, 쓰지 않는다.
  1. 4
    : 클래스 다중상속 불가

  1. x
    :8부터. 그렇대..

  1. x
    : 모든 메서드가 abstract인 경우는 인터페이스
  1. x
    : 비어있는 인터페이스 만들 수 있다.
    나중에 추가할 수도 있지..
  1. implements Edible

  1. 2, 6, 8행
    :2행 - 인터페이스는 변수로 상수만 가질 수 있다. 상수는 반드시 초기화해야 한다.
    :6행 - implements
    :8행 - 인터페이스는 객체 생성 불가능

  1. pass

프로그래밍 문제

※ chap7 - programming
Q-5)

Q-6)

미션

※ chap7 - mission

R
전화온 순서대로 고객의 전화를 가져옵니다.
상담원 순서대로 배분합니다.

L
전화온 순서대로 고객의 전화를 가져옵니다.
쉬고 있거나 대기가 가장 적은 상담원에게 할당합니다.

P
고객 등급이 높은 고객의 전화를 먼저 가져옵니다.
업무 skill 값이 높은 상담원에게 우선적으로 배분합니다.

인터페이스와 추상클래스

  • 공통점 : 추상 메서드 포함
    -> 구현 또는 상속으로 재정의(오버라이드: 기존에 있는 것을 바꾸는 것. 기능 구현)
    -> 각각의 클래스에서 정의 : 다형성
    -> 같은 이름의 메서드 호출 시 다른 결과 발생

  • 필요성 : 코드의 중복 제거

  • 차이점

    • 인터페이스 : 기능 명세(강제적), 프로젝트(기능) 뼈대 -> 협업을 위해 사용
      ★콘센트 : 드라이기, 컴퓨터...전자기기 ks(규격) 갈아끼울 수 있다
      has - a 관계
    • 추상클래스 : 미완성 설계도. 상속받는 클래스의 "공통점"을 뽑아 메서드 선언 -> 기능이 완벽히 똑같을 경우 바디{ }까지 작성
      is - a 관계
profile
zza

0개의 댓글