상세 컨텐츠

본문 제목

자바강의 - [4주차] 객체와 객체 지향 프로그래밍 핵심 (1)

Programming/Java

by leediz 2022. 2. 14. 21:10

본문

자바강의 - [4주차] 객체와 객체 지향 프로그래밍 핵심 (1)


클래스 상속

  • 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능을 확장하여 클래스를 구현
  • 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속
  • 자바는 단일 상속(single inheritance)만을 지원

  • 예제 문법
class B extends A {
}

super 키워드

  • 하위 클래스에서 가지는 상위 클래스에 대한 참조 값
  • super()는 상위 클래스의 기본 생성자를 호출 함
  • 하위 클래스에서 명시적으로 상위 클래스의 생성자를 호출하지 않으면 super()가 호출 됨(상위 클래스의 기본 생성자가 반드시 있어야 함)
  • 상위 클래스의 기본 생성자가 없는 경우 하위 클래스에서는 생성자에서 super를 이용하여 명시적으로 상위 클래스의 생성자를 호출함
  • super는 생성된 상위 클래스 인스턴스의 참조 값을 가지므로 super를 이용하여 상위 클래스의 메서드나 멤버 변수에 접근할 수 있음

오버라이딩(Overriding)

  • 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
  • 오버리이딩의 조건
    1. 선언부가 조상 클래스의 메서드와 일치패야 함
    2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
    3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음

@ 애노테이션 (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디지털크레딧 #바이트디그리 #자바인강

관련글 더보기

댓글 영역