0. 이론

Getter&Setter 사용 이유 8가지

Beginner:) 2022. 3. 30.
320x100

 

setter와 getter는 왜 쓰는가? 장점은 무엇인가?

 

프로그래밍을 처음 배울 때는 그냥 그런가 보다 했고

 

내가 만든 소스코드 내가 주의해서 쓰면 되는데? 또 굳이 함수를 쓰는 게 더 복잡하지 않는가?라는 생각을 했고

 

나의 생각과 책, 커뮤니티 사이트 등을 뒤지고 뒤져 종합한 결과로

 

내가 생각하는 getter/setter을 사용하는 8가지 이유이다.

 


 

1. 명확한 표현

 - data = 5; 와같은 표현보다는 setData(5)처럼 동사+목적어를 활용해 좀 더 명확한 표현이 가능 

 

2. 데이터 정보의 캡슐화, 정보은닉

 - public, protected 등으로 정보를 은닉할 수 있다.

 

3. 유효성검사&무결성 보장& try/catch

 - data가 0~100까지의 데이터만 유효하다고 가정할 때 setter&getter 등의 함수 형태 없이는 무결성을 보장하기 힘들다.

 - 세개의 예제 따로 쓰기 귀찮으니 하나로 묶어서 예를 들어본다.

 

using System;
namespace learningCShap
{
    class Inform
    {
        private int data;
        public int setData(int data)
        {
            try
            {
                if(data >= 0 && data <= 100)
                {
                    this.data = data;
                    Console.WriteLine("validity passed");
                    return 1;
                }
                else
                {
                    throw new Exception("validity is wrong");
                }
            }catch(Exception e)
            {
                Console.WriteLine(e.Message);
                return -1;
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inform inform = new Inform();
            int res = inform.setData(200);
            if(res <=0){
            	...
            }
        }
    }
}

 

반응형

 

4. 쓰기는 가능하고 읽기는 불가능해야 할 때 또는 그 반대의 경우

 - 이 상황도 단순 변수로 선언하면 불가능한 부분이다. 

 

5. 디버깅 지점제공

 - 나는 디버깅을 잘 못하지만, 단순 변수 할당의 디버깅을 할 때 그냥 넘어가버리는 현상이 있다. setter&getter 등의 함수로 정의하면 디버깅이 좀 더 쉽다.

 

6. 재정의 가능

 - 상속 등의 이유로 유효성 검사가 바뀌거나, 어떠한 조건들이 바뀔 때 재정의가 가능하다.

 

7. 애초에 함수를 통한 전달 방식을 권장하는 언어가 많다

 - Java에서는 자동 생성 메뉴까지 있다.

 

8. 자동 프로퍼티 문법

 - 단순 setter&getter일 경우 자동 프로퍼티 문법이 있기 때문에 귀찮음 등은 어느 정도 해소된다.

   허나 명확한 표현은 불가능할 듯하다 ㅜ (예제 C# public int Data{ set; get; } ) 

using System;
namespace learningCShap
{
    class Inform
    {
        private int data;
        public int Data { set; get; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Inform inform = new Inform();
            inform.Data = 7;
            Console.WriteLine(inform.Data);
        }
    }
}

 

 

 

반응형

'0. 이론' 카테고리의 다른 글

TCP 송/수신 원리  (0) 2023.01.08
모드버스란? (+ 프레임 구성, 예제, 샘플)  (0) 2022.07.14
풀업&풀다운 (Pull-up&Pull-down)이란?  (0) 2022.04.26
플로팅(Floating)현상이란?  (0) 2022.03.22
DMA란? (Direct Memory Access?)  (0) 2021.12.23

댓글