파이썬 중급 - 객체지향

CHOI CHOI·2023년 12월 2일
0

파이썬 중급

목록 보기
3/30

객체지향 프로그래밍

  • 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다

    속성이 바뀌는 값, 기능은 안바뀌는 값!

업로드중..

붕어빵틀을 상상해보면 이해하기 쉬움

객체 사용의 장점

  • 코드 재사용, 모듈화에 좋다.

클래스 만들기

  • 클래스는 class키워드와 속성(변수) 그리고 기능(함수)를 이용해서 만든다

실습 : 비행기 클래스를 만들고 비행기 객체 5개를 생성해보자

객체 속성 변경

  • 객체 속성은 변경이 가능하다!

실습 : 계산기 클래스를 만들고 사칙연산을 실행해 보자.

객체와 메모리

  • 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조한다.

실습 : 국어, 영어, 수학 점수를 입력받아 리스트에 저장하고, 원본을 유지한 상태로 복사본을 만들어 과목별 점수를 10% 올렸을 경우에 평균을 출력해보자
객체와 메모리와의 관계 : 레퍼런스 변수를 복사하면 객체가 복사되는것이 아닌 메모리주소가 복사되는 것!
새로운 객체를 만들고 싶다! 하면 copy()함수를 이용해서 복사하면 된다!

얕은 복사

  • 얕은 복사란, 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않는다.
  • 깊은 복사란, 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어진다.
  • 깊은 복사를 하기 위해서 사용하는 함수
    for문
    for s in scores:
    scoresCopy.append(s)
    print(f'id(secores) : {id(secores)'}
    print(f'id(secoresCopy) : {id(secoresCopy)}')
    extend()
    scores.Copy.extend(scores)
    print(f'id(scores):{id(scores)})
    print(f'id(secoresCopy) : {id(secoresCopy)}')
    copy()
    scoresCopy = scores.copy()
    print(f'id(scores): {id(scores)})
    print(f'id(secoresCopy) : {id(secoresCopy)}')
    [:]
    scoresCopy = scores[:]
    print(f'id(scores): {id(scores)})
    print(f'id(secoresCopy) : {id(secoresCopy)}')

실습 : 선수의 원본 점수를 이용해서 평균을 출력하고, 최고값과 최저값을 제외한 평균을 출력하는 프로그램을 만들어보자.

상속이란?

  • 클래스는 또 다른 클래스를 상속해서 내 것처럼 사용할 수 있다.

실습 : 덧셈, 뺄셈 기능이 있는 클래스를 만들고, 이를 상속하는 클래스를 만들어서 곱셈과 나눗셈 기능을 추가해보자!

생성자

  • 객체가 생성될 때 생성자를 호출하면 __init__() 가 자동 호출된다.

  • __init__()가 속성을 초기화 한다.

super()

  • 상위클래스의 속성을 초기화하기 위해서 super()를 이용한다.

  • 만약 상위 클래스의 속성도 같이 나오게 하고 싶다면!
  • 더 깔끔한 방법으로는 super() 함수를 써준다

실습 : 중간고사 클래스와 기말고사 클래스를 상속관계로 만들고 각각의 점수를 초기화 하자. 또한 총점 및 평균을 반환하는 기능도 만들어보자

다중상속

  • 2개 이상의 클래스를 상속한다
  • ()안에 상속받고 싶은 클래스를 나열해주기만 하면 된다.

실습 : BasicCalculator와 DeveloperCalculator 클래스를 다음과 같이 만들고 이들 클래스를 상속해서 Calculator 클래스를 만들어보자

오버라이딩

  • 하위클래스에서 상위클래스의 매서드를 재정의(override)한다.

실습 : 삼각형 넓이를 계산하는 클래스를 만들고 이를 상속하는 클래스에서 getArea()를 오버라이딩 해서 출력 결과가 다음과 같을 수 있도록 클래스를 만들어보자.

추상클래스

  • 상위클래스에서 하위클래스에 매서드 구현을 강요한다

    추상클래스는 객체 지향 프로그래밍에서 중요한 개념 중 하나.

    • 계약 규약 정의:
      추상클래스를 사용하면 해당 클래스를 상속받는 서브클래스들이 특정 메서드를 반드시 구현하도록 강제. 이는 일종의 "계약"을 정의하는 것. 서브클래스는 최소한의 인터페이스를 구현해야만 기대한 동작을 할 수 있도록 하는 것이 중요.

    • 코드의 일관성 유지:
      추상클래스는 공통된 행동이나 속성을 정의할 때 사용. 이를 통해 코드의 일관성을 유지하고 중복을 피할 수 있음. 모든 서브클래스가 공통된 특성을 가지도록 강제함으로써 코드의 일관성을 높일 수 있음.

    • 다형성과 인터페이스 구현:
      추상클래스를 통해 다형성을 구현. 추상클래스를 상속받은 여러 서브클래스가 공통된 인터페이스를 제공함으로써 코드의 유연성을 높일 수 있음.

    • 프로그램 구조화:
      추상클래스를 사용하면 프로그램의 구조를 논리적으로 나눌 수 있음. 공통된 부분을 추상클래스에 두고, 각 서브클래스에서는 그에 특화된 부분을 구현함으로써 코드를 모듈화하고 관리하기 쉬움.
      간단히 말하면, 추상클래스는 코드의 일관성, 유지보수성, 확장성을 향상시키기 위해 사용.

출처 : 제로베이스 데이터분석스쿨

profile
뭐가 됐든 데이터분석가

0개의 댓글