TIL_221012 OOP

Alice1304·2022년 10월 12일

AIB SUMMARY

목록 보기
7/12

핵심단어

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)
  • 사용시 장점
    • 프로그램의 작성 코드량을 줄여준다
    • 코드의 가독성을 높여준다

프로그래밍을 위한 설계

클래스 설계와 사용

  • 클래스의 설계가 중요한 이유는 코드 재사용성
    1. 코드 설계시 사용할 오브젝트 작성
    1. 코드 작성 전 각 오브젝트별로 요구되는 속성과 어떤 기능을 위해 생성되었는지 설계

모듈

  • 모듈,,, 지금까지 모듈이 없었으면 난 아무것도 못했을 것..
  • 파이썬 파일도 저장해서 불러올 수 있다
  • 모듈 불러오기 방법 Preview
    • import 모듈명
    • from 모듈명 import 변수/함수/클래스명
    • from 모듈명 import *

상위,하위 폴더내의 모듈 불러오기
https://www.youtube.com/watch?v=iKBPZDa5LFQ

클래스의 인스턴스화

  • 클래스를 생성했으면 인스턴스화 필요
  • object가 생성된 후, object가 소프트웨어의 메모리 할당이 되면 인스턴스가 됨
    - object는 인스턴스를 포함할 수 있으며, 포괄적 의미를 가짐
    • object는 프로그래밍 전체에 쓰이는 포괄적의미를 가짐

파이썬 활용 및 OOP

데이터 캡슐화와 접근제어

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

위의 그림과 같이 직접 접근을 허용하는 규칙이 있음

  • 파이썬의 변수나 함수를 감춰주는 기능, 외부의 무분별한 접근을 막기 위해 생성
    _클래스이름_메소드이름 <- 과 같은 형태로 이름을 변환시켜 부모클래스/서브클래스의 변수나 메소드 이름을 구분짓는다.
  • 프로그램이 길어지고 다양한 변수를 사용하는 경우 클래스의 속성이 충돌할 수 있다.
  • 대체로 중복속성을 활용하는 경우에 그렇다
  • 그럴땐~ 비공개 속성을 활용하는 것이 해결 방안
  • __ 를 사용해보자

메소드 오버라이딩

  • 오버라이딩은 우선시하다라는 의미,
  • 부모클래스의 메소드를 재호출하는 것이 아닌 같은 이름의 메소드를 신규 생성
  • 중복되는 기능(메소드)은 기존 부모클래스의 메소드(기능)로 재사용하고, 다르게 사용하려면 재정의하는 개념으로 활용
  • 재사용을 위해 만들어짐
  • 메소드 오버라이딩도 다형성 개념의 한 종류

SUMMARY SECTION

파이썬의 자료형은 하나의 클래스
이 자료형에 따라 어떤 내장함수를 사용할 수 있는 지가 나뉜다

dir(__builtin__) : 내장함수 확인
help('라이브러리명') : 라이브러리 설명확인

profile
기록기록

0개의 댓글