접근 제한자와 접근자

접근 제한자

C#은 public, private, protected, internal 총 4가지의 접근 제한자가 존재하고, 각각 가시성(visibility)에 차이가 있습니다. 특히 public, private의 구분은 명확할 수밖에 없음에도 많은 코드에서 private으로 선언되어야 할 메소드나 필드가 public으로 열려 있습니다.

코드를 처음 작성한 사람은 어떤 멤버나 필드가 private인지 public인지 속으로 구분하고 있겠지만, 이런 의도를 접근 제한자를 통해 명확하게 표현해 주지 않으면 코드를 읽는 사람은 내부 구현을 다 들여다 보고 원작자의 의도를 파악하기 전까지 이런 숨은 의도를 알아챌 방법이 없습니다.

따라서 코드 가독성을 위해서라도 접근 제한자는 최소한의 범위로 잡아주는 것이 좋습니다. 일단 private으로 선언하고, 꼭 필요한 경우에만 protected, internal, public 순서대로 범위를 넓게 잡아주는 게 일반적인 방법입니다.

접근자

프로퍼티를 선언할 때 getter만 있으면 되는 상황에 setter까지 기계적으로 선언한 경우도 많습니다. 클래스를 생성할 때 외에는 프로퍼티 값을 바꾸는 경우가 없음에도 불구하고, setter가 선언되어 있으면 코드를 읽는 사람 입장에서는 이 클래스가 실제로 하는 일에 비해 더 복잡하다고 느끼게 됩니다.

가독성을 위해서는 setter가 필요 없으면 선언하지 않고, 클래스 내부에서만 접근할 경우에는 private으로, 외부에서도 접근할 경우에만 public으로 선언하는 것이 좋습니다. getter만 존재하고 setter가 없는 경우는 다음과 같이 backing field를 readonly로 선언하는 것도 좋은 습관입니다.

class Person
{
    private readonly string name;
    public string Name { get { return name; } }

    public Person(string name)
    {
        this.name = name;
    }
}

One thought on “접근 제한자와 접근자

  1. Pingback: 접근 제한자와 접근자 | 서광열의 C# 스쿨

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s