[Python] 10강 - 객체지향

2025. 4. 18. 18:01·공부/⚡Python

1. 객체지향의 이해

2.. 클래스와 인스턴스

3. 객체지향의 활용

 

1. 객체지향의 이해

(1) 객체지향의 개념

 - 객체와 객체 사이의 상호작용으로 프로그램을 구성하는 프로그래밍 패러다임을 의미한다.

 - 프로그램을 유연하고 변경을 쉽게 만들어 대규모 소프트웨어 개발에 사용을 함.

[1] 객체지향 패러다임의 특징

 - 추상화 : 공통의 속성이나 기능을 도출

 - 캡슐화 : 데이터 구조와 데이터의 연산을 결합

 - 상속 : 상위 개념의 특징이 하위 개념에 전달

 - 다형성 : 유사 객체의 사용성을 그대로 유지

 

(2) 객체와 클래스

[1] 객체 정의

- 객체는 추상화와 캡슐화의 결과를 의미한다.

 - 실세계의 사물에 대한 상태(데이터)와 연산(메소드)을 표현한 단위를 말한다.

 - 멤버(데이터 필드, 메소드)는 클래스에 의해 결정이 된다.

[2] 클래스 정의

 - 클래스는 객체를 만들어 내기 위한 설계도면으로 볼 수 있다.

 - 쉽게 말해, 클래스의 여러 복사본들을 객체라고 볼 수 있음. 즉, 원본(설계도)으로 볼 수 있음.

 - 클래스에서는 메소드와 초기자가 존재함.

[3] 메소드(method)

 - 객체에 대한 행동(연산)을 정의

 - 함수의 정의 및 사용 방법과 동일함.

 - 클래스 내부에 함수가 있으면 그것을 메서드라고 부름.

[4] 초기자(initializer)

 - 객체의 상태를 초기화하는 특수 메소드를 의미한다.

 - 항상 __init__으로 명명함

 - 자바에선 생성자로 볼 수 있음.

 

(3) 파이썬 객체 & 클래스 구문 형식

 - 클래스 내부에 메소드들을 정의 할 수 있음. 이때, 메소드는 단순히 클래스 내부의 함수를 의미함.

class Calculator: # 클래스 정의
  def add(self, a, b):
    print(a + b)
  def minus(self, a, b):
    print(a - b)

calculator = Calculator() # 객체 생성
calculator.add(1, 2) # 생성 된 객체 메소드 호출

calculator = Calculator() # 또 다른 객체 생성
calculator.minus(2, 1) # 생성 된 객체 메소드 호출

 - Calculator 클래스를 호출해서 메서드를 부르는 부분은 

 

(4) 메소드의 정의

 - 클래스 내부의 정의 되어있는 함수를 메소드라고 말한다.

[1] self 매개변수

 - 해당 매개변수는 self 자기 자신 즉, 해당 클래스의 정보를 담고있다.

 - self 매개변수 사용시에는 모든 메소드의 첫번째 매개변수로 써야한다.

 - 객체 자신을 참조하여 클래스 정의에 포함된 멤버에 접근 시 사용한다.

class test:
  def abc(self): # 함수 호출시 자동으로 self에 해당 클래스를 넘겨줌
   self.age = 100
   print(self.a)

test().abc()

 - self는 여러 객체들이 있을때, 각각의 고유값을 저장할 수 있음.

 

(5) 초기자(생성자)

 - 초기자는 객체를 생성하는 과정에서 매개변수로 값을 넣으면, __init__ 메서드(함수)가 호출이 되며 값을 초기화 할 수 있다.

 - 사실상 생성자를 초기자라고 부른다. ( __init__ 메서드 임. )

class User:
    def __init__(self, name, age):
        self.name = name  # 멤버 변수에 전달받은 값 저장
        self.age = age

    def introduce(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고 나이는 {self.age}살이에요.")

# 객체 생성하면서 초기자 자동 호출됨
user1 = User("이름", 28)
user1.introduce()

 


2. 데이터 필드 감추기

(1) 데이터 은닉(data hiding)

 - 데이터 필드의 직접 변경을 방지하기 위해 사용자의 직접적 접근을 차단할 수 있음.

 - pulbic과 다른 private 데이터 필드로 정의

 - 클래스 내부에서만 접근이 가능하게 만들 수 있음.

 - 앞 두 밑줄(__)로 정의 하면 된다.

- setter와 getter를 활용하여 값을 변경 할 수 있다. ( 그냥 단순히 내부에서 접근하는 함수이다. )

class User:
  
  def __init__(self, name, age):
    self.__name = name # 접근은 해당 클래스에서만 가능
    self.__age = age

  def get_name(self): # 가능하게 만들기 위해 getter를 활용
    return self.__name
  
  def get_age(self):
    return self.__age

user = User("junbin", 20)
print(user.get_name())
print(user.get_age())

 

(2) 데이터 은닉 사용하는 이유

 - 외부에서 직접 데이터를 수정하면, 객체 상태가 예상치 못하게 변경될 위험이 있음.

 - 나중에 내부 로직을 바꿔도 외부 인터페이스(get, set 메서드)는 그대로 두면 되므로 유지보수가 쉬워짐.

 - 변수마다 읽기 전용이나 쓰기 전용처럼 동작하게 만들 수 있음.

 


3. 정리

 - 파이썬의 모든 것은 객체(Object) 이다.

num = 1
print(type(num))  # 결과 : <class 'int'>
# 즉, num = int(1) 형태인 것인데 생략이 된것이다.

 - num = int(1) 과 num = 1 은 같은 형태이고, 파이썬이 내부적으로 저렇게 만들어 주는 것이다.

 - 즉, 파이썬은 모든 것이 객체이다.

'공부 > ⚡Python' 카테고리의 다른 글

[Python] import  (0) 2025.04.21
[Python] 11강 - 모듈  (0) 2025.04.21
[Python] 9강 - 함수  (0) 2025.04.17
[Python] 파이썬 인터프리터(Interperter) 쉽게 이해하기  (1) 2025.04.17
[Python] 7강 - 반복 구조  (0) 2025.04.17
'공부/⚡Python' 카테고리의 다른 글
  • [Python] import
  • [Python] 11강 - 모듈
  • [Python] 9강 - 함수
  • [Python] 파이썬 인터프리터(Interperter) 쉽게 이해하기
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    spring
    그래프
    방송대
    C언어
    함수
    유비쿼터스
    자바
    알고리즘
    컴퓨터과학과
    방송통신대학교
    Python
    Java
    방통대
    컴퓨터의 이해
    자료구조
    배열
    컴퓨터과학 개론
    운영체제
    이산수학
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[Python] 10강 - 객체지향
상단으로

티스토리툴바