Code States | OOP 심화(3) - 다형성, 추상화

yeonk·2022년 5월 25일
1

codestates-backend-bootcamp

목록 보기
12/19
post-thumbnail

💡 먼저 보면 좋을 자료
Code States | OOP 심화(1) - 상속
Code States | OOP 심화(2) - 캡슐화






1. 다형성(Polymorphism)


  • 하나의 객체가 다양한 형태를 가질 수 있는 것
  • 한 타입의 참조변수로 여러 타입 객체 참조
  • 상속 관계일 때, 하위 클래스의 타입으로 상위 클래스 타입의 객체를 참조하는 것은 불가능함 (반대 가능)

  • 메서드 오버라이딩, 메서드 오버로딩이 이에 해당

  • 코드 중복 감소로 효율적






2. 참조변수 타입 변환


참조 변수의 타입 변환 → 멤버의 개수 조절

  • 조건

    • 상속관계인 상위 클래스 - 하위 클래스 간 타입 변환이 가능

    • 업캐스팅: 하위 클래스 타입 → 상위 클래스 타입 변환, 형변환 연산자(괄호) 생략 가능

    • 다운캐스팅: 상위 클래스 타입 → 하위 클래스 타입 변환, 형변환 연산자(괄호) 생략 불가






  • instanceof연산자: 캐스팅 가능 여부 판단
참조변수 instanceof 타입






3. 추상화(Abstraction)


객체들의 공통 속성 및 기능을 정의
추상 클래스, 인터페이스를 통해 구현

  • 코드의 중복을 줄일 수 있음

  • 클래스간 관계 설정에 효과적

  • 유지 보수 용이






abstract 제어자

  • 추상 메서드(abstract method), 추상 클래스(abstract class) 작성 시 사용

  • 추상 메서드

    • 바디가 없는 메서드 (시그니처만 존재)

    • 미완성 메서드






추상 클래스

  • 추상 메서드를 포함하는 클래스

  • 객체 생성 불가능

  • 활용

    • 상속관계에서 새로운 클래스 작성 시 효과적으로 사용할 수 있음

    • 상속 시 오버라이딩을 통해 내용 구현

    • 상황에 따라 적절하게 메서드를 구현할 수 있음






final 키워드

  • 필드, 지역변수, 메서드, 클래스 앞에 위치

    • 클래스에 사용: 상속 불가 조건, 변경 및 확장 불가

    • 메서드에 사용: 오버라이딩 불가

    • 변수에 사용: 값 변경 불가 (상수로의 역할)






4. 인터페이스(Interface)


동일 목적으로 공통 기능을 수행하도록 강제하는 것

  • 코드 수정을 감소시키고 유지보수성을 높이기 위한 목적

  • 다형성 극대화

  • 추상 메서드, 상수만 멤버로 취할 수 있음

  • 추상 클래스보다 더 높은 추상성을 가짐

  • interface 키워드를 사용

  • 내부 필드 정의: public static final 사용 (생략 가능 - 컴파일러 자동 생성)

  • 메서드 정의: public abstract 사용 (생략 가능 - 컴파일러 자동 생성)






구현

  • 인터페이스 구현 시 implements 키워드 사용

  • 다중 구현 가능 (클래스는 다중 상속 불가)

class 클래스명 implements 인터페이스명 { 코드 }

class 클래스명 implements 인터페이스1, 인터페이스2 { 코드 }






5. 참고 자료


[JAVA] 자바 인터페이스란?(Interface)_이 글 하나로 박살내자

[Java] 추상 클래스와 인터페이스의 차이

[JAVA] abstract와 interface의 차이점

0개의 댓글