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 |
댓글