핵심단어
OOP, 클래스 설계
학습목표
REFERENCE
WARM UP
Object : 대상, 객체
class : 설계도
Instance : 실례
Object ((( class -> instance )))
어떤 대상이 정확하게 분류 된것이 클래스(설계도)
그 설계가 정확히 동작하는 것을 인스턴스라고 한다
### 실습링크
https://github.com/Alice1304/1day1commit/blob/main/%EC%8B%A4%EC%8A%B5/SECTION5/N513.ipynb
OOP (객체 지향 프로그래밍)
- 세상에 있는 실체가 있는 모든 물체를 클래스와 인스턴스 함수, 변수라는 OBJECT로 변화시켜서 프로그램을 구성
- OOP의 기본전제는 기능(함수, 변수) 재사용이 가능하도록 설계 및 프로그래밍 했는지
- 최소비용으로 최대효율을 얻기 위해 개발됨
OOP에 대한 의견
-
특정 Object를 컴퓨터라는 도구에 인식시키는 것
-
대부분의 분야에서 OOP의 개념을 적용하여 프로그래밍 수행
-
기본개념 : 설계(사람이 이해하는 방식)와 구현할 소스코드(컴퓨터가 이해하는 방식)간의 상호 이해 중요
- HW & SW 성능증가(CPU성능증가, 소프트웨어 다중실행) 덕분에 OOP의 모든 기능을 활용할 필요는 없다
- OOP의 개념을 무분별하게 활용하면 유지보수가 어려워질수 있기 때문에 적재적소에 사용해야함
-
OOP의 어려운 점 :
- 기존의 프로그래밍 패러다임들과 우열을 가릴 필요는 없다
- 재사용 가능한 클래스, 메소드(기능)설계가 중요
- OOP는 주관성이 높으므로, 보편적으로 활용되는 개념에 대해 배운다
-
OOP를 사용하지 않았을 때
- 배열, 함수, 변수를 많이 생성하고 활용하여 최대한 많은 기능을 적은 양의 소스코드 파일에 담음
- 속성과 기능이 증가할 때마다 배열과 함수를 계속 생성해야 했기 때문에 소스코드 관리에 비효율 발견
- 데이터분석을 진행하는 경우, 모듈과 라이브러리를 활용한 분석 인사이트가 더 중요
OOP의 필요성
- 데이터 기반 의사결정, 컴퓨터하드웨어성능, 데이터양 증가에 따라 OOP활용도 증가
- 함수형 프로그래밍은 함수의 사용을 극대화시켜서 코드의 가독성을 높여주는 형태, 프로그래밍 코드를 특정 상황에 사용하기 위해 고안된 방법
OOP와 일상생활
- 일상 생활에서 볼 수 있는 것, 실제로 머릿속에서 떠올릴 수 있는 것을 프로그래밍하는 것이 OOP의 중요한점
- 기능별로 개체가 효율적으로(재사용가능해야함) 분리되어야함
OOP의 구성
캡슐화
- 기본 개념 : 내부 속성(변수)과 함수를 하나로 묶어서 클래스로 선언하는 일반적인 개념
- 캡슐화 형태로 코드를 작성하지 않으면 특정 기능(함수, 변수)에 직접 접근하게 되는 상황이 된다.
- 기능이 많아질수록 재사용의 개념을 활용하기가 어려움
참고
https://ebbnflow.tistory.com/255
상속과 포함
'개는 동물이다', '경찰은 직장인이다' 라는 관계로 설명된다.
기본개념 : 상위 클래스의 모든 기능(함수,변수)을 재사용 할 수 있다
"개는 몸을 갖고 있다." 라는 관계로서 설명된다.
기본개념 : 다른 클래스의 일부 기능(함수)만을 재사용한다.
추상화
- 기본개념 : 추상화는 복잡한 내용에서 핵심적인 개념 및 기능을 요약하는 것을 말한다.
- 기본적으로 추상메소드를 선언ㅇ하며 실제 실행되는 기능은 보여지지 않음
- object의 기능에 따라 추상 클래스(상위클래스)를 상속받아 개별적으로 클래스(하위클래스)를 생성한다.
- 실제 실행되는 기능은 선언된 추상클래스를 상속받은 다른 클래스의 메소드에서 확인 가능
- 추상클래스를 사용하는 이유
- 클래스 또는 함수가 예상했던 것 이상으로 많이 생성되는 경우 추상 클래스를 생성해 핵심적인 기능만 생성
- 실제로 동작기능은 추상클래스에서 상속받은 하위클래스의 메소드에서 진행
- 추상 클래스의 추상메소드를 활용할 때 장점은 추상 클래스를 중심으로 하위 클래스의 메소드를 다양하게 생성할 수 있기 때문에, 유지보수를 진행하는 경우 추상 클래스만 수정하면 됨
다형성
- 다형성은 구현되는 하위클래스에 따라 클래스를 다르게 처리하는 기능
- 상속과 유사하다고 느껴질 수 있지만, 상속은 상위클래스의 기능(함수,변수)을 재사용한다.
- 다형성은 상위클래스의 기능을 변경하여 사용하는 것이다.(그대로 재사용x)
- 사용시 장점
- 프로그램의 작성 코드량을 줄여준다
- 코드의 가독성을 높여준다
프로그래밍을 위한 설계
클래스 설계와 사용
- 클래스의 설계가 중요한 이유는 코드 재사용성
- 코드 설계시 사용할 오브젝트 작성
- 코드 작성 전 각 오브젝트별로 요구되는 속성과 어떤 기능을 위해 생성되었는지 설계
모듈
- 모듈,,, 지금까지 모듈이 없었으면 난 아무것도 못했을 것..
- 파이썬 파일도 저장해서 불러올 수 있다
- 모듈 불러오기 방법 Preview
- import 모듈명
- from 모듈명 import 변수/함수/클래스명
- from 모듈명 import *
상위,하위 폴더내의 모듈 불러오기
https://www.youtube.com/watch?v=iKBPZDa5LFQ
클래스의 인스턴스화
- 클래스를 생성했으면 인스턴스화 필요
- object가 생성된 후, object가 소프트웨어의 메모리 할당이 되면 인스턴스가 됨
- object는 인스턴스를 포함할 수 있으며, 포괄적 의미를 가짐
- object는 프로그래밍 전체에 쓰이는 포괄적의미를 가짐

파이썬 활용 및 OOP
데이터 캡슐화와 접근제어
- 캡슐화 : Object 및 소스코드 구현에 대한 상세 정보를 분리하는 과정
- 모듈화가 가능해진다
- 기능이 분리되어 디버깅이 편해짐
- 기능별로 분리해 소스코드의 목적을 알기 쉬워짐
- 변수, 메소드, 함수에 직접 접근 가능

위의 그림과 같이 직접 접근을 허용하는 규칙이 있음
메소드 오버라이딩
- 오버라이딩은 우선시하다라는 의미,
- 부모클래스의 메소드를 재호출하는 것이 아닌 같은 이름의 메소드를 신규 생성
- 중복되는 기능(메소드)은 기존 부모클래스의 메소드(기능)로 재사용하고, 다르게 사용하려면 재정의하는 개념으로 활용
- 재사용을 위해 만들어짐
- 메소드 오버라이딩도 다형성 개념의 한 종류
SUMMARY SECTION
파이썬의 자료형은 하나의 클래스
이 자료형에 따라 어떤 내장함수를 사용할 수 있는 지가 나뉜다
dir(__builtin__) : 내장함수 확인
help('라이브러리명') : 라이브러리 설명확인
