Language/Java

자바 클래스의 이해와 객체지향 프로그래밍 강의노트2

SambaLim 2019. 10. 26. 10:27
1_상속과_활용

인프런에서 자바: 클래스의 이해와 객체지향 프로그래밍을 수강하며 적은 강의노트입니다.

강의내의 예시와 자세한내용은 강의를 통해 확인하실 수 있습니다.

 

07. 상속

상속의 정의

상위클래스의 모든 것이 하위클래스에게 전달되는 것

(상위 클래스의 멤버변수, 멤버함수 중, private로 접근제한이 된 경우에는 하위 클래스로 전달되지 않음)

상속의 장점

  • 클래스 간의 체계화된 전체 계층 구조를 파악하기 쉽다.
  • 재사용성 증대: 기존 클래스에 있는 것을 재사용할 수 있다.
  • 확장 용이: 새로운 클래스, 데이터, 메서드를 추가하기가 쉽다.
  • 유지보수 용이: 데이터와 메서드를 변경할 때 상위에 있는 것만 수정하여 전체적으로 일관성을 유지할 수 있다.

상속의 구현

extends를 사용

자바에서 여러 개의 클래스를 동시에 상속하는 다중 상속은 허용되지 않는다.

 

08. 오버라이딩

오버라이딩

상속된 메서드와 동일한 이름, 동일한 인수를 가지는 메서드를 정의하여 메서드를 덮어쓴는것으로, 반환값의 type도 같아야 한다.

오버라이드는 하위클래스에서 상속 받은 메서드를 단순히 재사용 하지 않고 재정의하여 다른 연산을 수행하고 싶을 때 사용한다.

  • 기능의 변경
  • 기능의 추가

오버라이드는 추상 클래스와 합쳐져서 객체지향 방법론에서 장점으로 많이 거론되는 확장성을 실현하는데 많은 도움을 준다,

 

09. 스태틱의 이해

필드와 메서드에 붙이는 제한자.

static을 붙인 멤버의 특징

  • 프로그램 시작 전에 메모리에 로딩됨
  • 오브젝트를 생성하지 않고도 필드, 메서드 사용이 가능
  • 다른 오브젝트에서 참조하기 위해서는 오브젝트 명이 아닌 클래스명을 지정

필드의 스태틱

메서드의 스태틱

어떤 오브젝트에서도 같은 동작을 하는 메서드는 static키워드를 붙여주는 것이 좋다.

(한 번만 생성됨)

static을 붙인 메서드는 다음과 같은 성질을 갖는다.

  • static메서드는 오버라이딩할 수 없다.
  • static메서드에서 동일한 오브젝트 내의 멤버를 이용하기 위해서는 멤버(필드, 메서드)에게 static을 붙여야만 한다.

System.out.println()

java.lang.System.out.println(...);

System은 java.lang 패키지에 묶여 있는 클래스의 이름

out은 클래스 System의 클래스 변수 이름

println은 out이 참조하는 인스턴스의 메소드

public static void main(String[] args) { ... }

static인이유

인스턴스 생성과 관계없이 제일 먼저 호출되게 하여 중복을 막기 위함

(오버라이딩이 존재하지 않음)

public인 이유

main메서드의 호출은 외부로부터 시작되기 때문

JVM은 클래스명.main() 메서드를 호출함

 

10. 추상클래스

처리 내용을 기술하지 않고, 호출하는 방법만을 정의한 메서드를 추상 메서드라고 함

추상 메서드를 하나라도 갖은 클래스를 추상 클래스라고 함

추상 클래스와 오버라이딩

추상 클래스를 상속하는 클래스는 추상메서드를 반드시 오버라이딩하여 구현해야함

추상클래스 내의 추상메서드는 무조건 구현해야하기때문에 빼먹을 일이 없음

 

11. 인터페이스

  • 인터페이스란 상속 관계가 아닌 클래스에 (추상 클래스처럼)기능을 제공하는 구조
  • 클래스와 비슷한 구조지만, 정의와 추상 메서드만이 멤버가 될 수 있다는 점이 다름

자바에서는 다중상속을 받지 못해 기능을 정의해놓은 추상클래스를 상속받지 못할 때, 사용

인터페이스

인터페이스 정의는 다음과 같이 수식자를 생략할 수 있다.

인터페이스는 몇 개라도 구현이 가능 (상속은 단일상속만 가능)

인터페이스의 상속

인터페이스도 클래스처럼 상속할 수 있으며, 복수의 인터페이스를 상속하여 새로운 인터페이스를 만들 수 있다.

다른 클래스를 상속하고, 인터페이스를 구현하는 경우

 

12. 다형성

상속한 클래스의 오브젝트는 슈퍼 클래스로도 서브 클래스로도 다룰 수 있다.

이와같이 하나의 오브젝트 혹은 메서드가 많은 형태를 가지고 있는 것을 다형성이라 한다.

슈퍼 클래스의 오브젝트 생성

하위 클래스 객체를 상위 클래스 객체에 대입하여 사용할 수 있다.

하지만 상위클래스의 객체를 하위클래스의 객체로 대입할 수는 없음

 

13. 클래스 캐스팅 예외

다형성을 이용한 클래스간의 형변환

서브 클래스의 오브젝트는 슈퍼 클래스의 오브젝트에 대입할 수 있다.

서브 클래스로 생성되었던 오브젝트를 슈퍼 클래스의 오브젝트에 대입한 경우, 다시 서브클래스로 형변환할 수 있다.