자바 private 접근제어자 | 자바 입문강좌 12

접근제어자

자바 클래스에는 접근제어자(Access Modifier)라는 것이 있습니다. 클래스, 멤버변수, 메소드에 모두 적용할 수 있는 키워드입니다.

접근제어자의 접근(Access)이 말하는 것 처럼 이 객체에 누가 접근할 수 있는 가를 결정합니다.

종류에는 public, private, protected, default 네가지가 있습니다. 이번 포스팅에서는 자바 private 접근제어자를 사용한 멤버변수에 대해 알아보겠습니다.

자바 private 접근제어자
자바 private 접근제어자

자바 private 접근제어자

그동안은 public 접근제어자를 사용했습니다. public 을 따로 설명하지 않는 것은 public 이 붙은 객체는 어디서든 사용할 수 있기 때문입니다. 접근에 제한이 없습니다.

반면 private 은 클래스 안에서만 사용가능합니다.

public class Main {
    public static void main(String[] args) {
        MyCar a1 = new MyCar();
        a1.showInfo();
        System.out.println(a1.carName);
        System.out.println(a1.carColor);
        System.out.println(a1.speed);
//        System.out.println(a1.password);
    }
}
class MyCar{
    String carName;
    String carColor;
    private String password;
    int speed;
    MyCar(){
        carName = "Sedan";
        carColor = "Grey";
        password = "1234!";
        speed = 100;
    }
    void showInfo(){
        System.out.println("Car name : " + carName +
                ", color : " +carColor +
                ", speed : " + speed);
    }
}
Car name : Sedan, color : Grey, speed : 100
Sedan
Grey
100

위 코드에서 private String password 는 이 클래스 안에서만 사용할 수 있습니다. 외부인 Main 클래스에서 값을 직접 사용하려고 하면 사용할 수 없다고 나옵니다.(주석처리)

왜 이렇게 불편하게 했냐는 질문을 한다면 굳이 외부에서 볼 필요가 없는 데이터라고 생각하기 때문입니다. 접근제어자를 활용해 보호해야할 데이터, 숨겨야할 데이터를 다루는 기술을 정보 은닉이라고 하며 객체지향 프로그래밍의 중요한 특징입니다.

이 클래스를 사용하는 사람도 마찬가지로 내부의 로직과 변수를 전부 다 알 필요가 없습니다. 소프트웨어 개발의 대규모화가 진행될 수록 중요합니다. 한 사람이나 부서에서 모든 일을 알기엔 너무 방대하므로 내가 만드는 로직과 다른 이가 만드는 로직에 대한 구분이 중요합니다.

그 첫번째 구분은 private 키워드의 사용에서 나타납니다. public 이 달려있는 클래스, 멤버변수, 메소드는 항상 열려있습니다. 어느 것을 닫을지 판단하는 것입니다.

getter 와 setter

private 멤버변수를 다룰때 이들에게 접근하기 위해 사용하는 메소드입니다.

위의 password 의 getter와 setter 를 만들어 보겠습니다. 직접 코딩해도 되지만 이클립스나 인텔리제이에는 코드 generator 가 있어서 클릭 한번이면 만들어줍니다.

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

IDE가 만들어준 것인 만큼 getter 와 setter 의 기본 형태입니다. (게터와 세터)

        a1.setPassword("bobakin7");
        System.out.println(a1.getPassword());
[실행값]
bobakin7

이렇게 하면 바깥에서 password에 접근할 수 있습니다. 그냥 멤버변수를 직접 사용하는 것보다 메소드 안에서 사용하기 때문에 생길 수 있는 오류들을 미리 사전에 방지할 수 있습니다. 예를 들어 숫자만 사용하는 규칙을 넣는다거나 특수문자를 넣을 수 없게 방지할 수 있습니다.

사용자는 여전히 값에 접근할 수 있지만 제한적 범위내에서 사용할 수 있습니다.

자바 접근제어자

정리하면 아래와 같습니다.

접근제어자접근범위
public제한없음
private클래스 내부에서만
protected같은 패키지 내부와
상속 관계 클래스
기본(default)같은 패키지 내부에서만
자바 접근제어자

같은 패키지는 디렉토리라는 말이 생소한데 package com 같이 같은 패키지를 말합니다. public 과 default 의 특징을 이용하면 복잡한 클래스간의 연관성을 만들 수도 있습니다. 상하관계가 차이나면 (package com 과 com.kin 같이) 접근이 안됩니다.

요약

자바 private 키워드와 접근제어자를 알아봤습니다.

여기서는 왜 데이터를 보호해야 하는지를 한번 생각해 보면 좋겠습니다.

가능한한 전역변수를 사용하지 말고 지역변수를 써라란 말과도 비슷하게 들립니다. 최대한 데이터를 모아놓고 은닉하는 것은 무분별한 접근 오류를 막는 장점이 있습니다.

이를 위해 getter 와 setter 가 있으니 다행입니다.

외부참조문서

자바 접근 제어자 | 자바 강좌 5-5 자바 private

Leave a Comment