객체 지향 프로그래밍(Object-Oriented Programmin, OOP)라고 부르며 컴퓨터 프로그래밍에서 많이 사용이 되어진다.
Python을 사용하고 Deep learning에 dataset이나 model을 만들거나 사용할때 중복되거나 코드가 비효율적일때가 많은데 OOP개념을 알고 있으면 좀더 쉽게 코드를 구성할 수도 있다.
즉 필요한 class를 만들어서 내부에 행동, 동작, 특ㅈㅇ을 객체로 만들고 서로 서로 동작할수 있도록 하는 프로그래밍 방법이다.
아마 python을사용하면 객체로 흘러가기 때문에 이해가 될것이다.
이러한 특징들때문에 OOP를 사용하게 되어지면 코드의 재사용이 용이해질뿐만 아니라 유지보수에도 유용하고 제품화 코드처럼 큰 프로젝트에서도 효과적으로 사용할수 있다.
하지만 장점이 있다면 단점도 존재하기 마련인데 단점으로써는 객체 디자인을 시간과 노력이 많이 들뿐만 아니라 함수로 되어있어서 시간도 많이 걸린다.
여담이지만 코드가 커지다 보니 monorepo로 변경하는 프로젝트도 진행하였지만 시간과 노력이 상당히 많이 들어가고 눈에 띄는 결과가 없으니 힘들었다 ;;;
이번시간에서는 Python에 대해서 아니라 C++관점에서 보고자 한다.
참고한 자료는 다음과 같다.
reference 1: https://wikidocs.net/book/2380
C++ 이야기(A Story of C++)
이 페이지를 보고 있다면 [추천] 클릭! 좌측 메뉴 판넬 상단의 검색 기능을 이용하면 필요한 내용을 빠르게 탐색할 수 있다. 세상은 변한다. 그에 따라 지식도 변한다.…
wikidocs.net
reference 2: https://ocw.mit.edu/courses/6-096-introduction-to-c-january-iap-2011/270def7b1f68535b7c3846c606b220eb_MIT6_096IAP11_lec07.pdf
reference 3: https://en.wikipedia.org/wiki/Object-oriented_programming
Object-oriented programming - Wikipedia
From Wikipedia, the free encyclopedia Programming paradigm based on the concept of objects "Object-oriented" redirects here. For other meanings of object-oriented, see Object-orientation. Object-oriented programming (OOP) is a programming paradigm based on
en.wikipedia.org
OOP를 정리하자면 총 4가지의 중요한 개념이 있으며 Data Abstraction(추상화), Encapsulation(캡슐화), Polymorphism(다형성), Inheritance(상속성) 으로 구성이 되어있다.
그렇다면 이 각각의 정의는 어떻게 되어지는지 살펴보도록 하자.
Data Abstraction(추상화)
* 어떠한 객체를 가질때 공통된 특징이나 기능들을 한곳에 이름을 모아서 작성하는것이다 . 예로들어서 우리가 동물을 추상화를 하고 싶다고 하였을떄 밥을 먹는 행위나 움직이는 것에 대해서는 함수로 기능을 구현할수 있으며 강아지라 하더라도 같은 종의 강아지에 따른 특징들을 변수로 붙여서 저장할수 있는데 이를 추상화라고 부른다.
Encapsulation(캡슐화)
* 공통된 function, 기능들을 하나로 묶어서 캡슐에 부관하는 것이 캡슐화이다. 이를 하게 되어지면 재사용하기가 원할해지며 python으로 따지면 Self변수와 같은 것이다.
Polymorphism(다형성)
* 여러 형태를 받아드릴수 있는 성질로써 동일한 함수명을 다른 의미를 지니도록 하는것 이다. 대표적으로 오버로딩, 오버라이딩이 있으며
오버로딩의 경우에서는 같은 이름의 함수를 타입이나 갯수를 다르게 하여서 다시 재정의 하는것
오버라이딩의 경우에서는 class를 상속받는것과 같으며 부모 class에 있는 method를 자식 class 재정의해서 확장하여 다른 기능을 수행할수 있도록 한다.
Inheritance(상속성)
* 다형성보다 이전의 정의된 것으로 부모 class가 자식 class로 나누어서 객체를 좁혀가는 것이다. 그래서 부모 class에 가지고 있는 기능을 그대로 받아서 좀더 확장시킬수 도 있으며 일부 변형도 가능하다.
우리가 아는 python은 이와같이 상속을 받아서 하는 경우가 많음으로 이 지식은 알아놓자.
다음에는 좀더 OOP에 대해서 알아보자