Software Engineering/Java & JSP

[Java] 제3장 클래스와 상속

iseop 2023. 4. 29. 17:56

1. 클래스

  • 클래스를 정의할 때는 아래와 같이 한다.
[접근제어자] [final | abstract] class 식별자 [extends 슈퍼클래스 | implements 인터페이스] {
    ... 
}
  • 중괄호 내에는 필드와 메소드를 선언한다.
  • 부모 클래스를 확장하는 자식 클래스를 정의할 때 extends 키워드를 사용한다.
  • 인터페이스를 구현하는 클래스인 경우 인터페이스에 정의된 메소드를 반드시 구현해야 한다.
  • 어떤 클래스가 다른 클래스 내에서 정의된 경우 이를 내부 클래스라 한다.
  • 그렇지 않은 클래스를 외부 클래스 또는 톱레벨 클래스라 한다.
  • 클래스의 접근제어자를 생략하는 경우 동일 패키지 내에 있는 다른 클래스에서 참조가 가능하다.
    • 접근제어자의 생략은 package-private라고 부른다.
    • 접근제어자의 범위는 public > protected > 생략 > private 순으로 넓다.
  • 외부 클래스는 public 또는 생략된 접근제어자만 가질 수 있다.
  • 내부 클래스는 모든 종류의 접근제어자를 가질 수 있다.

2. 필드와 메소드

  • static 필드는 객체화되지 않은 클래스를 통해서 참조가 가능한 공유 필드이다.
  • static이 아닌 필드는 인스턴스 필드라고 부르며, 각 객체가 배타적으로 소유한다.
  • final 필드는 선언과 동시에 초기화하여야 한다.
  • public 메소드는 모든 곳에서 참조 가능하다.
  • protected 메소드는 클래스 내부, 동일 패키지 내부, 다른 패키지에 존재하는 서브클래스에서도 참조 가능하다.
  • 접근제어자가 생략된 경우 클래스 내부, 동일 패키지 내부에서 참조 가능하다.
  • private 메소드는 클래스 내부에서만 참조 가능하다.
    • 복습: 접근제어자의 범위는 public > protected > 생략 > private 순이다.
  • final 메소드는 오버라이딩이 불가하다.
  • final 클래스는 서브클래스를 가질 수 없다.
  • 메소드를 오버라이드 할 때는 부모클래스의 메소드와 식별자, 반환형이 일치해야 한다.
  • 오버라이드 된 메소드의 접근제어자를 더 넓은 접근제어자로 변경할 수 있다.
  • this를 사용하여 객체의 필드를 참조할 수 있다.
  • 인스턴스 필드 또는 인스턴스 메소드를 참조할 때는 this를 생략할 수 있다.
  • super를 사용하여 부모클래스의 필드를 참조할 수 있다.
  • this()super()는 생성자의 맨 앞 부분에 사용한다.
    • this()는 동일한 클래스의 또다른 생성자를 호출하는 데 사용된다.
    • super()는 부모클래스의 생성자를 호출하는 데 사용된다.

 

2. 연습문제 요약

  • Java에는 전역 변수가 없다.
  • 접근제어자
public protected 생략 private
모든 곳 동일 패키지 내부
+ 타 패키지의 서브클래스
동일 패키지 내부 클래스 내부