Chapter 6-6 패키지
🗂 1. 패키지
- 패키지란 클래스들의 모음집으로, 많은 클래스들을 체계적으로 관리하기 위해서 클래스를 용도별/기능별로 그룹화 한 것
- 클래스를 유일하게 만들어주는 식별자 역할을 함
- 자신만의 패키지 체계를 유지함으로서 서로 다른 패키지에 같은 이름을 가진 클래스가 존재할 수 있다.
패키지 추가 및 선언
클래스의 전체 이름은 "패키지명 + 클래스명" 으로 이루어지는데,
패키지가 상/하위로 구분되어있다면 (.)를 사용해서 표현한다.
상위패키지.하위패키지.클래스
📍 관련 유의사항
- 하나의 소스파일에는 첫번째 문장으로 단 한번의 패키지 선언만을 허용함
package 패키지명;
import 패키지명.클래스명;
or
import 패키지명.*;
// import명은 여러번 선언 가능함!
- 모든 클래스는 반드시 하나의 패키지에 속해야하며, 패키지는 점(.)을 구분자로 계층 구조로 생성이 가능
(소스파일에 자신이 속할 패키지를 지정하지 않는 모든 클래스는 자동적으로 이름 없는 패키지에 속하게 됨) - 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리
- 패키지는 클래스명과 쉽게 구문하기위해 소문자로 하는것을 원칙으로 함
- 클래스만 따로 복사해서 다른 패키지로 이동은 불가, 이동할경우 패키지 전체를 이동시켜야한다.
패키지 사용
동일한 패키지에 속하는 클래스 외 외부에서 해당 패키지를 사용하기 위해서는 아래와 같은 방법으로 사용이 필요함
(1) impor문 사용
package com.test
import com.subject.Hello
or
import com.subject.*
- 패키지 선언과 클래스 사이에 선언해야하며, impot문의 갯수는 제한이 없다.
- 같은 패키지의 여러 클래스를 사용할때 아스타(*)를 통하여 지정 패키지에 속한 모든 클래스를 사용할 수 있다.
🔐 2. 접근제한자
- 접근제한자는 클래스 및 인터페이스 그리고 이들이 가지고 있는 접근에 대해 접근을 제한하기 위해 사용하며,
- 접근 제한을 통해 해당 정보를 외부로부터 보호하는 역할을 한다
- Java에는 4가지 접근제한자가 있으며 ( private > default > protected > public ) 순으로 보다 많은 접근을 허용
|
(1) 클래스의 접근 제한
- Default : 같은 패키지에서는 제한없이 사용, 다른 패키지는 사용 불가
*) 클래스 선언시 Public을 생략하면 Default 접근 제한자를 가진다.
- Public : 같은 패키지 및 다른 패키지에서 사용 가능
*) 다른 개발자가 사용하는 라이브러리 패키지로 Public을 많이 사용함
(2) 생성자의 접근제한
(3) 필드/메서드의 접근제한
🚨3. Private와 Getter(데이터 내놔)/Setter(데이터 바꿔)
- 위 내용을 토대로 접근 제어자를 Private로 선언하면 같은 클래스끼리의 접근만 가능해지는데 이를 캡슐화라고 부른다.
🔎 Private를 통한 멤버변수의 정보 은닉을 왜 사용하는지?
- 이를 사용하는 이유는 클래스안에 있는 속성의 데이터가 외부로부터 변질되지 않게 보호하기 위해서
- 멤버변수를 Private로 설정하면 외부로부터 데이터 변경/접근이 불가능한데(한번 초기화 시 외부에서 접근 불가능함)
- 이때 외부에서 Public 접근제어자 형태의 Getter/ Setter메서드를 통해 Private 클래스에 접근한다.
public class Student {
private String name;
private int score;
public Student(String n, int s) {
this.name = n;
this.score = s;
}
public void getInfo() {
System.out.println(name);
}
public String getName() { //Getter
return name;
}
public void setName(String name) { //Setter
this.name = name;
}
}
#main
public class MainClass {
public static void main(String[] args) {
Student student1 =new Student("김규리", 100);
student1.getInfo();
}
}
'✏️ Java' 카테고리의 다른 글
| ETC | 프로세스와 스레드 (0) | 2022.12.10 |
---|---|
| 혼공자 | Chapter 7.1 상속 (0) | 2022.12.05 |
| 혼공자 | Chapter 6 . 클래스 4️⃣ (0) | 2022.11.29 |
| 혼공자 | Chapter 6 . 클래스 3️⃣ (0) | 2022.11.28 |
Java | Extend와 Implements(인터페이스) (0) | 2022.11.25 |