본문 바로가기
Tech/Java

main(String[] args) 메소드 깊이 있게 알아보자 (1) - 접근지정자(Access Modifier)

by Dog발자. 2020. 5. 19.
반응형

http://autotechx.blogspot.com/2018/03/explain-public-static-void-main-in-java.html 참조

- 접근지정자(Access Modifier)

 접근 지정자

 오직 클래스

같은 패키지

 자식 클래스

 외부 어디서나

 public

 O

 O

 O

 O

 protected

 O

 O

 O

 

 default

 O

 O

 

 

 private

 O

 

 

 

 

대상 사용 가능한 접근 제어자
클래스 public, default
메서드  public, protected, default, private
멤버변수 public, protected, default, private
지역변수 없음

긁로 말하면 다음과 같습니다

  • public: 어디서든 접근 가능
  • protected: 동일한 패키지 내에 존재하거나 자식 클래스에서 접근 가능
  • default: 동일한 패키지 에서만 접근 가능
  • private: 본인 클래스 내에서만 접근 가능

CODE로 보면 다음과 같습니다.

package java_test.accessModifier;

public class TestClass {
	public Integer pValue;
	
	protected Integer proValue;
	
	private Integer privateValue;
	
	public Integer getPrivateValue() {
		return privateValue;
	}

	public void setPrivateValue(Integer privateValue) {
		this.privateValue = privateValue;
	}

	public TestClass (Integer value) {
		this.pValue = value;
		this.proValue = value;
		this.privateValue = value;
	}
}

 위 코드는 java_test.accessModifier package 에 TestClass 라는 이름의 클래스 입니다. 멤버 변수 들이 있고 각각 public, protected, private 가 있습니다. 그리고 이 변수들을 다른 클래스 에서 접근 해 보려고 합니다.

package java_test.accessModifier;

public class TestApplication {

	public static void main(String[] args) {
		TestClass tClass = new TestClass(100);
		System.out.println(tClass.pValue);
		System.out.println(tClass.proValue);
		System.out.println(tClass.privateValue);
	}
}

TestApplication 클래스는  java_test.accessModifier package 에 있고 TestClass 인스턴스화(생성) 해서 맴버 변수인 pValue(public), proValue(protected), privateValue(private)에 접근하는 코드 입니다. 위 코드를 돌리면.... 안돌아가죠 그이유는 tClass.privateValue 값을 에당초 접근할 수 없기 때문에 컴파일 에러가 나고 있는 상테입니다. 이처럼 public은 어디서든 접근할 수 있고, protected도 같은 package 에 있기 때문에 다행이 접근이 가능합니다. 하지만 만약 package가 달라지면 어떡게 될까요.? 

package java_test.accessModifier.protectedPack;

import java_test.accessModifier.TestClass;

public class ProtectedTest extends TestClass {

	public ProtectedTest(Integer value) {
		super(value);
	}

	public static void main(String[] args) {
		TestClass tc = new TestClass(200);
		System.out.println(tc.pValue);
		System.out.println(tc.proValue);
		ProtectedTest pt = new ProtectedTest(300);
		System.out.println(pt.proValue);
	}

}

위 코드는 java_test.accessModifier.protectedPac package에 위차한 ProtectedTest Class 입니다. Test.java 클래스와 package가 다른것을 볼 수 있습니다. 그럼 TestApplication.java 에서 Test.java의  protected 멤버 변수에 접근 했듯이 접근 해보겠습니다. 그럼 아주 잘 작동 하는 것을 볼 수 있습니다. TestClass tc = new TestClass(200)로 생성하고 tc.proValue로 접근 하려고하면 접근이 안되는 것을 볼 수 있습니다. 그이유는 package 위치가 동일 하지 안기 때문입니다 하지만 protected의 조건중에 자식 클래스에서는 접근이 가능하다라는 특성을 이용해서 부모인 TestClass를 상속아 접근하면 ProtectedTest pt = new ProtectedTest(300) 접근이 가능한것을 볼 수 있습니다.

 

 

 

https://github.com/jkkim09/JAVA-BASE/tree/master/src/main/java/java_test/accessModifier

반응형

댓글