상속
▶ 클래스 간의 관계 결정하기
- 클래스를 작성할 때, 두 클래스 간의 관계가 상속관계인지, 포함관계인지 헷갈릴 때가 있음
→ 아래와 같이 문장을 만들어보면 어떤 관계인지 명확해짐
① 상속 관계 : ' ~은 ~이다 ( is - a ) '
② 포함 관계 : ' ~은 ~을 가지고 있다 ( has - a ) '
→ 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 의미
- 예시
class Circle {
int x;
int y;
int z;
}
class Point {
int x;
int y;
}
❶ 상속 관계
class Circle extends Point {
inr r;
}
❷ 포함 관계
class Circle {
Point p = new Point();
int r;
}
❸ main( ) 메서드 내에서 Circle 객체 생성
Circle c = new Circle();
▶ 단일 상속
- 자바에서 한 클래스가 다중상속, 즉 두 개 이상의 클래스를 상속받을 경우 충돌 에러가 발생함
예를 들어, 상속받는 두 부모 클래스에 동일한 선언부를 가진 메서드가 있을 경우
자식 클래스에서 서로 다른 구현부를 가진 이 메서드를 어떻게 구별할 수 있을까?
→ 이러한 특징 때문에 자바에서는 단일상속만 허용됨
→ 나중에 '인터페이스'를 배우게 되면, 충돌 문제를 해결하면서 다중상속과 같은 효과를 낼 수 있음
∴ 현재는 비중이 높은 클래스 하나만 상속받고 나머지는 포함관계로!
- 예시 ( Tv 클래스를 상속 받고, DVD 클래스를 포함시켜보자 )
class Tv {
// 생략
}
class DVD {
void power(){
// 생략
}
void play(){
// 생략
}
}
class TvDVD extends Tv {
// 포함 - 다른 클래스의 참조변수를 선언
DVD dvd = new DVD();
// 포함 관계인 클래스의 메서드 추가 -> 참조변수를 통해 해당 클래스의 메서드 호출시키기
void power() {
dvd.power();
}
void play(){
dvd.play();
}
}
- Object 클래스 : 모든 클래스의 조상
· 모든 클래스 상속계층도의 최상위에 있는 조상클래스
· 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object 클래스로부터 상속받게 함
· 이미 어떤 클래스로부터 상속받도록 작성된 클래스를 제외하고, 나머지 클래스에 대해서는 컴파일러가 'extends Object'를 자동적으로 추가시킴
패키지
▶ package
· 클래스를 체계적으로 관리하기 위해 사용 → 서로 관련된 클래스와 인터페이스의 묶음
· 패키지의 물리적인 형태는 파일 시스템의 폴더로, 패키지는 서브패키지를 가질 수 있음 ( 도트연산자 . 로 구분 )
상위패키지.하위패키지.클래스
ex ) java.lang.String
▶ package 선언
① package 선언 : package 패키지명 ;
② 위치 : 반드시 소스파일에서 주석과 공백을 제외한 첫 번째 문장이어야 함
③ 하나의 소스파일에 단 한 번만 선언될 수 있음
단, 자바에서는 기본적으로 '이름없는 패키지'를 제공 -> 소스파일 작성 시, 패키지 선언하지 않아도 문제 없음
※ 앞으로 프로젝트 작성 시, 미리 패키지를 구성하여 클래스들을 효율적으로 관리해야 함.
▶ package 이름 작성 규칙
- 숫자로 시작 안됨, _, $를 제외한 특수문자 사용 불가
- java로 시작하는 패키지는 자바 표준 API에서만 사용하므로 사용 불가
- 클래스명과 쉽게 구분하기 위해서 모두 소문자로 작성
※ 패키지 이름의 중복 방지 방법 : 서로 중복되지 않도록 3단계 이상으로 짓자
import문
▶ import문 : 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보 제공
- 모든 소스파일에서의 import문의 위치 : package문 다음, class 선언 이전
import 상위패키지.하위패키지.클래스이름;
import 상위패키지.하위패키지.*;
// 사용하고자 하는 클래스들이 동일한 패키지 소속일 경우, 개별 import문보다는 *를 이용해 해당 패키지 내 모든 클래스로 표시
▶ import문 자동 추가 ( 2가지 방법 )
① windows의 단축기 : Ctrl + Shift + O
② 해당 클래스에서 [ Source ] - [ Organize imports ]
접근 제어자
- 접근 제어자의 목적 : 멤버 또는 클래스에 사용 → 해당 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할
- 접근 범위가 넓은 쪽에서 좁은 쪽의 순 : public > protected > (default) > private
① public : 접근 제한 없음
② protected : 같은 패키지 내 또는 다른 패키지의 자손 클래스에서 접근 가능
③ (default) : 같은 패키지 내에서만 접근 가능 → 접근 제어자가 지정되어 있지 않은 경우에 해당
④ private : 같은 클래스 내에서만 접근 가능
- 접근 제한의 종류와 적용할 대상
접근 제한 | 적용 대상 |
public | 클래스, 필드, 생성자, 메서드 |
protected | 필드, 생성자, 메서드 |
( default ) | 클래스, 필드, 생성자, 메서드 |
private | 필드, 생성자, 메서드 |
- 직접 접근제어자 설정해서 확인해보자
'백엔드 > JAVA' 카테고리의 다른 글
👉🏻 에러의 종류 및 에러 처리 (0) | 2023.05.18 |
---|---|
객체 지향 프로그래밍 이론(6) (0) | 2023.05.16 |
객체 지향 프로그래밍 이론(4) (0) | 2023.05.12 |
MVC 패턴 개념 (0) | 2023.05.11 |
객체 지향 프로그래밍 이론(3) 및 주사위 게임 예제 실습 (0) | 2023.05.09 |