필드(Field)란?
- 클래스 바로 아래에 작성하는 변수
== 객체의 속성을 의미
[작성법]
[접근제한자] [예약어] 자료형 변수명 [=초기값];
- 필드 (== 멤버 변수) 구성
1) 인스턴스 변수
2) 클래스 변수 (== static 변수)
< 필드 접근 제한자>
1) [+] public
같은 프로젝트 내에서 어디서든 접근 가능
- public 필드
→ 같은 프로젝트 내 어디서든 해당 클래스를 이용해 만들어진 객체의
public 필드를 직접 접근 가능
2) [#] proteced
같은 패키지 또는 상속 관계에서만 접근 가능
- protected 필드
→ 기본적으로 같은 패키지에서만 직접 접근이 가능하지만
다른 패키지에 존재하는 클래스 중 상속 관계에 클래스 에서는 직접 접근 가능
3) [~] (default)
같은 패키지 내에서만 접근 가능
-(default) 필드
→ 같은 패키지 내에서 해당 클래스를 이용해 만들어진 객체의(default) 필드 직접 접근 가능
4) [-] private
같은 클래스(해당 객체)만 접근 가능
- private 필드
→ 해당 클래스를 이용해 만들어진 객체 내부에서 사용 가능
(무슨 일이 있어도 외부에서 직접 접근이 불가능한 필드)
<필드 테스트>
[기능]
package field.pkg1;
public class FieldTest1 {
public int publicValue = 100;
protected int protectedValue = 200;
int defaultValue = 300;
public int privateValue = 400;
// 같은 클래스(해당 객체) 내부에서 필드 접근
// -> 모든 접근 제한자가 가능
public void method() {
System.out.println(publicValue);
System.out.println(protectedValue);
System.out.println(defaultValue);
System.out.println(privateValue);
}
}
[실행] 같은 패키지
package field.pkg1;
public class FieldRun {
public static void main(String[] args) {
// FieldTest1 객체 생성
FieldTest1 f1 = new FieldTest1();
// public 필드 직접 접근
System.out.println(f1.publicValue);
// protected 필드 직접 접근
// -> 같은 패키지라서 가능!
System.out.println(f1.protectedValue);
// (default) 필드 직접 접근
// -> 같은 패키지라서 가능!!
System.out.println(f1.defaultValue);
// private 필드 직접 접근 -> 문제 발생
// - 다른 곳/객체가 private(개인적인) 필드 접근할 수 없다!
// System.out.println(f1.privateValue);
}
}
[실행] 다른 패키지
package field.pkg2;
import field.pkg1.FieldTest1;
// 다른 패키지
public class FieldRun2 extends FieldTest1 {
public static void main(String[] args) {
// FieldTest1 객체 생성
FieldTest1 f1 = new FieldTest1();
// public
System.out.println(f1.publicValue);
// protected -> 문제 발생 (상속 관계 X)
// System.out.println(f1.protectedValue);
// (default) -> 문제 발생
// System.out.println(f1.defaultValue);
// private -> 문제 발생
// System.out.println(f1.privateValue);
}
public void method() {
// 상속관계이기 때문에 protected 직접 접근 가능
System.out.println(protectedValue);
}
}
▶ extends가 상속관계 나타냄
#결과

'BackEnd > Java' 카테고리의 다른 글
| [Java]OOP 메서드(method) (0) | 2024.07.25 |
|---|---|
| [Java]OOP Static (0) | 2024.07.23 |
| [Java]OOP_클래스 (1) | 2024.07.23 |
| [Java]객체지향언어(OOP) 정의 및 Account (0) | 2024.07.23 |
| [Java]배열(Array) for문 (1) | 2024.07.21 |