상속과 Generic Programming

최원준·2021년 9월 26일
0

1. 상속


1-1. 상속이란?

자식클래스 extends 부모클래스

  • 부모클래스 : Super Class, Base Class, Parent Class
  • 자식클래스 : Sub Class, Extended Class, Childeren Class

1-2. 상속을 하는 이유?

코드의 중복을 제거할 수 있기 때문에.


1-3. 상속의 특징

A. 생성자

  1. Java의 Class는 반드시 적어도 1개의 생성자를 가져야 한다.
    만약 생성자가 없으면, 자동으로 non-parameter 생성자를 만들어 준다.

  2. 모든 Sub Class 생성자는 모든 Super Class 생성자를 호출한다.
    2-1. super(...)를 통해 명시적으로 호출해 주거나
    2-2. 그렇지 않을 경우에는 자동으로 no-parameter 생성자가 호출된다.

    흔한 오류: Super Class에 no-parameter 생성자가 없는데, 서브클래스의 생성자에서 super(...) 호출을 안해주는 경우

B. 상속을 할 때, 접근 제한자를 신경써야 한다.

Java에서 private 접근 제한자는 부모 자식간 관계에서, 자식 Class에서는 사용할 수 없다.
protected 는 가능하다.


<필드와 메소드의 접근제한>
접근 제한자생성자설명
public필드, 메소드모든 패키지에서 아무런 제한없이 필드와 메소드를 사용할 수 있다.
protected필드, 메소드같은 패키지에 속하면서, 해당 클래스의 자식클래스에서 필드와 메소드를 사용할 수 있다.
default필드, 메소드같은 패키지에서 아무런 제한없이 필드와 메소드를 사용할 수 있다.
private필드, 메소드오로지 해당 클래스 내부에서만 사용할 수 있다.

C. Method Overriding

부모로 부터 받은 method를 자식에서 Overriding 할 수 있다. super 라는 키워드로 중복제거를 하는 것이 우아한 방법이다.

public String toString(){	//자식 클래스에서 Method Overriding 하는 경우

	String result = super.toString() + "~" + "~";
   	return result;
}

1-4. 다형성: Polymorphism

Super Class 타입의 변수가 Sub Class 타입의 객체를 참조할 수 있다.

Strong Typing의 원칙 : 변수의 타입과, 그 변수가 저장하는(참조하는) 데이터의 타입이 동일해야 한다.

Strong Typing 강력한 예외가 다형성이다.
Super Class의 변수가 Sub Class 객체를 참조 할 수 있기 때문이다.


다형성으로 이용된 변수의 method는 누구를 호출하는가?

자바에서는 Sub Class의 메소드를 호출한다.

이 부분에서 더 공부해야 할 부분이 Static binding / Dynamic binding 인데, 이 것은 나중에 자세히 정리하기로 하자.

2. Class Object

Object Class는 Java에서 모든 Class의 Super Class이다.
(https://docs.oracle.com/javase/8/docs/api/)

Java의 모든 클래스는 내가 만들어주지 않아도 이미 equals와 toString 메소드를 가지고 있다. 다만 내 의도대로 작동하지는 않을 것이다.


2-1. primitive vs non-primitive

자바의 자료형은 크게 두가지로 나뉜다. Primitive Type은 기본형으로 일반적으로 제공하는 자료형이고 Non-Primitive Type은 오브젝트와 관련된 자료형이다.

정수형(Integeral), 소수(Floating), 논리(Logical), 문자(Texture) 형이 Primitive Type이다.

Primitive Type

  • btye, short, int, long
  • float, double
  • boolean
  • char

Non-Primitive Type

  • String 등등

Object 배열은 모든 종류의 객체 저장 가능하다. 그러나 Primitive 타입은 저장할 수 없다. 객체가 아니기 때문이다. Primitive 타입을 객체로 저장할 때 Wrapper Class를 사용해야 한다. (Integer, Boolean 같은)

wrapping unwrapping

Java는 컴파일러가 Auto Boxing을 해주곤 한다.

2-2. 추상 클래스, 인터페이스


A. 추상 클래스

  • 추상(abstract) 메소드는 선언만 이쏙 구현이 없는 메소드.
  • 추상 메소드를 포함한 클래스는 추상 클래스.
  • 추상 메소드와 추상 클래스는 키워드 abstract로 표시.
  • 추상 클래스는 객체를 만들 수 없음. 따라서 서브 클래스를 만드는 용도로만 사용됨.

B. 인터페이스

극단적인 추상클래스라고 하는 것이 이해하기 쉽다.
추상 메소드만을 가진 순수한 추상 Class

  • static final 데이터 멤버를 가질 수 있음. (상수)
  • implements가 추상클래스와 인터페이스의 차이이다.

C. Interface vs Abstract Class

자바는 하나의 클래스가 여러개를 extend하는 multiple inheritance를 허용하지 않는데, 여러개의 interface를 implements 하는 것은 허용한다.

3. Generic Programming


3-1 Generic Programming 이란?

제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식.

  • Generic 은 Specified 의 반댓말
  • Generic한 변수/자료구조
  • Generic한 알고리즘(method)
  • Generic한 클래스
profile
Lv.01 개발자

0개의 댓글