2. 클래스 Class2.1 클래스 선언 & 작성class name, 멤버변수variable, 메서드method를 정의한다.
class name은 대문자로 시작하는 것이 좋다.
java 파일 하나에 class는 여러 개가 있을 수 있고, public class는 하나이고,
public class의 이름과 .java 파일의 이름은 같다.
class name은 camel notation 방식으로 명명한다.
class의 구성요소
멤버변수variable, 상수constant
메서드method
생성자constructor
내부클래스
// Class Syntax
modifier class class_name {
attribute_declaration //속성 (변수, 상수)
constructor_declaration //생서자
method_declaration // 메서드
}
2.2 Packagepackage는 class와 interface의 집합이다.
package 내부의 package를 내부패키지라고 한다. 패키지와 내부패키지는 .으로 구분한다.
내부패키지는 package를 추가로 분류하기 위해 생성되고, 패키지를 통해 동일한 이름의 클래스의 충돌을 방지한다.
package <top package name>[.<sub package name>];
package company.order;
//패키지를 선언한 java 소스 컴파일
javac -d <class 파일생성경로> <컴파일 대상 java소스>
import
import는 패키지이름 또는 클래스이름까지 작성하여 사용하고자하는 클래스나 API를 정의한다.
import를 통해 third party로 제공되는 라이브러리나 다른 개발자가 개발한 패키지클래스를 사용할 수 있다.
import <package name>[.<sub package name>].<class name>
import <package name>[.<sub package name>].*;
import java.util.List; //List 클래스를 import
import java.util.*; //util 패키지의 모든 클래스를 import
2.3 제어자 modifierclass, variable, method의 선언부에 사용된다.
제어자는 크게 접근제어자와 그 외로 나뉘며, 여러 개의 제어자를 같이 사용할 수 있지만, 접근제어자의 경우 하나만 사용할 수 있다.
접근제어자 public protected private default
static final abstract etc.
2.3.2 publicpublic으로 선언된 class, method, variable, constant 는 어디에서나 접급이 가능하다.
public method를 통해서만 private 멤버에 접급할 수 있다.
class PrintClass {
public int var = 1;
public void print() {
System.out.println("!!!!");
}
}
public class Test {
public static void main(String[] args) {
PrintClass obj = new PrintClass();
obj.print();
obj.var = 2;
}
}
2.3.2 private일반적으로 캡슐화, 클래스의 데이터 보호에 사용된다.
클래스 선언 시에는 사용되지 않는다.
private으로 선언되면 외부에 공개되지 않고, class 내부에서만 접근할 수 있다.
외부에서는 접근할 수 없지만, 해당 class의 public method를 통해서는 접근할 수 있다.
상속관계의 하위클래스에서도 접근할 수 없다.
생성자에 선언하여 상속을 제한할 때도 사용된다.
class PrintClass {
private int var = 1;
private void print() {
System.out.println("!!!!");
}
}
public class Test {
public static void main(String[] args) {
PrintClass obj = new PrintClass();
obj.print(); // error - print() has "private access" in PrintClass
obj.var = 2; // error - var has "private access" in PrintClass
}
}
2.3.3 protectedprotected로 선언되면 경우에 따라 public , private 특성을 가진다.
같은 class 인 경우 접근이 가능하다.
같은 package인 경우 접근이 가능하다.
상속 관계인 하위class 인 경우 접근이 가능하다.
2.3.4 default클래스 및 클래스 멤버의 접근 제어의 기본값이다.
특정 키워드는 없고 접근 제어자가 지정되지 않으면 자동으로 default 접근 제어가 된다.
default로 선언되면 같은 class 또는 같은 package 에서만 접근 가능하다.