본문 바로가기
카테고리 없음

[N513] OOP(2)

by Atypical 2023. 2. 15.

프로그래밍을 위한 설계

클래스 설계와 사용

  • 여기서 주로 배울 것을 클래스 설계이다.
  • 클래스 설계가 중요한 이유는 코드 재사용성

1단계

  • 코드 설계 시 사용할 object부터 적어보자.
  • Users
    • Customers
    • Vendors
    • Admin
  • Products
  • Purchases

2단계

  • 코드 작성 전, 각 object별로 요구되는 속성과 어떤 기능을 위해 생성되었는지 설계한다.
  • Users
    • Attributes(속성)
      • 이름
      • 사용자가 관리자인지?
    • Customers
      • Attributes
        • 이름
        • 구매목록
    • Vendors
      • Attributes
        • 이름
        • 상품목록
    • Admin
      • 이름
      • 사용자가 관리자임을 나타내는 구분값
  • Products
    • Attributes
      • 이름
      • 가격
      • 공급업체
  • Purchases
    • Attributes
      • 제품
      • 고객
      • 가격
      • 구매완료기간

3단계

object간 관계에 대해 생각해본다.

  • 판매자는 1개 이상의 제품을 갖고 있다.
  • 고객은 1개 이상의 구매를 한다.
  • 구매는 1개 이상의 제품을 구매하는 것이다.

모듈

  • 파이썬에서 코드가 저장된 파일을 모듈이라고 한다.
    • 모듈을 활용하면 유지보수가 쉬운 프로그램을 작성할 수 있다.
    • 즉, 파이썬에서 코드를 작성한 후 파일로 저장하여 다른 코드 파일에서도 해당 파일의 변수, 함수, 클래스를 불러와서 사용할 수 있다.
    • 모듈 불러오기 방법 Preview
      • import 모듈명
      • from 모듈명 import 변수/함수/클래스명
      • from 모듈명 import *
    • import 모듈명 을 사용할 때에는 모듈 내에 사용할 내용들을 모듈명.변수, 모듈명.함수(), 모듈명.클래스() 형태로 불러와서 사용한다.

클래스의 인스턴스화

클래스를 생성했으면, 그것을 활용하기 위한 인스턴스화(소통의 주체가 되는 실제 객체)가 필요하다.

  • object가 생성된 이후, object가 소프트웨어의 메모리할당이 되면 인스턴스가 되는 것이다.
    • object는 인스턴스를 포함할 수 있으며, 포괄적 의미를 갖는다.

파이썬 활용 및 OOP

데이터 캡슐화와 접근제어

💡 생각하는 시간 : 캡슐화를 하는 이유

  • 캡슐화 : object 및 소스코드 구현에 대한 상세정보를 분리하는 과정이다.
  • 모듈화가 가능해진다.(함수, 메소드, 클래스 등을 활용한 기능 분리.)
  • 기능이 분리되어있으니 디버깅을 하는 경우 편리하다.
  • 프로그램이 기능별로 분리되어있으니 소스코드의 목적을 알기쉽다.
  • 파이썬은 object 접근제어를 위한 접근제어자를 제공하지 않기때문에 변수, 메소드, 함수에 직접 접근할 수 있다.
    • 파이썬에서는 상단 표와 같이 직접 접근을 허용하지 않는 규칙을 만들었다.
    • Notation : 접근 정도를 나타내는 명칭이며 Private -> Protected -> Public 순서로 코드접근이 어렵다.
  • 파이썬의 변수나 함수를 감춰주는 기능으로서, 외부에서 무분별한 접근을 막기위해 위와 같은 개념이 생겨났다.
    • 외부 object가 속성이나 메소드에 대한 접근을 막기 위해 이중 밑줄 __을 접두사로 추가할 수 있다.
    • '_클래스이름__메소드이름' 형태로 이름을 변환시켜, 부모클래스와 서브클래스의 변수나 메소드이름을 구분짓는다.

메소드 오버라이딩

💡 생각하는 시간 : 메소드 오버라이딩은 상속개념을 기반으로 한 개념이다.

  • 오버라이딩은 우선시하다라는 의미로, 상속처럼 부모클래스의 메소드를 재호출하는 것이 아니라 같은 이름의 메소드를 신규 생성하는 것이다.
  • 새로운 이름의 메소드를 기능별로 만들면 되는데 부모클래스의 메소드이름을 그대로 사용하는 이유는 무엇일까?
    • 중복되는 기능(메소드)은 기존 부모클래스의 메소드(기능)로 재사용하고, 다르게 사용하려면 재정의하는 개념으로 활용할 수 있다.
      • 프로그래밍의 핵심이 되는 재사용을 위함이다.
      • 메소드 오버라이딩도 다형성 개념의 한 종류이다.

super 사용하기

  • 아래 예시에서 Graduate(자식클래스)는 Student(부모클래스)가 가지고 있는 모든 매개변수(파라미터, arguments)를 사용한다.
    • 상속을 통한 재사용을 하는 경우, 아래와 같이 다른 매개변수(graduation_date)도 신규 생성할 수 있다.

댓글