💻 CS
객체 지향 프로그래밍 (OOP) _ 추상화 & 캡슐화
meLR
2024. 1. 16. 15:36
파이썬을 기반으로 작성되었습니다.
추상화
프로그래머들이 특정코드를 사용할때 필수적인 정보를 제외한 세부사항을 가리는 것
추상화 팁
- 추상화를 할 때는 클래스 변수 메소드 이름을 잘 지어야한다.
- 추상화는 문서화를 잘해야한다.
- help(class)를 하면 Docstring 내용을 확인 할수있다.
- 타입 힌팅을 적어서 개발자들에게 어떤 타입을 사용하는지 알려준다.
type hinting : 변수뒤에 “:” 을쓰고 타입을 작성한다. 함수는 “→” 을 쓰고 타입을 작성한다.
타입 힌팅은 작동하는데 문제는 없지만 개발자들에게 어떤 타입을 사용해야하는지 도움을 준다.
캡슐화
- 객체의 일부 구현 내용에 대한 외부로 부터의 직접적인 액세스를 차단하는 것
- 객체의 속성과 그것을 사용하는 행동을 하나로 묶는것
클래스에서 숨기고 싶은 변수나 메소드가 있다면 이름앞에 “__” 밑줄 두개를 붙여 접근을 제한한다. → 캡슐화 첫번째 정의 (객체의 일부 구현 내용에 대한 외부로 부터의 직접적인 액세스를 차단하는 것)
직접 접근이 불가능한 변수를 접근할 수 있는 메소드를 통해 접근해야한다. → 캡슐화 2번째 정의 (객체의 속성과 그것을 사용하는 행동을 하나로 묶는것)
getter메소드와 setter 메소드
- 변수값읽기 → getter 메소드
- 변수값쓰기 → setter 메소드
꼭 getter와 setter가 모든 접근 불가능 변수에 있어야하는 것은 아니다. (민감한 정보일 경우에…)
setter 메소드는 파라미터로 전달된 값이 적절한지 점검하는 코드를 넣는 것이 중요하다.
💡 하지만 파이썬에서는 완벽한 캡슐화는 제공하지 않는다… 접근 할 수 있는 방법이 존재한다.
파이썬은 ”_” 언더바 하나로 접근하지 말라는 경고 표시로 사용된다. 물론 약속이기 때문에 접근은 가능하다.
데코레이터
- @property : 어떤 변수에 대한 getter 메소드를 만들수있다.
- @변수명.setter : 어떤 변수에 대한 setter 메소드를 만들수있다.
💡 변수 직접 사용을 최소화 할수록 유지보수 쉬운 코드가 만들어진다. 최대한 메소드를 이용하는 것이 좋다.