ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [컴퓨터 사이언스] 6장. 객체 지향 프로그래밍
    CS 2019. 10. 15. 01:10

    ※ 이 게시글은 <컴퓨터 사이언스 부트캠프 with 파이썬> 저자 양태환, 출판사 길벗

    을 보고 공부하면서

    중요하거나 이해가 어려운 부분을 개인적으로 정리해둔 글입니다. 공부하는 학생이 쓴 글이므로 부정확한 정보가 있을 수 있으며,

    상세한 설명이나 예제는 책 원본을 참고하세요.

     

     


     

    프로그래밍 패러다임 : 프로그래밍을 어떻게 바라볼 것인지, 어떻게 프로그래밍할 것인지에 대한 인식이나 체계.

    (프로그래밍을 바라보는 다양한 시각과 통찰)

    절차 지향 프로그래밍, 객체 지향 프로그래밍, 함수형 프로그래밍 등이 있음.

     

     


     

    1. 절차 지향 프로그래밍(procedural programming)

    : 함수(절차, 서브루틴)를 사용해 프로그래밍하는 것.

     

    "이 프로그램이 무슨 일을 하는가?"

     

    함수 : 입력을 받아 일련의 연산과정을 거쳐 출력을 내보내는 것.

     

     

    함수 사용의 장점

     

    1) 인터페이스와 구현의 분리

    : 함수를 만든 사람과 사용하는 사람이 다른 경우, 사용하는 사람은 함수의 내부가 어떻게 구현되어있는지 알 필요 없이 사용법(인터페이스)만 알면 됨.

     

    2) 긴 코드를 기능별로 나누어 함수로 정의해두면,

    이름만 봐도 함수가 어떤 일을 하는지 알 수 있고/ 어디서든 호출할 수 있어서

    → 코드를 직접 작성하지 않은 사람도 쉽게 프로그램을 이해하고 유지•보수할 수 있다.+코드의 재사용성이 높아진다.

     

    ...더보기

    *수학적 상식

    분산(variance) : 각 점수에서 평균 값을 뺀 값의 제곱의 평균(산포도, dispersion 분석에 사용됨)

    표준편차(standard deviation) : 분산의 제곱근.

     

     

    2. 객체 지향 프로그래밍(object-oriented programming, OOP)

    : 현실세계를 모델링하는 데 변수, 함수를 가진 객체를 이용하는 패러다임.

    객체 = 현실 세계의 사물을 모델링한 것.

     

    객체 지향의 모델링 과정

     

    "현실 세계에 존재하는 객체(object)를 어떻게 모델링할 것인가?"

     

    → 사물의 '특성'을 기준으로 객체들을 분류하거나 계층(클래스)을 만든다.

    ex) 사람 객체

    모든 사람이 같은 특성을 가지고 있지만, 그 값은 다름. +사람은 '잠자기', '먹기' 같은 행동(기능)을 할 수 있음.

     

    → 현실세계의 객체는 특성(속성)과 행동(기능)으로 표현할 수 있다.

    → 현실세계의 객체를 프로그래밍으로 가져오려면(모델링), 특성 = 변수(데이터), 행동 = 함수로 나타내면 된다.

     

     

    1) 캡슐화

    : 변수와 함수를 클래스와 같은 하나의 단위로 묶는 것.

     

    ...더보기

    ★ 메세지 패싱 : 서로 다른 객체가 함수 호출을 통해 상호작용하여 객체의 상태가 변하는 것.

    def give_money(self, other, money):

        self['money'] -= money other['get_money'](other, money)

     

    def get_money(self, money):

        self['money'] += money

     

     

    2) 클래스와 객체

     

    클래스 : 객체를 생성해내는 템플릿

    객체(≒인스턴스) : 클래스를 이용해 만들어진 변수, 함수를 가진 메모리 공간

    멤버/프로퍼티 : 클래스로 묶이는 변수

    행동/메서드/멤버함수 : 클래스로 묶이는 함수

     

    멤버+메서드 = 속성(attribute)

    생성자 : 객체 생성 시 인스턴스 멤버를 초기화하는 함수

     

    -

     

    인스턴스 멤버 : 객체가 가진 멤버

    (객체 생성 시 생성자에 의해 초기화됨)

    인스턴스 메서드 : 객체가 가진 메서드

    (메서드 내부에 클래스 함수와 객체자신의 참조를 가지고 있음.)

    → 인스턴스 멤버와 인스턴스 메소드는 객체 생성 후 객체를 통해 접근/호출 해야 한다.

     

    *파이썬에서 인스턴스 메서드의 함수의 차이 :

    인스턴스 메소드는 객체가 없으면 호출할 수 없음.(첫 번째 인자로 전달할 객체가 없기 때문)

    / 함수는 클래스를 사용해서도 호출할 수 있지만 첫 번째 인자 self에 객체를 직접 넘겨주어야함.

     

    -

     

    클래스 멤버 : 클래스가 가진 멤버.

    (클래스 선언 바로 아래 선언됨.)

    모든 객체가 같은 데이터를 가지는 경우, 클래스 멤버로 만들어, 모든 객체가 공유하도록 할 수 있다.

    클래스 메서드 : 클래스가 가진 메서드

    (메서드 위의 데코레이터 @classmethod로 구분)

    → 클래스 멤버와 클래스 메서드는

    객체를 생성하지 않고도 클래스를 통해 접근하거나 호출할 수 있다. (객체에서도 접근/호출이 가능하다)

    객체지향 패러다임에서 꺼리는 전역 변수, 전역 함수를 대체 가능.

     

    *파이썬의 정적 메서드(static method) :

    정적 메서드는 인자로 클래스/객체를 받지 않는다. 함수의 정의만 클래스 안에 선언되어있을 뿐, 일반 함수와 같기 때문에 전역 함수를 대체하기에 가장 알맞음.

     

    *클래스 메서드는 대체 생성자로도 쓰인다.

    (클래스 메서드 호출 → 클래스 메서드가 일정한 프로세스를 거친 뒤 일반적인 생성자를 다시 호출해 객체 생성)

     

     

    3) 정보 은닉

    : 캡슐화할 때 어떤 멤버와 메서드를 숨겨서 유저 프로그래머가 접근할 수 없도록 하는 것.

     

    ex) C++의 접근 제어 지시자(access modifier)

    public : 객체를 만들어 사용하는 유저 프로그래머가 접근/호출 가능한 멤버나 메서드

    private : 클래스 안에서만 사용할 수 있고 객체를 통해서는 접근/호출할 수 없는 멤버나 메서드.

     

    멤버에 접근하거나 변경해야 할 때는 액세스 함수(access function. getter 혹은 setter 메서드를 말함)을 사용하여 접근하거나 변경해야 함.

     

    정보 은닉의 필요성 :

    setter 메서드를 통해서만 멤버에 접근이 가능하도록 해서,

    유저 프로그래머가 직접 멤버를 건드려서 잘못된 값으로 변경하는 등 실수할 확률을 낮출 수 있음.

    OOP에서 잘된 정보 은닉은 필요한 메서드만 공개하고 나머지는 모두 숨기는 것.

     

    파이썬에서의 정보 은닉 :

    파이썬은 기본적으로 정보 은닉을 지원하지 않음. 따라서 완벽한 정보 은닉이 불가능하지만, 유저 프로그래머의 실수를 막을 수 있는 방법은 제공함.

     

    ex) 숨기려는 멤버 앞에 언더바 두 개(__) 붙이기, 프로퍼티 기법 등

     

     

     

    'CS' 카테고리의 다른 글

    [UML] 시퀀스 다이어그램  (0) 2021.12.24

    댓글

Designed by Tistory.