BackEnd/Java

[Java]OOP_필드(Field)

Hojung7 2024. 7. 23. 12:19
필드(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