본문 바로가기
JAVA/개념

JAVA 패키지, import, 접근제한자, 상속

by 함준혁 2023. 1. 18.

○ 패키지

패키지는 폴더라고 생각할 수 있다. 

원래 클래스의 이름은 패키지명까지 포함된다. 예를들어 String 클래스의 이름은  String이 아니고 java.lang.String이다.

그래서 클래스의 이름을 식별하기 위한 식별자이기도하다. 

클래스명이 같더라도, 다른 패키지에 있으면 다른클래스 이다. 

패키지를 상위, 하위로 구분하기 위한 기호는 도트(.)를 사용해서 다음과 같이 표현한다.

상위패키지. 하위패키지.클래스명

 

패키지 이름 작성 규칙은 이와 같다.

*숫자로 시작할 수 없음, _,&외 특수문자 사용 불가

*관례적으로 소문자로 작성

*회사에서는 회사 도메인으로 많이 사용

 

○ import

같은 패키지에 있는 클래스들은 아무 코드 없이 객체를 생성하거나 사용할 수 있다.

다른 패키지에 있는 클래스들을 사용하려면 패키지의 이름까지 전부 기술해야 사용 할 수 있다. 

 

이와 같다. import.상위패키지.하위패키지. 클래스명 이와 같다.  여기서 알 수 있는 사실은

String 과 같은 java.lang 패키지 안에있는것들은 우리가 별도의 import없이도 항상 사용 할 수 있다는 것이다. 

기본적으로 자바에서 import 시켜주었다고 보면 된다.

 

○ 접근 제한자(access modifier), 말 그대로 접근 제한하는 용도로 사용 한다. 자바 어플리케이션은 main()메서드가 없는 직접 실행하는 클래스가 아닌, 다른 곳에서 사용되는 클래스로 만들어진다. 라이브러리 형태로 사용되는 것이다. 

클래스를 설계할 때 다른 아무곳에서나 접근해서 사용 할 수 있거나 지정한 곳에서만 접근해서 사용 가능할 수 있도록 설계한다.

그림 출처 : https://velog.io/@gillog/Java-%EC%A0%91%EA%B7%BC-%EC%A0%9C%ED%95%9C%EC%9E%90

 

[Java] 접근 제한자

접근 제한자는 모든 접근을 허용하는 public부터 시작해서 차례대로 protected, default(friendly), private 이렇게 4가지 종류가 있다.

velog.io

 

 

그림과 같이 안쪽으로 들어갈수록 접근 제한이 강화된다.

접근 제한자 접근 제한 범위
모든클래스 상속관계 동일패키지 동일클래스
public O O O O
protrected X O O O
(default) X X O O
private X X X O

주로 쓰이는 키워드가 public과 private인데 public은 말 그대로 공용이라는 뜻으로 평소에 우리가 자주 쓰는 것이고,

private을 쓴다는 뜻은 인스턴스화를 금지시킨다는 것이다. private으로 변수들의 접근을 제한 했을 시엔, 다른 클래스에서 그 private 변수들을 직접적으로 바꿀 수 없고, 사용하려

면 게터를 써야하는 점이 있다.

 

○ 상속

○ 클래스 상속

이미 만들어져 있는 클래스로 상속을 해주는 클래스를 부모 클래스, 또는 상위클래스 라고 부른다. 반대로 부모 클래스로부터 기존 변수나 메서드들을 그대로 물려 받는 즉, 상속을 받는 클래스를 자식 클래스 또는 하위클래스라고 부른다.

 

상속 해주는 클래스 상속 받는 클래스
부모 클래스 자식 클래스
슈퍼 클래스 서브 클래스
상위 클래스 하위 클래스
베이스 클래스 파생 클래스

자식은 부모를 알지만 부모는 모른다. 이것 또 한 키워드이다. 공통된 부분을 또 작성하지 않기 위함의 효과도 있다.

자바에서 상속을 정의할때 exteds라는 키워드를 사용한다. extend는 확장하다 라는 의미로 부모에게 물려받는 것 외에 추가로 확장 할 수 있다 라고 생각하면 된다.

class 자식클래스 extends 부모클래스{
}

위와 같이 클래스를 정의 한다.

 

○ 상속의 특쟁

1. 단일 상속만 가능 - 자식 클래스는 하나의 부모 클래스에게서만 상속 받을 수 있다.

2. 자식 클래스를 객체로 생성할 때, 부모 클래스가 먼저 객체화 된다.

3. 모든 클래스는 Object 클래스로 부터 시작하는 상속관계의 하위 객체이다. - 모든 클래스의 가장 상위 클래스는 Object 클래스이다.

 

예제를 보겠다.

phone.java

package Chapter08;

public class Phone {
	
	String name;
	String color;
	String company;
	
	void call() {
		System.out.println("전화를 건다");
	}
	void receive() {
		System.out.println("전화를 받는다");
	}

}

SmartPhone.java

package Chapter08;

public class SmartPhone extends Phone {
	public void installApp() {
		System.out.println("앱 설치");
		
	}

}

SmartPhoneMain.java

package Chapter08;

public class SmartPhoneMain {
	public static void main(String[] args) {
		Phone p = new Phone();
		p.name = "전화기";
		p.company = "현대";
		p.color = "화이트";
		
		System.out.println("Phone 출력");
		System.out.println(p.name);
		System.out.println(p.company);
		System.out.println(p.color);
		p.call();
		p.receive();
		
		
		SmartPhone sp = new SmartPhone();
		sp.name = "갤럭시";
		sp.company = "삼성";
		sp.color = "블랙";
		
		System.out.println("SmartPhone 출력");
		System.out.println(sp.name);
		System.out.println(sp.company);
		System.out.println(sp.color);
		sp.call();
		sp.receive();
		sp.installApp();
	}

}

[ 실행 결과 ]

Phone 출력

전화기

현대

화이트

전화를 건다

전화를 받는다

SmartPhone 출력

갤럭시

삼성

블랙

전화를 건다

전화를 받는다

앱 설치

이 예제를 설명하자면

SmartPhone 클래스가 Phone을 상속받았다. Phone은 부모클래스 SmartPhone은 자식 클래스인 모양이다.

SamrtPhone 형으로 sp변수를 만들어줬고 new로 초기화를 했다. 그리고 sp.call과 sp.receive가 SmartPhone 클래스에 없지만 사용 가능한 모습을 볼 수 있다.

 

즉 부모의 필드 및 메서드를 이용하고 호출이 가능하다는 것이다. 만약 메서드 이름이 겹쳤을 땐 자신 건 this 키워드를 이용하고 부모것은 super 키워드를 이용한다. 

 

○ super

이어서 super 키워드를 보겠다. super는 자식 객체에서 부모 객체를 가리키는 참조변수이다.

super.변수명;
super.메서드명();

이와 같이 super를 사용하게 되면 상위클래스에서만 찾을 수 있다.

728x90