💻 CS

객체 지향 프로그래밍 (OOP) _ 추상화 & 캡슐화

meLR 2024. 1. 16. 15:36

 

파이썬을 기반으로 작성되었습니다.


추상화

프로그래머들이 특정코드를 사용할때 필수적인 정보를 제외한 세부사항을 가리는 것

추상화 팁

  • 추상화를 할 때는 클래스 변수 메소드 이름을 잘 지어야한다.
  • 추상화는 문서화를 잘해야한다.
  • help(class)를 하면 Docstring 내용을 확인 할수있다.
  • 타입 힌팅을 적어서 개발자들에게 어떤 타입을 사용하는지 알려준다.

type hinting : 변수뒤에 “:” 을쓰고 타입을 작성한다. 함수는 “→” 을 쓰고 타입을 작성한다.

타입 힌팅은 작동하는데 문제는 없지만 개발자들에게 어떤 타입을 사용해야하는지 도움을 준다.

 


캡슐화

  1. 객체의 일부 구현 내용에 대한 외부로 부터의 직접적인 액세스를 차단하는 것
  2. 객체의 속성과 그것을 사용하는 행동을 하나로 묶는것

클래스에서 숨기고 싶은 변수나 메소드가 있다면 이름앞에 “__” 밑줄 두개를 붙여 접근을 제한한다. → 캡슐화 첫번째 정의 (객체의 일부 구현 내용에 대한 외부로 부터의 직접적인 액세스를 차단하는 것)

직접 접근이 불가능한 변수를 접근할 수 있는 메소드를 통해 접근해야한다. → 캡슐화 2번째 정의 (객체의 속성과 그것을 사용하는 행동을 하나로 묶는것)

getter메소드와 setter 메소드

  • 변수값읽기 → getter 메소드
  • 변수값쓰기 → setter 메소드

꼭 getter와 setter가 모든 접근 불가능 변수에 있어야하는 것은 아니다. (민감한 정보일 경우에…)

 

setter 메소드는 파라미터로 전달된 값이 적절한지 점검하는 코드를 넣는 것이 중요하다.

 

💡 하지만 파이썬에서는 완벽한 캡슐화는 제공하지 않는다… 접근 할 수 있는 방법이 존재한다.

 

파이썬은 ”_” 언더바 하나로 접근하지 말라는 경고 표시로 사용된다. 물론 약속이기 때문에 접근은 가능하다.

 

데코레이터

  • @property : 어떤 변수에 대한 getter 메소드를 만들수있다.
  • @변수명.setter : 어떤 변수에 대한 setter 메소드를 만들수있다.
💡 변수 직접 사용을 최소화 할수록 유지보수 쉬운 코드가 만들어진다. 최대한 메소드를 이용하는 것이 좋다.