Package(패키지) : 유사한 목적의 파일을 기준으로 폴더를 활용해서 관리하는 것을 의미합니다.
패키지의 이름은 의미 있는 이름으로 만들고 .을 통해서 계층적으로 접근할 수 있습니다.
package의 선언
package <패키지 명>;Package Naming : 일반적인 package naming룰로는 소속.프로젝트.용도.~의 형태로 사용합니다
com.companyName.hrm.common , com.companyName.hrm.service ...import : 다른 패키지에 선언된 클래스를 사용하기 위한 키워드입니다.
import의 선언
import <패키지명>.<클래스명>; : 특정 클래스만 import 합니다.import <패키지명>.*; : 특정 패키지에 있는 모든 클래스를 import 합니다.Ctrl + Shift + O 단축키를 활용하여 사용하고자 하는 클래스를 import할 수 있습니다.import한 package의 클래스 이름이 동일하여 명확히 구분해야할 때는 클래스 이름 앞에 전체 패키지 명을 입력해서 명시해줍니다.
java.util.List list = new java.util.ArrayList();default import package : 별도로 import하지 않아도 기본적으로 import되는 패키지로 java.lang.*이 있습니다.
static import : 자주 사용되는 static member를 import 하여 static member의 이름만으로 접근 할 수 있습니다.
import static java.lang.System.out; out.println("static import");<일반적인 클래스 레이아웃>
package structure; // 패키지 선언부
import java.io.*; // 외부 패키지 import
public class ClassStructure { // class 선언부
String name; // 멤버 변수
int age;
{name = "루키";} // 초기화 블록
public ClassStructure(String name, int age) { // 생성자
this.name = name;
this.age = age;
}
public void setName(String name) { // 멤버 메서드
this.name = name;
}
public static void main(String[] args) {
ClassStructure cs = new ClassStructure("hong", 10);
}
}
| 제한자 | 용도 | ------- | ----- | 접근 가능 범위 | ------------- | ----------------------------- | ----- |
|---|---|---|---|---|---|---|---|
| 클래스 | 생성자 | 멤버 | 같은 클래스 | 같은 패키지 | 다른 패키지의 자손 클래스 | 전체 | |
| public | O | O | O | O | O | O | O |
| protected | O | O | O | O | O | ||
| package(default) | O | O | O | O | O | ||
| private | O | O | O |
method overriding을 할 때, 부모의 제한자 범위와 같거나 넓은 범위로만 사용이 가능합니다.
Blank final : 값이 할당되지 않은 final 멤버 변수
- final 멤버 변수에 초기 값이 할당되어버리면 모든 객체는 같은 값을 사용해야합니다.
- 객체가 생성되면 값을 변경할 기회가 없기 때문에 반드시 생성자에서 1회 초기화 해줘야합니다.
static final : final만 있으면 객체마다 갖는 값으로 공용성이 없습니다. 따라서 진정한 상수로 만들어주기 위해서는 static 키워드를 붙여 모두가 공용할 수 있도록 해줘야합니다.
객체를 계속 생성/삭제하는데 많은 비용이 들어서 재사용이 유리할 때 이러한 singleton 디자인 패턴을 사용합니다.
객체에 수정가능한 멤버 변수가 없고, 기능만 있어서 구별할 필요가 없는 객체를 stateless한 객체라고 부르고 이러한 객체를 생성할 때에도 singleton 패턴을 사용합니다.
class SingletonClass{
private static SingletonClass instance = new SingletonClass();
private SingletonClass() {}
public static SingletonClass getInstance() {
return instance;
}
}
위와 같이 생성자를 private로 제한하여 객체 생성을 제한하고, 객체 생성은 instance를 통해서만 가능하도록 하고, instance는 외부에서 접근할 수 있도록 static 키워드를 사용합니다. 해당 클래스에 접근하기 위해서는 public 메서드인 getter(getInstance)를 통해서만 접근이 가능하도록 구현합니다. 객체를 다시 생성할 일은 없으므로 setter는 필요하지 않습니다.