Skip to content

Latest commit

 

History

History
125 lines (81 loc) · 3.37 KB

2022.07.16.md

File metadata and controls

125 lines (81 loc) · 3.37 KB

객체 지향 프로그래밍의 핵심 4가지 개념


추상화(abstraction)


복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다.

사실 지금까지 프로그램에서 변수를 지정하고, 함수를 사용하고 하는 행위들 모두 추상화의 일종이다.


추상화를 잘 하는 법


추상화를 잘 한다는 것은 동료 개발자들이 이해하기 쉽도록, 그리고 자신이 나중에 사용해도 쉽도록 만들 수 있다는 것이다.

추상화를 잘 하기 위해서는

  1. 클래스, 변수, 메소드의 이름을 의미가 명확히 드러나도록 잘 지어야 하며,

  2. 문서화(docstring)를 활용해야 한다. 파이썬의 경우 아래와 같이 작성한다.

    """
    this is a docstring
    """
  3. help(classname) 으로 해당 class 에 작성된 docstring을 모아 볼 수 있다. 파이썬에 내장된 list 등도 help(list) 로 list 의 method 들의 기능 등을 모아 볼 수 있다.


파이썬의 타입 힌팅(hinting)


name: str = "Hong gil dong"
age: int = 23

파이썬에서는 위와 같이 변수명 뒤에 콜론과 함께 타입명을 작성해 타입 힌팅을 해주는 기능이 있다.

또한 메소드가 특정 타입을 리턴해야 한다면 아래와 같이 쓰면 된다. (없으면 -> None)

class Calculator:
    @staticmethod
    def divider(self, x, y) -> float:
        return x / y

cal1 = Calculator()
print(cal1.divider(1, 3))

출력 값:

0.3333333333333333

캡슐화


  1. 객체의 일부 구현 내용에 대한 외부로부터의 직접적인 액세스를 차단하는것

  2. 객체의 속성과 그것을 사용하는 행동을 하나로 묶는 것


캡슐화의 정의 - 외부에서의 접근 차단, 속성과 행동의 묶음


클래스의 속성이나 메소드 이름 앞에 언더바 두개를 붙이면 클래스 외부에서의 접근이 차단된다.

from xmlrpc.client import boolean


class Citizen:
    drinking_age = 19

    def __init__(self, name, age, id):
        self.name = name
        self.age = age
        self.__id = id

    def authenticate(self, id_field):
        return self.__id == id_field


kyusik = Citizen("규식", 22, "12345")
print(kyusik.__id)

출력값:

AttributeError: 'Citizen' object has no attribute '__id'

에러가 뜬다.

다만 클래스 내에서는 접근 가능하므로 따로 메소드를 만들어서(예를 들어 age 속성을 1 증가시키는 메소드, age가 음주가능 연령인지 확인하는 메소드 등) 활용하면 된다.

이것이 바로 캡슐화의 두 번째 정의에 부합하는 행동이다.

변수의 값을 읽어오는 메소드를 getter 메소드라고 하고,

변수의 값을 설정하는 메소드를 setter 메소드라고 한다.

사실 파이썬은 언어 자체적으로 캡슐화를 지원하지 않는다. 캡슐화처럼 보이지만 사실 변수명을 mangle하는 것이다


파이썬에서 _ 언더바 하나의 의미


변수명, 메소드명 앞에 언더바 _ 하나를 붙인다면, 그것은 파이썬에서 다른 개발자들에게 보내는 일종의 경고이다. 바로 클래스 밖에서 접근하지 말라! 는 경고다.


데코레이터를 이용한 캡슐화


내일 계속...