코드스테이츠 백엔드 15일차 | 객체지향프로그래밍 심화2

hyoreal·2022년 7월 13일
0

CodeStates

목록 보기
16/32

이번 내용은 어제보다 조금 더 어려운 내용일꺼라고 하셨는데 걱정된다..ㅠㅠ 그래도 열심히 잘 해봐야지!


다형성(polymorphism)

학습목표
1.다향성의 의미와 장점 이해
2.참조변수의 타입변환 이해
3.업캐스팅,다운캐스팅 차이 이해
4.instanceof연산자 활용 이해
5.다형성 활용 이해

  • 다형성 : 하나의 객체가 여러가지 형태를 가질 수 있는 성질

    • 자바에서의 다형성 : 상위 클래스 타입의 참조변수를 통해 하위클래스의 객체를 참조할수있도록 허용한것.

  • GirlFriend 클래스의 인스턴스를 생성 후 상위클래스인 Friend타입 참조변수를 할당함.

  • 이 경우, 참조변수가 사용할 수 있는 멤버의 개수는 상위클래스의 멤버 수.

  • 상위클래스 타입으로 하위클래스 참조는 가능, but 하위클래스타입으로 상위클래스 참조 불가능.

    • 불가능 이유? 실제 객체인 상위클래스 멤버개수보다 참조변수가 사용할 수 있는 멤버개수가 더 많기 때문.

    • 사용할 수 있는 기능을 줄이는건 가능, 늘리는건 불가능.

    • 오버로딩, 오버라이딩도 다형성의 예시.

참조변수 타입변환

  • 참조변수 타입변환 : 사용할 수 있는 멤버 개수 조절.

  • 타입변환 조건

    1. 상속 관계에 있는 상위 - 하위클래스 사이에서만 가능
    2. 하위 -> 상위 클래스 타입으로 변환(업캐스팅)은 형변환연산자(괄호) 생략가능.
    3. 상위 -> 하위 클래스 타입으로 변환(다운캐스팅)은 형변환연산자 필요.

instanceof 연산자

  • instanceof : 참조변수의 타입변환(캐스팅) 가능여부를 boolean타입으로 확인할수있는 자바 문법요소.
참조변수 instanceof 타입

  • 소스코드가 길어지는 등 일일이 생성객체타입 확인이 어려운 경우 instanceof 연산자를 통해 형변환여부를 확인해서 에러를 줄일 수 있다.

추상화

학습목표
1.추상화의 개념과 목적 이해
2.abstract제어자가 내포하고있는 의미 이해
3.추상 클래스 개념, 문법 이해
4.final키워드 이해
5.인터페이스 핵심내용,활용법 이해
6.추상클래스와 인터페이스 차이 구분

  • 추상화 : 기존 클래스들의 공통적인 요소들을 뽑아서 상위클래스를 만들어내는것. 상속과 반대개념. 주로 추상클래스와 인터페이스 사용.

abstract 제어자

  • abstract 제어자 : 주로 클래스와 메서드를 형용하는 키워드로 사용. 메서드 앞에 붙으면 '추상 메서드(abstract method)', 클래스 앞에 붙으면 '추상 클래스(abstract)'라고 부름. 핵심개념은 미완성에 있음.

  • 추상 메서드는 메서드 시그니처만 존재. abstract를 붙여 추상메서드임을 표시.

  • 추상클래스는 메서드 바디가 완성되기 전까지 객체생성 불가.

추상 클래스

  • 추상클래스 : 메서드 시그니처만 존재하는 추상메서드를 포함하는 미완성 설계도.
    • 미완성이기에 객체생성 불가능.
    • 객체생성 불가한 클래스 생성 이유?
      • 상속관계에서 새로운 클래스 작성하는데 유용.

  • 추상클래스 생성 -> 상속받는 클래스 안에 추상메서드를 오버라이딩하여 각각 객체에게 맞는 구현부 완성.

    • 이와같이 추상 클래스를 사용하여 오버라이딩을 통해 각자의 상황에 맞는 메서드 구현 가능.

      • 추상화를 구현하는데 핵심역할.
        • 여럿이서 개발할때 공통속성과 기능을 다른 변수,메서드로 정의할때 발생하는 오류 방지.
  • 상속계층도의 위로갈수록 추상화가 높고, 아래로갈수록 구체화됨.

  • 상속계층도의 위로갈수록 공통적 속성,기능 정의.

final 키워드

  • final은 메서드, 지역변수, 클래스앞에 위치할수있지만 위치에 따라 의미가 변함.
    • 메서드 : 오버라이딩 불가
    • 변수 : 값변경 불가 상수
    • 클래스 : 변경 및 확장 불가 클래스, 상속 불가
  • 쉽게 이야기하면 final이 붙은 메서드, 변수, 클래스는 변경불가 및 확장 불가.

인터페이스 (Interface)

  • 인터페이스 : 서로 다른 두 시스템, 장치 소프트웨어 등 을 이어주는 접속장치.

  • 추상클래스에 비해 더 높은 추상성을 띔.

  • 인터페이스는 기본적으로 추상메서드와 상수만을 멤버로 둠. (추상메서드 집합)

  • 인터페이스 기본 구조

    • interface키워드 사용(class 사용X)
    • 내부 모든 필드 public static final 정의
    • 모든 메서드 public abstract로 정의

  • 생략된 부분은 컴파일러가 추가해줌

인터페이스 구현

class 클래스명 implements 인터페이스명 {
    ... // 인터페이스에 정의된 모든 추상메서드 구현
}
  • implements : 구현하다는 의미를 가진 키워드.

  • 추상클래스와 같이 인터페이스도 메서드바디를 따로 정의하는 클래스를 작성해야함.

  • 특정 인터페이스를 구현한 클래스는 인터페이스에 정의된 추상 메서드를 구현해야함.

    • 클래스에게 강제로 인터페이스의 추상메서드를 구현시키는것.
    • 모든 추상 메서드를 클래스 내에서 오버라이딩으로 바디 완성.

인터페이스 다중 구현

  • 클래스는 다중상속 불가하지만 인터페이스는 다중 구현 가능
class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3{
    ...
}

  • 인터페이스 다중구현 가능 이유?

    • 클래스는 상위클래스와 같은 이름의 필드,메서드 존재시 충돌발생, 다중상속 불가.

    • But, 인터페이스는 애초에 미완성이기에 충돌발생여부없음.

    • 특정 클래스는 상속받음과 동시에 인터페이스 구현 가능

    • Animal2을 추상클래스로, Animal2 의 상위클래스로부터 Dof2, Cat2클래스로 확장 및 Pet2 인터페이스 구현.

인터페이스 장점

  • User 클래스에 정의된 callProvider메서드의 매개변수로 Provider 전달 후 호출
  • 만약 Provider2로 변경한다면 Provider2 객체 생성, User클래스 매개변수 변경 등등 번거롭다.
  • 이걸 인터페이스로 적용하면
profile
좌충우돌 코린이 성장기

0개의 댓글