Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

Develop/C# 과 객체지향

캡슐화

sm_amoled 2018. 12. 30. 20:20


캡슐화 Encapsulation

관련성이 있는 데이터와 메서드를 한 곳으로 모으는 특성 -> 클래스 명으로 그 클래스가 제공하는 기능들을 대략적으로 알 수 있다. 
( '빵집' 이라는 클래스에서 빵 이름에 대한 필드 / 제과제빵에 대한 메서드를 가져올 수 있다고 추측 가능! )
내부 멤버 숨기기 -> 외부로 보여질 기능만 노출되게 설정 가능하다.


접근제한자

private : 내부 클래스에서만 접근 가능하다.
public : 내부, 파생, 외부 클래스 모두에서 접근 가능하다.

이 외에도 protected, internal 등의 접근제한자가 있지만, 아직은 이 둘만 알고 사용하여도 큰 문제가 없고, 대부분 두가지 접근 제한자만을 사용한다.

접근제한자를 명시해주지 않으면 class 내부의 멤버는 private으로 자동 설정된다.



정보은닉

항상 변수를 숨기는 것만 필요한 것은 아니다.
<모나리자>를 수정하는것은 불가능해도 보는것은 누구나 가능한 것처럼, 접근은 가능하지만 값을 바꾸는것은 불가능하게 만들어줄 필요가 있다 : 정보은닉

접근자 메서드 ( getter ) 와 설정자 메서드 ( setter )을 사용하여 구현한다.

-> 읽기                               -> 쓰기 


    class Math
    {
        double pi = 3.14;

        public double GetPi()              -> getter
        {
            return pi;
        }

        public void SetPi(double value)    -> setter
        {
            pi = value;
        }
    }

물론, pi라는 필드 자체를 public으로 선언하여 getter와 setter 의 역할을 직접 수행하여도 상관은 없다.

그러나 오류를 피하기 위해서이거나, 문제상황을 해결하기 위해 pi에 들어갈 값에 대한 조건을 달거나 다른 작업을 수행할 때, getter 나 setter를 사용하면 오류가 덜 발생하고, 유지보수에 효율성을 가져올 수 있다.



프로퍼티

정보은닉을 위해 getter와 setter를 더 편리하게 사용하게 해주는 도우미 ( Syntatic Sugar )
   
     class Math
    {
        double pi = 3.14;

        public double Pi
        {
            get { return pi; }        get 과 set을 이런 방식으로 설정해주면, 
  위의 코드에 나왔던 getter와 setter의 역할을 그대로 수행할 수 있다.
  set { pi = value;  }      
  ↳ set에는 매개변수가 없기때문에 value라는 예약어로 입력된 값을 받아올 수 있다.
        }                
    }

위 코드는 컴파일 될 때 자동으로 다음과 같이 메서드로 분리되어 작동하기에, 말그대로 '도우미'라는 별칭을 가지고 있다.


    class Math
    {
        double pi = 3.14;

        public double GetPi()
        {
            return this.pi;
        }

        public void SetPi(double value)
        {
            this.pi = value;
        }
    }







320x100

'Develop > C# 과 객체지향' 카테고리의 다른 글

상속 (2)  (0) 2019.01.02
상속 (1)  (0) 2019.01.01
클래스  (0) 2018.12.29
객체지향 프로그래밍  (0) 2018.12.27
C# 공부를 시작하며  (0) 2018.12.27