Java 4

John Jun·2023년 4월 5일
0

클래스 관계

  1. 패키지
  • 관련있는 클래스들의 그룹화
  • 외부로부터 제공 받은 여라 틀래스들과 현재 구현하는 클래스들을 그분하여 관리할 수 있다.
  • 클래스 이름에 대한 유일성을 보장할 수 있다.
  • 보통 기업의 URL을 뒤집어서 네이밍한다.

*클래스의 import

같은 패키지 안에서는 import문 없이 객체를(instance)를 생성해 모든 public클래스를 사용할 수 있다.

클래스를 임포트할 때에는 두가지 방법이 있다.

  1. 패키지를 포함한 클래스명을 사용하여 instance를 생성
java.util.Date today = new java.util.Date
  1. import 문을 사용
import java.util.Date;

...

Date today = new Date();

import 문

  • 소스파일의 가장 상단에 위치; 포함시키는 클래스를 정의

  • 와일드카드(*)를 사용하여 특정패키지의 모든 클래스를 포합시킬 수 있다.
    **단, 사용하려는 클래스가 두 곳 이상의 패키지에 포함된 경우 컴파일 에러가 발생

  • Static 키워드 또한 import 할 수 있다.

  • import static 문을 사용하면 정적 메소드 필드를 클래스명 없이 사용할 수 있다.

  • 와일드 카드를 사용하여 해당 클래스의 모든 정적 요소들을 포함 시킬 수 있다.

  • 그러나, 클래스명 없이 정적 요소를 사용하는 것은 코드가 명시적이지 않아 권장하지 않는다.

패키지의 구성

  • 패키지에 대한 정의는 클래스 소스파일의 가장 상단에 위치하며 소스 파일은 패키지명과 동일한 폴더에 위치한다.
  • 컴파일 결과(바이크코드)도 동일한 폴더에 생성
  • 통합개발환경에서는 설정을 통해 컴파일 경과를 다른 폴더에 저장할 수 있다.src/bin
  • 기본적으로 java.lang.*;는 따로 작성하지 않아도 자동으로 import된다.

Inheritence(상속)

  • 상속은 연관있는 클래스들에 대해 공통적인 구성요소를 정의하고, 이를 대표하는 클래스를 정의하는것

  • 상속관계는 "is a"관계를 의미

  • extends 키워드를 이용하여 상속관계를 정의

  • 상속을 받는 클래스를 sub class, derived class, extended classs, child class라고 한다

  • 상속을 제공하는 클래스를 super class,base class, parent class라 한다.

  • 자식클래스는 부모틀래스를 상속받아서 부모클래스의 모든 자원(속성, 메소드)을 사용할 수 있다.

  • 자식클래스는 부모클래스에 없는 필드와 메소드를 정의하여 기능을 추가할 수 있다.

  • 상위클래스에 정의된 메소드를 재정의하여 다르게 동작시킬 수 있다.(오버라이딩)

protected

  • 상속 대상이 되는 부모 클래스에 protected 접근 지정자로 정의된 구성요소는 자식클래스 구성요소가 된다.
  • 자식 클래스는 부모클래스의 pretected, public 구성요소에 대해 this 접근이 가능하다.
  • 이는 상속 관계에서 자식 클래스는 부모 클래스에서 제공하는 구성요소들을 자신의 구성요소로 포함하기 때문이다.
  • 단, 부모 클래스의 private 구성요소는 자식 클래스에서 직접 접근할 수 없다.

상속 관계의 초기화 과정

  • 생성자 호출

-상속관계에서 자식 클래스를 인스턴스화 하면 부모 클래스의 객체도 인스턴스화가 진행된다.
-자식 클래스의 객체가 인스턴스화 되기 위해서느 먼저 부모 클래스의 객체가 인스턴스화 되어야 한다. 자식 클래스의 객체를 인스턴스하면 자동으로 부모클래스가 인스턴스화 된다.
-상속 구조에서 가장 상위의 부모 클래스부터 차례로 인스턴스화 된다.
-모든 클래스는 기본적으로 object클래스를 상속받는다.

super()

  • super() 생성자는 자식 클래스에서 명시적으로 부모클래스의 특정 생성자를 호출할 수 있도록 하는 방법이다.
  • 자식 클래스의 default 생성자를 만들때 default 생성자가 없는 부모 클래스의 특정 생성자를 사용할때 사용.
  • 상속 관계에서 부모 클래스의 생성자 호출을 외부에서 명시적으로 지정할 수 없다.
  • 자식 클래스의 객체가 인스턴스화 될때 자동으로(기본적으로) 부모 클래스의 디폴트 생성자를 호출한다.
  • 부모 클래스에 디폴트 생성자가 정의되어 있지 않으면 자식 클래스는 명시적으로 부모 클래스의 생성자를 호출해야 한다.

메소드 재정의

  • 메소드의 재정의(overriding)는 부모 클래스의 메소드를 자식 클래스가 확장하거나 다시 정의하는 것을 의미
  • 부모클래스로부터 상속받은 메소드의 반환타입, 메소드명, 파라미터를 동일하게 하여 자식 클래스에서 정의한다. 기능적인 변경사항만 재정의한다.
  • 자식 클래스가 부모 크랠스이 메소드를 재정의 할 때 접근 지정자의 범위는 넓거나 같아야 한다.
  • @Override 라는 어노테이션을 넣을 수 있다.(명시적 역할)

public > protected > package > private 순으로 접근 지정자의 범위의 넓이가 넓다.

profile
I'm a musician who wants to be a developer.

0개의 댓글