개요
TypeScript + NestJS를 사용하여 서버를 구축하다 보니
Java, C++를 사용했을떄와 달리 private 변수를 많이 사용하지 않았다.
Entity객체의 변수들을 public으로 선언하고 값을 자유롭게 변경해도 되는지에 대해 의문이 생겼고
TypeScript + NestJS + TypeORM에서 private변수를 어떻게 사용하는지에 대해 알아보았다.
Private 변수
private 변수는 다음과 같은 이점을 얻기 위해 사용한다.
•
캡슐화가 중요할 때 : 내부 구현을 외부에서 직접 접근하지 못하도록 보호하고 싶을 때
•
불변성이나 제한된 접근을 보장하고 싶을 때
•
다른 개발자가 실수로 내부 상태를 직접적으로 변경하는 것을 방지하고 싶을 때 → 나는 이 점때문에 private변수 사용에 대해 고민하기 시작했다.
private변수를 꼭 사용해야 하는 것은 아니다.
•
코드가 단순하고, 멤버 변수 접근 제한이 필요 없을 때
•
테스트 코드에서 직접 내부 상태를 확인해야 할 때
•
팀에서 객체 지향 캡슐화보다는 구조적 설계를 선호할 때 (ex. NestJS에서 DTO나 Entity 등)
Domain, Entity객체를 같이 쓰는경우
위에서 보듯이 DTO, Entity객체에서는 대부분 public을 써서 직접 접근을 하고
비즈니스 로직이 많은 클래스 (model, domain 객체)에서는 private을 적극적으로 사용하는 것이 좋은 방법인 것 같다.
하지만 현재 서버는 TypeORM을 사용하고 Entity=Domain 클래스인 상황이다.
이럴때는 어떻게 해야할까?