한 걸음씩 기록하며
#.9 객체지향 프로그래밍 (OOP) 본문
1. 객체지향 프로그래밍 (Object-Oriented Programming)
출처 : 이고잉 : 객체지향 프로그래밍 1
객체지향 프로그래밍은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 즉 객체지향 프로그래밍은 객체를 만들고, 그것들로 하나의 프로그램을 만드는 것이다.
객체는 변수와 함수를 그룹핑한 것
객체지향은 컴퓨터 프로그래밍의 패러다임 중 하나 (절차 지향 프로그래밍도 있다)
패러다임이란 프로그래밍을 어떤 관점에서 해나갈 것인가에 대한 고민이다.
-> 기존 절차 지향 프로그래밍 언어들이 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나,
-> 데이터나 정보의 표현에 중점을 두어, 프로그램을 여러 개의 독립적인 단위, 즉 "객체"들의 모임으로 파악하는 것이 객체 지향 프로그래밍이다.
출처 : c-sharpcorner
2. 객체 지향 프로그래밍의 특성
OOP의 특성은 크게 추상화, 캡슐화, 상속성, 다형성이 있다.
1) Abstraction(추상화)
- 객체들에게서 공통되는 속성이나 기능을 묶어서 이름을 붙이는 것
- 예를 들면, 호랑이, 사자, 거북이, 기린 이라는 객체를, 동물 혹은 생물이라는 추상적인 객체로 묶는 것을 의미한다.
- 추상화는 이름을 잘 짓고, 설명(문서화)을 잘 달아 놓는게 매우 중요하다.
- 추상화에 대해서 딥하게 고민하려면 다음 글을 읽어보면.. 좋..https://black7375.tistory.com/6
2) Encapsulation(캡슐화)
캡슐화는 객체의 속성, 메소드를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 것을 뜻한다. 자세히 풀면 아래와 같다.
(1) 캡슐화 : 묶기
- 캡슐화는 일반적으로 연관 있는 변수와 함수를 묶는 것을 뜻한다.
- 클래스를 작성할 때, 내부적인 세부사항을 캡슐화하는 것이 일반적이다.
- 문제는 파이썬에서 클래스와 객체의 거의 모든 것이 오픈되어 있다는 것이다. 이는 외부의 잘못된 사용으로 인해 객체가 손상되거나 노출될 위험에 놓이게될 수 있다는 것을 의미한다.
- 이것을 위해 캡슐화는 은닉성(막기)이라는 것도 포함한다.
(2) 은닉성
- 은닉성(infomation hiding)은 객체의 상세한 내용은 객체 외부로부터 숨기고 제한된 데이터와 메소드 만을 노출시켜 객체와 상호작용을 할 수 있도록 하는 것을 의미한다.
- 파이썬에서 어떻게 은닉하는가? (private attribute)
- 클래스 내부에 이름이 " _" 로 시작하는 속성이나 메서드는 관행적으로 private으로 약속하고 처리한다.
- 1) Name mangling
- " _ _" 를 사용하면 해당 속성에 대한 클래스 외부의 접근을 차단할 수 있다..
- 그러나 이 또한 바뀐 이름으로 접근이 가능하기에 완벽한 캡슐화는 아니다.
class Mangling: def __init__(self, name, age): self.__set(name, age) def __set(self, name, age): self.__name = name self.__age = age def getname(self): return self.__name def getage(self): return self.__age
-
- 2) Property
- 위의 한계에 대한 더 나은 방법이 바로 property이다.
- 메서드 위에 @property를 지정하면 함수명으로 하나의 인스턴스를 만들고, 그 내부의 getter 메서드에 등록된다.
- 갱신이 필요하다면 @함수명.setter로 처리한다.
- 정의가 끝나면 이 클래스가 객체로 전환된다.
class PropertyClass: def __init__(self, name): self._name = name @property def name(slef): return self._name @name.setter def name(self, value): self._name = value
- 2) Property
3) Inheritance(상속)
상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것을 말한다. 하나의 크래릇가 가지고 있는 특징(데이터와 메서드)들을 그대로 다른 클래스에 물려주고자 할 때 사용한다.
- 상속은 코드 중복을 줄여주고, 유지 보수의 편리성을 제공해준다.
- 또한 객체의 다형성을 구현할 수 있게 해준다.
4) Polymorphism(다형성)
다형성은 같은 타입이지만, 실행 결과가 다양한 객체를 대입(이용)할 수 있는 성질을 말한다. 객체 지향 프로그래밍 언어에서는 하나의 클래스 내부에 같은 이름의 행위를 파라미터의 타입과 개수를 다르게 하여 여러개 정의하거나, 상위 클래스의 메소드를 재정의하여 사용할 수 있는 것을 다형성이라고 한다.
- Overloading : 같은 이름의 메서드를 가지면서 파라미터의 유형과 개수를 다르도록 하는 기술 (Python에는 없다)
- Overriding: 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 기술
'Python' 카테고리의 다른 글
#.11 Class (0) | 2021.12.22 |
---|---|
#.10 Object(객체)에 대하여 (0) | 2021.12.22 |
#.8 Data Structure Method (0) | 2021.12.21 |
#.7 Data Structure : list, tuple, set, dict (0) | 2021.12.20 |
#.6 Function & Lambda (0) | 2021.12.20 |
Comments