웹개발/JAVA

제어자(Modifier)

bergerac 2025. 2. 18. 09:11


📌 제어자란? (Modifier)

클래스, 변수, 메서드 등의 특성을 변경하거나 추가적인 의미를 부여하는 키워드

접근 제어자(public, private, protected, default)와 기타 제어자(static final, abstract)로 나뉜다.

 

📌 1. 접근 제어자 (Access Modifiers)

✅ 클래스, 변수, 메서드의 접근 범위를 조절하는 역할

접근 제어자설명

public 어디서나 접근 가능
protected 같은 패키지 + 상속받은 클래스에서 접근 가능
(default) 같은 패키지 내에서만 접근 가능
private 같은 클래스 내부에서만 접근 가능

 

<접근 제어자의 사용 이유 >

접근 제어자를 사용하는 이유는 클래스와 객체의 데이터를 보호하고, 객체 간의 의존성을 최소화하려는 역할이다.

최종적으로 코드의 안정성, 보안성을 늘리고 유지보수성을 높일 수 있다. 또한 캡슐화를 구현한다.

캡슐화 : 외부에서 직접 변수 값을 변경하지 못하도록 데이터 무결성 (Data Integrity)를 보장할수 있다

불필요한 정보 노출을 방지하고, 필요한 정보만 공개할 수 있다는 장점이 있다. 

 

*class 자체에는 접근 제어자 사용이 안된다.

이와 같이 class에서 바로 사용하는건 안됨

 

 

1) Public 접근 제어자

만약 라이브러리가 모든 클래스에서 접근이 안되어서

접근제어자 중에서도 가장 넓은 범위이며, 모든 클래스에서 접근이 가능하다.

다른 패키지에서도 접근이 가능하며 라이브러리 API, util class 등 어디서든 접근해야 하는 경우에 주로 사용한다

자바 클래스명은 파일 이름과 동일해야한다.

또한 하나의 파일에서 public단위의 클래스는 하나만 지정 가능하다.

+) public 클래스명은 파일이름과 일치해야한다.

package otherPackage;

public class PublicClass {
    public String publicField = "어디서든지 접근 가능한 필드";
    public void publicMethod() {
        System.out.println("어디서든지 접근 가능한 메서드");
    }
}
PublicClass publicClass = new PublicClass();
System.out.println(publicClass.publicField);
publicClass.publicMethod();

 

위의 함수는 다른 패키지에 public으로 설정된 class이다. 이를 현재 있는 메인함수에 갖고와서 다음과 같이 코딩해도 접근할 수 있음을 알 수 있다.

2) Private 접근 제어자.

같은 클래스 내부에서만 접근 가능한 접근 제어자이다. 

클래스 내부에서만 관리해야 하는 데이터(비밀번호나 상태변수 등)에서 사용된다.

이와 같이 위에서 PrivateClass로 Class를 만들고 Main 함수에서 Private 로 설정된 myField와 myMethod를 불러오려면 위와 같이 오류가 나게 된다.

3) Protected 접근 제어자

동일한 패키지 내의 모든 클래스에서 접근 가능하다.

다른 패키지에 있는 경우 해당 클래스를 상속받은 하위 클래스에서만 접근이 가능하다. 

이처럼 main 함수에서  protectedClass를 갖고왔다고 하더라도 상속받지 않는 경우 접근이 불가능하다.

-----------------------------------------------------------------------------------------------------------------------------------------

 

cf)자바 패키지 또는 클래스 파일 간의 코드 연결

import문 사용

1) 서로 다른 패키지일 경우
import 패키지명. 클래스명;(패키지가 서로 다른 경우)
2) 서로 같은 패키지일 경우
import 클래스파일명;
import otherPackage.*;
// : * 기호는 전체를 의미
// - 다만, 프로그램의 향상성을 위해 권장하지 않음

이와 같이 패키지가 다른 경우 위에 해당 패키지의 클래스를 import 해줄 수 있다.

-------------------------------------------------------------------------------------------------------------------------------------------------

class NotProtectedClass{
    public NotProtectedClass(){
        System.out.println(OtherClass.otherField);
        OtherClass.otherMethod();
        //class 내부의 속성 사용이라 할지라도 
        protected 접근 제어자는 상속받지 않는 경우 외부패키지에 접근이 불가능하다.
    }
}

4) default 접근 제어자

같은 패키지 내에서만 접근가능, 그러나 패키지 외부에서는 접근이 불가능하다.

 

📌 2. 기타 제어자 (Non-Access Modifiers)

✅ 접근 제어자 외에도 다양한 추가적인 특성을 부여

제어자설명

static 클래스 자체에 속하는 멤버 (객체 없이 접근 가능)
final 변경 불가능 (변수: 값 고정, 메서드: 오버라이딩 금지, 클래스: 상속 금지)
abstract 미완성 (하위 클래스에서 구현 필요)
synchronized 멀티스레드 환경에서 동기화
volatile 변수 값을 캐시하지 않고 항상 메모리에서 읽음
transient 직렬화(Serialization)할 때 제외됨
strictfp 부동소수점 연산을 IEEE 754 표준에 맞춤
native 네이티브 코드 (C, C++ 등)로 구현됨

 

static, final, abstract 같은 것들을 **"제어자(Modifier)"**라고 부름.
✔ Java에서는 접근 제어자와 기타 제어자로 나뉨.
✔ 여러 제어자를 조합하여 사용할 수 있지만, 충돌하는 경우(abstract final 등)에는 함께 쓸 수 없음.

'웹개발 > JAVA' 카테고리의 다른 글

Array(JAVA에서 배열 활용법)  (1) 2025.02.20
상속(Inheritance)  (0) 2025.02.19
객체 지향 프로그래밍  (1) 2025.02.17
제어문(JAVA로 제어문 처리하기)  (1) 2025.02.15
Operator(Java에서 연산자 사용법)  (1) 2025.02.14