자바강의 - [4주차] 객체와 객체 지향 프로그래밍 핵심 (1)
클래스 상속
- 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 클래스를 구현
- 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속
- 자바는 단일 상속(single inheritance)만을 지원
class B extends A {
}
super 키워드
- 하위 클래스에서 가지는 상위 클래스에 대한 참조 값
- super()는 상위 클래스의 기본 생성자를 호출 함
- 하위 클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super()가 호출 됨(상위 클래스의 기본 생성자가 반드시 있어야 함)
- 상위 클래스의 기본 생성자가 없는 경우 하위 클래스에서는 생성자에서 super를 이용하여 명시적으로 상위 클래스의 생성자를 호출함
- super는 생성된 상위 클래스 인스턴스의 참조 값을 가지므로 super를 이용하여 상위 클래스의 메서드나 멤버 변수에 접근할 수 있음
오버라이딩(Overriding)
- 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
- 오버리이딩의 조건
- 선언부가 조상 클래스의 메서드와 일치패야 함
- 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음
@ 애노테이션 (annotation)
- 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
- 주석(Comment)처럼 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램에게 유용한 정보를 제공할 수 있음
애너테이션 |
설명 |
@Override |
컴파일러에게 메서드를 오버라이딩하는 것이라고 알림 |
@Deprecated |
앞으로 사용하지 않을 것을 권장하는 대상에 붙임 |
@SuppressWarnings |
컴파일러의 특정 경고메시지가 나타나지 않게 해줌 |
@SafeVarargs |
지네릭스 타입의 가변인자에 사용 (JDK1.7) |
@FunctionalInterface |
함수영 인터페이스라는 것을 알림(JDK1.8) |
@Native |
native 메서드에서 참조되는 상수 앞에 붙임(JDK1.8) |
다형성
- 한 타입의 참조변수로 여러 타입의 객체를 참조할수 있게 함
- 같은 코드에서 여러 다른 실행 결과가 나옴
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 다형성을 잘 활용하면 유연하고 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음
상속을 사용하는 케이스
IS-A 관계 (is a relationship : inheritance)
- 일반적인 개념과 구체적인 개념과의 관계
- 상속은 클래스간의 결합도가 높은 설계
- 계층구조가 복잡하거나 hierarchy가 높으면 좋지 않음
HAS-A 관계(composition)
- 클래스가 다른 클래스를 포함하는 관계 (변수로 선언)
- 코드 재사용의 가장 일반적인 방법
- 상속하지 않음
추상 클래스 (Abstract class)
- 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
- 인스턴스 생성 불가
- 상속을 통해서 자손클래스에 의해서만 완성될 수 있음
- 추상 클래스는 키워드 ‘abstract’을 붙이면 됨
추상 클래스의 응용 - 템플릿 메서드 패턴
- 추상 메서드나 구현 된 메서드를 활용하여 코드의 흐름(시나리오)를 정의하는 메서드
- final로 선언하여 하위 클래스에서 재정의 할 수 없게 함
- 프레임워크에서 많이 사용되는 설계 패턴
- 추상 클래스로 선언된 상위 클래스에서 템플릿 메서드를 활용하여 전체적인 흐름을 정의하고 하위 클래스에서 다르게 구현되어야 하는 부분은 추상 메서드로 선언하여 하위 클래스에서 구현하도록 함
참고자료
Java & SpringBoot로 시작하는 웹 프로그래밍 강의 : #패스트캠퍼스 #내일배움카드 #K디지털크레딧 #바이트디그리 #자바인강
댓글 영역