[Python] 10κ°• - 객체지ν–₯

2025. 4. 18. 18:01Β·πŸ› οΈBackend/⚑Python
λͺ©μ°¨
  1. 1. 객체지ν–₯의 이해
  2. 2. 데이터 ν•„λ“œ 감좔기
  3. 3. 정리

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 은 같은 ν˜•νƒœμ΄κ³ , 파이썬이 λ‚΄λΆ€μ μœΌλ‘œ μ €λ ‡κ²Œ λ§Œλ“€μ–΄ μ£ΌλŠ” 것이닀.

 - 즉, νŒŒμ΄μ¬μ€ λͺ¨λ“  것이 객체이닀.

'πŸ› οΈBackend > ⚑Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Python] 12κ°• - 파일  (0) 2025.04.23
[Python] 11κ°• - λͺ¨λ“ˆ  (0) 2025.04.21
[Python] 9κ°• - ν•¨μˆ˜  (0) 2025.04.17
[Python] 파이썬 인터프리터(Interperter) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°  (1) 2025.04.17
[Python] 7κ°• - 반볡 ꡬ쑰  (0) 2025.04.17
  1. 1. 객체지ν–₯의 이해
  2. 2. 데이터 ν•„λ“œ 감좔기
  3. 3. 정리
'πŸ› οΈBackend/⚑Python' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [Python] 12κ°• - 파일
  • [Python] 11κ°• - λͺ¨λ“ˆ
  • [Python] 9κ°• - ν•¨μˆ˜
  • [Python] 파이썬 인터프리터(Interperter) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    였늘
    μ–΄μ œ
    • 전체보기 (156) N
      • πŸŽ“λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅ (26)
        • πŸ–₯️컴퓨터과학과 (1)
        • πŸŒμœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ… (11)
        • βš™οΈμ»΄ν“¨ν„°μ˜ 이해 (11)
        • πŸ›οΈμ„Έκ³„μ˜μ •μΉ˜μ™€κ²½μ œ (3)
      • πŸ› οΈBackend (53) N
        • πŸ“šλ°±μ—”λ“œ 곡뢀 (4)
        • β˜•Java (22) N
        • 🌳Spring (11)
        • ⚑Python (13)
        • JavaScript (1)
        • πŸ›’οΈDatabase (0)
        • Algorithm Problem Solving (2)
      • 🌐 Network (7)
        • πŸ“œHTTP (7)
      • πŸš€DevOps (1)
      • Data Structure (1)
      • β›ΊμŠ€νŒŒλ₯΄νƒ€μ½”λ”©ν΄λŸ½ (65)
      • 정보 (1)
      • 정리가 ν•„μš”ν•œ κΈ€ (2)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

    • GitHub
  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    λ°©μ†‘λŒ€
    컴파일러
    파이썬
    μž…μΆœλ ₯
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…
    μ»΄ν“¨ν„°μ˜ 이해
    세계화
    Java
    μŠ€ν”„λ§
    ν΄λΌμš°λ“œ
    λ°©ν†΅λŒ€
    Python
    μœ λΉ„μΏΌν„°μŠ€ μ»΄ν“¨νŒ…κ°œλ‘ 
    λ°©μ†‘ν†΅μ‹ λŒ€ν•™κ΅
    spring
    Spring Framework
    μœ λΉ„μΏΌν„°μŠ€
    λ‹€ν˜•μ„±
    클래슀
    μžλ°”
  • 졜근 λŒ“κΈ€

  • 졜근 κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.1
junbin2
[Python] 10κ°• - 객체지ν–₯

κ°œμΈμ •λ³΄

  • ν‹°μŠ€ν† λ¦¬ ν™ˆ
  • 포럼
  • 둜그인
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.