Dev-Kyuu
article thumbnail
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 ) 순으로 보다 많은 접근을 허용
  • public :누구나 접근 가능
  • protected : 같은 패키지 이거나 상속 받은 경우 접근 가능
  • default : 같은 패키지만 접근 가능
  • private : 해당 클래스 내에서만 접근 가능

 

 

(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();
	}
}
profile

Dev-Kyuu

@kyuu_ng

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!