8일차

Kangdh·2026년 8월 22일

파이썬 교육

목록 보기
8/33

- 파이썬 클래스

클래스는 데이터(속성)와 기능(메소드)을 함께 묶는 방법을 뜻한다. 이렇게 묶어 동일한 무언가를 계속해서 만들어 낼 수 있는 형태이며 만들어낸 객체들은 모두 고유한 성격을 가진다.
클래스는 객체지향 프로그래밍(OOP)의 핵심 개념으로, 코드를 구조화,모듈화 하여 유지보수성을 향상하고 코드 재사용을 촉진하는 듯 다양한 장점들이 있다.

조금 간단한 예로 게임 캐릭터를 클래스(Class)라고 표현한다면 Class가 하는 공격을 기능(method)라고 하고 해당 Class가 갖는 공격력,방어력 등이 속성(attribute)라고 할 수 있다.

OOP 특징

- 추상화

추상의 사전적 의미는 불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현한다는 뜻이다. OOP에서 말하는 추상화도 이와 크게 다른 뜻은 아닌데 예를 들면 자동차와 오토바이는 모두 이동 수단이며 전진과 후진이 가능하다는 공통점을 가지고 있다. 이런 공통적인 특징을 추출하여 이동수단이라는 슈퍼 클래스/부모 클래스로 정의할 수 있다.

- 캡슐화

캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것을 의미한다.
OOP에서 캡슐화를 하는 이유는 크게 두 가지가 있는데

  • [데이터 보호] : 외부로부터 클래스에 정의된 속성과 기능들을 보호
  • [데이터 은닉] : 내부의 동작을 감추고 외부에는 필요한 부분만 노출

- 다형성

다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질을 의미한다. 어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성을 의미하는데 대펴적인 예로 [메서드 오버라이딩]과 [메서드 오버로딩]이 있다.

-메소드 오버라이딩(method overriding)

부모 클래스(상속한 클래스)에 있는 메소드를 동일한 이름으로 다른 기능을 구현하는 것(덮어쓰기)

  • 부모 클래스의 메소드 대신 오버라이딩한 메소드가 호출됨
    조건 : 부모 클래스의 메소드를 재정의하는 것이므로, 자식 클래스에서는 오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야 한다.
-메소드 오버로딩(method overloading)

한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
조건 : 메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른것은 오버로딩을 할 수 없다.

- 상속

상속은 추상화의 연장선으로 클래스 간 공통될만한 요소를 상위 클래스로 추상화 시켜 해당 상위(부모/슈퍼) 클래스로부터 확장된 여러 개의 하위(자식/서브) 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 한다.
이말인 즉 같은 속성,기능들을 반복적으로 정의하지 않고 한 번만 정의하고 그걸 재사용함으로써 반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용할 수 있도록 한다.

====================================================================

- 클래스(Class)

사용자가 새로운 형태를 정의하는 것.

- 객체(Object)

새로운 형태를 가지고 만든 것.

- 인스턴스

클래스로 만든 객체, 특정 개체가 어떤 클래스의 객체인지를 관계 위주로 설명할 때 사용

- 멤버 변수

특정 개체와 연결된 변수의 하나

  • 해당 변수의 모든 메소드(멤버 함수)에 접근이 가능

- 메소드

클래스 내에 구현된 함수

  • 일반 함수와 기능적으로 다른건 없음
  • 파이썬 메서드의 첫 번째 매게변수 이름은 관례적으로 self를 사용한다 (다른 이름을 사용해도 상관 X)
  • self를 사용하면 인스턴스 변수와 인스턴스 메소드에 접근할 수 있다.

#### - 정적 메소드

  • 정적 메서드는 사용할때 @staticmethod를 메서드 위에 붙인다. 이때 정적 메서드는 매개변수 self를 지정하지 않는다.
    그래서 보통 정적 메서드는 인스턴스 속성, 인스턴스 메서드가 필요 없을 때 사용한다.

#### - 클래스 메소드

  • 클래스 메서드는 사용할때 @calssmethod를 붙인다. 정적 메서드와의 차이점은 메서드 안에서 클래스 속성, 클래스 메서드에 접근할 때 사용한다.

-생성자(constructor)

__init__()

객체가 생성될 때 자동으로 호출되는 메소드이며 객체에 초기값을 설정해줘야 할 필요가 있을 때 구현한다.

  • 생성자 없이 일단 정보 입력만 해두고 나중에 정보를 채울 수도 있다.
  • init은 초기화한다는 뜻의 initialize이다.

-상속(inheritance)

어떤 클래스를 만들때 다른 클래스의 기능을 물려받도록 만듬

  • 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경할때 사용
  • 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황일때 사용

-속성

  • 클래스 속성 : 클래스 속성은 self.속성에 할당하는 것이 아니라 class 안에서 바로 할당한다.

  • 인스턴스 속성 :self.속성에 할당했던 변수들은 모두 인스턴스 속성에 해당된다.

    -비공개 속성 / 네임 맹글링(name mangling)

  • 비공개 클래스 속성 : 비공개 클래스 속성은 인스턴스의 비공개 속성과 동일하며 언더스코어 두개(__)로 속성명이 시작하면 비공개 속성이 된다.
    이를 네임 맹글링이라고도 하며 외부에서 접근을 조금 힘들게 할때 사용한다. 다만 완벽한 비공개(private)는 없다.

====================================================================

오늘은 클래스에 관해 배웠다. OOP의 개념부터 시작해서 클래스,객체,인스턴스 등등

인스턴스와 객체의 개념은 내가 게임하던 경험에 빗대어 생각해보면 게임 장르중 디아블로나 월드오브 워크래프트 같은 RPG들은 인스턴스 던전이라는게 존재한다. 인스턴스 던전의 개념은 기존 던전을 비슷하게 복사하여 파티원들만 들어갈수 있게끔 되어있는 던전이다.

여기서 생각해볼수 있는게 클래스라는 맵이 있고 객체라는 던전이 있으면 인스턴스 던전은 이 객체를 기반으로 만들어진 새로운 던전이라는건데..오늘 배웠던 개념과 비교하면 꽤 비슷하다고 생각되어 클래스,객체,인스턴스만큼은 안까먹을수 있을거같다는 생각이 들었다.

그리고 OOP 특징 4가지인 추상화,캡슐화,상속,다형성같은 경우에는 학교에서 자바 수업을 들었을때 몇번 들었던 개념인데 상속과 캡슐화는 그때도 이해가 되서 어느정도 기억을 하고있어서 이해하는데 크게 어렵진 않았다. 추상화는 오늘 배우면서 추상화 - 상속과 연계하여 기억할 수 있다고 생각이 되었던게 추상화가 근본적인걸 뽑아내서 클래스로 만들고 이를 상속에서 부모-자식 클래스로 엮어서 쓸 수 있으니 추상화까진 이해가 빨랐지만 다형성은 아직 이해가 될 되어 집에가서 한번 더 봐야할거 같다.

이제 이 클래스라는 개념을 지금까지 배워왔던것들과 엮어서 사용해야한다는건데..이전에 배웠던 코드의 개념들은 어느정도 익숙해졌지만 코드를 짜는데 있어 여전히 어려움을 겪는다. 이번 주말에 시간을 좀 투자하여 개념들을 다시한번 정립하고 코드짜는 연습을 해야할거같다. 설령 쉬운 코드라도 한번 더 돌이켜보지않으면 까먹을거같아 처음부터 한번 싹 훑을 생각이다

0개의 댓글