JAVA/객체지향프로그래밍

OOP - 3

JINGMONG 2021. 12. 6. 21:02

1. abstract class

정의

자손 클래스에서 반드시 재정의해서 사용되기 때문에 조상의 구현이 무의미한 메서드

  • 메서드의 선언부만 남기고 구현부는 세미콜론으로 대체
  • 구현부가 없다는 의미로 abstract키워드를 메서드 선언부에 추가
  • 객체를 생성할 수 없는 클래스라는 의미로 클래스 선언부에 abstact를 추가한다.

abstract 클래스는 상속 전용의 클래스

  • 클래스에 구현부가 없는 메석드가 있으므로 객체를 생성할 수 없다.
  • 하지만 상위클래스 타입으로써 자식을 참조할 수는 있다.

조상 클래스에서 상속 받은 abstract 메서드를 재정의 하지 않은 경우

  • 클래스 내부에 abstract 메서드가 있는 상황이므로 자식 클래스는 abstract 클래스로 선언되어야 함

추상 클래스를 사용하는 이유

abstract 클래스는 구현의 강제를 통해 프로그램의 안정성 향상

interface에 있는 메서드 중 구현할 수 있는 메서드를 구현해 개발의 편의 지원

2. interface

interface?

최고 수준의 추상화 단계: 모든 메서드가 abstract 형태

형태

  • 클래스와 유사하게 interface선언
  • 멤버 구성모든 메서드는 public abstract 이며 생략 가능
  • public interface InterfaceTest { public static final int MEMBER1 = 10; int MEMBER2 = 10; public abstract void method1(int param); void method2(int param); }
  • 모든 멤버 변수는 public static final 이며 생략 가능

인터페이스 상속

클래스와 마찬가지로 인터페이스도 extends를 이용해 상속이 가능

인터페이스 구현과 객체 참조

클래스와 다른 점은 인터페이스는 다중 상속이 가능

클래스에서 implements 키워드를 사용해서 interface구현

implements 한 클래스는

  • 모든 abstract 메서드를 override해서 구현하거나
  • 구현하지 않을 경우 abstract 클래스로 표시해야 함

여러개의 interface implements 가능

다형성은 조상 클래스 뿐 아니라 조상 인터페이스에도 적용

인터페이스의 필요성

구현의 강제로 표준화 처리

인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원

서로 상속의 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장

모듈 간 독립적 프로그래밍 가능 → 개발 기간 단축

default method

인터페이스에 선언 된 구현부가 있는 일반 메서드

메서드 선언부에 default modifier 추가 후 메서드 구현부 작성

  • 접근 제한자는 public으로 한정됨

필요성

  • 기존에 interface 기반으로 동작하는 라이브러리의 interface에 추가해야 하는 기능이 발생
  • 기존 방식으로라면 모든 구현체들이 추가되는 메서드를 override 해야 함
  • default 메소드는 abstract가 아니므로 반드시 구현 해야 할 필요는 없어짐

default method의 충돌

동일한 이름을 갖는 구현부가 있는 메서드가 충돌

우선순위

  1. super class의 method 우선: super class가 구체적인 메서드를 갖는 경우 default method는 무시됨
  2. interface간의 충돌: 하나의 interface에서 default method를 제공하고 다른 interface에서도 같은 이름의 메서드가 있을 때 sub class는 반드시 override해서 충돌 해결

static method

interface에 선언된 static method

  • 일반 static 메서드와 마찬가지로 별도의 객체가 필요 없음
  • 구현체 클래스 없이 바로 인터페이스 이름으로 메서드에 접근해서 사용 가능

3. Generics

다양한 타입의 객체를 다루는 메서드, 컬렉션 클래스에서 컴파일 시에 타입 체크

미리 사용할 타입을 명시해서 형 변환을 하지 않아도 되게 함

  • 객체의 타입에 대한 안전성 향상 및 형 변환의 번거로움 감소

표현

클래스 또는 인터페이스 선언시 <>에 타입 파라미터 표시

public class Class_Name<T>{}
public interface Interface_Name<T>{}

타입 파라미터

특별한 의미의 알파벳 보다는 단순히 임의의 참조형 타입을 말함

  • T : reference Type
  • E : Element
  • K : Key
  • V : Value

객체생성

변수 쪽과 생성 쪽 타입은 반드시 같아야 함

'JAVA > 객체지향프로그래밍' 카테고리의 다른 글

Collection Framework  (0) 2021.12.06
Exception Handling  (0) 2021.12.06
OOP - 2  (0) 2021.12.06
OOP - 1  (0) 2021.12.06