활동/독서

[Do it! 점프 투 자바] 07.자바 심화학습 (패키지 사용 이유 / 접근 제어자)

ByeongJun 2023. 9. 12. 15:36
반응형

* 본 게시물은 이지스퍼블리싱 [Do it! 점프 투 자바] 서평단 미션 수행 및 학습 목적으로 작성하였습니다.
 

  모든 내용, 디자인, 이미지, 편집 구성의 저작권은 이지스퍼블리싱(주)와 지은이에게 있으며

  학습 목적으로 내용을 재구성하여 작성했음을 밝힙니다. 문제시 삭제하도록 하겠습니다.


 

06-02 파일 입출력

이번에는 파일을 이용한 입출력 방법을 알아보자. [TOC] ## 파일 쓰기 다음의 예제를 작성해 보자. ```{.java} import java.io.FileOutput…

wikidocs.net

 

 

패키지 사용 이유

 

패키지를 사용하면 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이하다. 

 

또한 다른 사람이 작성한 자바 클래스나 라이브러리를 사용해야할 경우 클래스명이 동일할 수 있는데 

패키지가 다르면 동일한 클래스명을 사용할 수 있다. 

 

 

 

 

 

접근 제어자 (access modifier)

 

접근 제어자를 사용해 변수나 메서드의 사용 권한을 설정할 수 있다. 

 private < default < protected < public  순으로 보다 많은 접근을 허용한다. 

 

 

private
- 접근 제어자가 private으로 설정되었다면 private이 붙은 변수나 메서드는 해당 클래스 안에서만 접근 가능
- secret 변수와 getSecret() 메서드는 오직 Sample 클래스에서만 접근 가능 (다른 클래스에서는 접근 불가능)
public class Sample {
    private String secret;
    private String getSecret() {
        return this.secret;
    }
}

 

 

 

default
접근 제어자를 별도로 설정하지 않는다면 변수나 메서드는 default 접근 제어자가 자동으로 설정되어
동일한 패키지 안에서만 접근 가능
package mypackage;

public class ClassA {
    int x;  // default 접근 제어자를 가진 멤버 변수
}​

package mypackage;

public class ClassB {
    public static void main(String[] args) {
        ClassA a = new ClassA();
        a.x = 10;  // 동일한 패키지 안에서는 default 변수에 접근 가능
        System.out.println(a.x);
    }
}​

ClassA에 있는 'inx x'는 default 접근 제어자를 가지고 있으며, 동일한 패키지에 있기 때문에
ClassB에서도 접근 가능하다.

(다른 패키지에 있는 클래스에서는 default 접근 제어자로 선언된 멤버 변수나 메서드에 접근 불가)

 

 

 

protected
같은 패키지 내의 클래스와 해당 클래스를 상속받은 하위 클래스에서 접근 가능
(다른 패키지의 클래스는 접근 불가)
package mypackage;

public class Parent {
    protected int protectedField;

    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}​
package mypackage;

public class Child extends Parent {
    public void accessProtectedMembers() {
        // protected 멤버 변수와 메서드는 하위 클래스에서 접근 가능
        protectedField = 10;
        protectedMethod();
    }
}​

Parent 클래스에 있는 protectedField와 protectedMethod()는 child 클래스에서 접근 가능

package otherpackage;

import mypackage.Child;

public class AnotherClass {
    public void tryAccess() {
        Child child = new Child();
        
        // protected 멤버 변수와 메서드는 다른 패키지에서 하위 클래스를 통해 접근 불가능
        // child.protectedField = 20;  // 에러 발생
        // child.protectedMethod();    // 에러 발생
    }
}​

AnotherClass 클래스에서는 child 클래스를 통해도 protected 멤버에 직접 접근 불가

 

 

 

public
public 접근 제어자가 붙은 변수나 메서드는 어떤 클래스에서도 접근 가능
(다른 패키지에서 사용하려면 import문을 사용해 해당 클래스를 가져와야 접근 가능)
public class MyClass {
    public int publicField;  // public으로 선언된 멤버 변수

    public void publicMethod() {  // public으로 선언된 메서드
        System.out.println("This is a public method.");
    }
}​
이 멤버들은 어떤 패키지에든지 속할 수 있으며, 상속과 관계없이 어떤 클래스에도 직접 접근 가능

// 다른 패키지의 클래스에서 사용하기 위해 import문을 사용
import mypackage.MyClass;

public class AnotherClass {
    public static void main(String[] args) {
        MyClass myObject = new MyClass();
        int value = myObject.publicField;  // 다른 패키지의 public 멤버 사용
        myObject.publicMethod();  // 다른 패키지의 public 메서드 사용
    }
}​

AnotherClass는 mypackage 패키지에 있는 MyClass를 사용하려면
import문을 사용해 클래스를 가져와야 한다.

위의 코드를 통해 다른 패키지에 있는 Myclass 클래스의 publicMethod()를 실행하는 것을 알 수 있다.

 

반응형