객체지향 언어의 장점은 유지 보수성이 높은 시스템을 개발할 수 있다는 것이다. 유지보수성을 높이는 가장 기본적인 원칙은 " 중복을 제거하는 것"(공통 멤버를 가지는 클래스들 간의 공통점이 있는지, is-a 관계 성립)

 

상속: 기존에 존재하는 유사한 클래스로부터 속성괴 동작을 그대로 가져다 사용하면서 자신이 필요한 기능을 추가하는 기법, 자식 클래스가 부모클래스의 멤버를 쿨려받는 것(is - a 관계: ~은 ~이다.)

[클래스 정의 다음에 extends(자식 클래스가 상속할 부모 클래스를 지정하는 키워드)를 써주고 수퍼 클래스 이름]

 

이미 존재하는 클래스(상속하는 클래스, 내용이 정의된 클래스): 슈퍼클래스, 부모 클래스, 베이스 클래스

상속을 받는 클래스(가져다 사용하는 클래스): 서브 클래스, 자식 클래스, 파생 클래스

  • 기존의 클래스를 재사용해서 새로운 클래스를 작성하는 것
  • 하위클래스는 상위 클래스의 멤버개수보다 적을 수 없다.(같거나 많다)
  • 공통 부분은 부모클래스에서 관리하고 개별부분은 자식클래스에서 관리한다.

상속 효과

  • 부모 클래스 재사용해 자식 클래스 빨리 개발 가능
  • 반복된 코드 중복 줄임
  • 유지 보수 편리성 제공
  • 객체 다형성 구현 가능

상속 대상 제한

  • 부모클래스의 private 접근 갖는 필드와 메소드 제외
  • 부모 클래스가 다른 패키지에 있을  경우, default 접든 갖는 필드와 메서드도 제외

#클래스 상속

[접근 제한자 class 클래스명 extends 부모 클래스명{ }]

자바는 단일 상속 - 부모 클래스 나열 불가

class 자식 클래스 extends 부모 클래스1, 부모 클래스2 { }(X)

 

대개 슈퍼클래스는 추상적이고 서브 클래스는 구체적이다.

슈퍼 클래스를 변경하면 서브 클래스에 영향을 준다.

 

super: 하위클래스에서 상위 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조변수. 객체 자신을 참조하는 참조변수인 this처럼 보든 하위 클래스의 객체에는 상위 클래스를 참조하는 참조변수 super가 있다.

super.필드명; 상위 클래스의 클래스 변수나 접근제어에 의해  접근이 가능한 필드에 접근한다.
super.메서드(); 상위 클래스의 메서드에 접근한다.
super(); 상위 클래스의 생성자에 접근한다.

접근제어자 class 자식클래스명(this) extends 부모클래스명(super){

}

 

재정의 (오버라이딩)

 

메서드 오버라이딩 : 소브 클래스가 필요에 따라 상속된 메소드를 다시 정의하여 사용하는 것. 상속 받은 메소드들을 자기 자신의 필요에 맞추어 변경할 수 있다. 부모클래스에서 정의된 메서드를 자식 클래스에서 재정의해서 사용할 수 있는데 이것을 자식 클래스에서 부모 클래스의 메서드를 오버라이딩한다고 표현. 상위클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것을 메서드 오버라이딩이라고 한다.

 

  • 메소드의 헤더부분은 수퍼 클래스의 헤더와 동일하다. 수퍼 클래스의 메소드와 동일한 시그니처를 가져야 한다(메소드의 이름, 반환형, 매개변수의 개수와 데이터 타입이 일치하여야 한다.)
  • 접근 지정자의 경우 슈퍼클리스의 메소드보다 더 좁은 범위로 변경할 수 없다. (public을 default나 private로 수정 불가, 반대로 default는 public 으로 수정가능)  
  • private.static.final 메소드는 재정의할 수 없다.
  • 메서드 호출 순위는 오버라이딩한 메서드가 부모 클래스의 메서드보다 높다.

   어노테이션 : 프로그램에게 추가적인 정보를 제공해주는 메타데이터

  • 컴파일러에게 코드 작성 문법 에러 체크하도록 정보 제공
  • 소프트웨어 개발 툴이 빌드나 배치 시 코드를 자동 생성하게 정보 제공
  • 실행 시 특정 기능 실행하도록 정보 제공

메타데이터 : 다른 데이터를 설명해 주는 데이터

 

@Override 어노테이션

컴파일러에게 부모 클래스의 메소드 선언부와 동일한지 검사 지시

  메서드 오버로딩 메서드 오버라이딩
선언 같은 클래스에서 동일한 이름의 메서드 중복 작성 서브 클래스에서 슈퍼 클래스에 있는 메서드와 동일한 이름의 메서드 재정의
괸계 동일한 클래스 상속 관계
목적 이름이 같은 여러 개의 메서드를 중복 작성하여 사용의 편의성 향상. 슈퍼 클래스에 구현된 메서드를 무시하고 서브 클래스에서 새로운 기능의 메서드를 재정의하고자 함
조건 메서드 이름은 반드시 동일하고 매개변수 타입이나 개수가 달라야 함 메서드의 이름, 매개변수 타입과 개수, 리턴 차입이 모두 동일하여야 성립
바인딩 정적 바인딩. 호출될 메서드는 컴파일 시에 결정 동적 바인딩. 실행 시간에 오버라이딩된 메서드 찾아 호출

super()문도 생성자에서만 사용할 수 있으며 자신이 아닌 부모 생성자를  호출할 때 사용한다.

  1. 모든 클래스는 생성자가 반드시 존재한다.(컴파일러가 비어있는 기본 생성자를 생성)
  2. 자식 클래스의 모든 생성자는 첫 번째 줄에 super()문이 자동 추가(생성자에서 super()문을 사용하지 않았을 때만 자동 추가)
  3. 자식 클래스의 인스턴스를 생성할 때 부모 클래스의 생성자도 함께 호출

+ Recent posts