λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

🐍 Python/OOP

[OOP] (3) λ©”μ†Œλ“œμ˜ μ’…λ₯˜ : μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ, 클래슀 λ©”μ†Œλ“œ, 정적 λ©”μ†Œλ“œ (with 파이썬 μ½”λ“œ) & νŠΉμˆ˜λ©”μ†Œλ“œ

HelloπŸ‘‹ I'm Dona!:)

객체 지ν–₯ν”„λ‘œκ·Έλž˜λ° μ˜μ–΄λ‘œλŠ” OOP(Object-Oriented-Programming) μ •λ¦¬ν•˜κΈ° 3탄! 🏑


객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ, 클래슀 μ•ˆμ—μ„œ μ‚¬μš©λ˜λŠ” ν•¨μˆ˜μΈ λ©”μ†Œλ“œμ˜ μ’…λ₯˜μ—λŠ” 크게 3가지가 μžˆλ‹€.

  1. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 값을 μ½κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œμΈ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ(instance method)
  2. 클래슀 λ³€μˆ˜μ˜ 값을 μ½κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œμΈ 클래슀 λ©”μ†Œλ“œ(class method)
  3. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 클래슀 λ³€μˆ˜λ₯Ό μ „ν˜€ 닀루지 μ•ŠλŠ” λ©”μ†Œλ“œμΈ 정적 λ©”μ†Œλ“œ(static method)

μ°¨κ·Όμ°¨κ·Ό μ½”λ“œμ™€ ν•¨κ»˜ μ•Œμ•„λ³΄μžπŸ‘€

1. μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ(instance method)

  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜[각주:1]의 값을 μ½κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œ
  • μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 (2번 방법을 많이 μ‚¬μš©ν•œλ‹€)
    1. {클래슀 이름}.{λ©”μ†Œλ“œ 이름}({μΈμŠ€ν„΄μŠ€}) : ν΄λž˜μŠ€μ—μ„œ λ©”μ†Œλ“œλ₯Ό 호좜
    2. {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}( ) : μΈμŠ€ν„΄μŠ€μ—μ„œ λ©”μ†Œλ“œλ₯Ό 호좜, κ΄„ν˜Έ μ•ˆμ€ λΉ„μš΄λ‹€. μ•žμ— μ–ΈκΈ‰ν•œ κ΄„ν˜Έ μ•ˆμ— νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ˜μ—ˆλ‹€κ³  μƒκ°ν•˜κ³  μƒλž΅ν•œλ‹€. ➑️ κ·Έλž˜μ„œ νŒŒμ΄μ¬μ—μ„œλŠ” μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ˜ 첫번째 νŒŒλΌλ―Έν„° 이름을 'self' 둜 μ“°κΈ°λ‘œ μ•½μ†ν–ˆλ‹€.

β“νŒŒλΌλ―Έν„°κ°€ 두 개 이상이면, ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ μžλ™μœΌλ‘œ 첫번째 νŒŒλΌλ―Έν„°(self )κ°€ λœλ‹€.

λ°”λ‘œ μ½”λ“œμ™€ ν•¨κ»˜ ν™•μΈν•΄λ³΄μž! πŸ‘€

class User:
    # μΈμŠ€ν„΄μŠ€λ₯Ό νŒŒλ¦¬λ―Έν„°λ‘œ λ°›λŠ” μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ˜ 값을 μ„€μ •ν•˜κ±°λ‚˜ 좜λ ₯
    def say_hello(self):
        print(f"μ•ˆλ…•ν•˜μ„Έμš”! μ €λŠ” {self.name}μž…λ‹ˆλ‹€.")
				
    # νŒŒλΌλ―Έν„°κ°€ 두 개 이상인 μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
    def login(self, my_email, my_password):
        if (self.email == my_email and self.password == my_password):
            print('둜그인 성곡, ν™˜μ˜ν•©λ‹ˆλ‹€')
        else:
            print('둜그인 μ‹€νŒ¨, μ—†λŠ” μ•„μ΄λ””μ΄κ±°λ‚˜ 잘λͺ»λœ λΉ„λ°€λ²ˆν˜Έμž…λ‹ˆλ‹€.')

# User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
user1 = User()

# μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜ : μΈμŠ€ν„΄μŠ€ μžμ‹ λ§Œμ˜ 속성
# {μΈμŠ€ν„΄μŠ€ 이름}.{μΈμŠ€ν„΄μŠ€ λ³€μˆ˜} = {μΈμŠ€ν„΄μŠ€ 이름}.{속성 이름}
user1.name = 'dona'
user1.email = 'iminj1995@gmail.com'
user1.password = '1234'

## μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°
# 1. {클래슀 이름}.{λ©”μ†Œλ“œ 이름}({μΈμŠ€ν„΄μŠ€})
User.say_hello(user1) # out : μ•ˆλ…•ν•˜μ„Έμš”! μ €λŠ” donaμž…λ‹ˆλ‹€.

# 2. {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}( ) : κ΄„ν˜Έ μ•ˆμ€ κΌ­ λΉ„μš°κΈ°! 
user1.say_hello() # out : μ•ˆλ…•ν•˜μ„Έμš”! μ €λŠ” donaμž…λ‹ˆλ‹€.
# κ΄„ν˜Έ μ•ˆμ„ μ±„μš°λ©΄ errorκ°€ λ‚œλ‹€. 
user1.say_hello(user1) # TypeError: say_hello() takes 1 positional argument but 2 were given

## νŒŒλΌλ―Έν„°κ°€ λ‘κ°œ 이상인 μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°
# μžκΈ°μžμ‹ μΈ selfλŠ” κΌ­ λΉ„μ›Œμ€€λ‹€.
user1.login('iminj1995@gmail.com', '1234') # out : 둜그인 성곡, ν™˜μ˜ν•©λ‹ˆλ‹€
user1.login(user1, 'iminj1995@gmail.com', '1234') # out : TypeError: login() takes 3 positional arguments but 4 were given

μ½”λ“œμ—μ„œ λ³Ό 수 μžˆλ“―, {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}(μΈμŠ€ν„΄μŠ€)의 ν˜•νƒœλ‘œ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  λ•Œ κ΄„ν˜Έ μ•ˆμ— μΈμŠ€ν„΄μŠ€λ₯Ό λ„£μœΌλ©΄ 인수의 개수λ₯Ό μ΄ˆκ³Όν•˜μ˜€λ‹€λŠ” error 메세지가 λœ¬λ‹€. 항상 μ£Όμ˜ν•˜μž!


πŸ” 특수 λ©”μ†Œλ“œ(magic method)

클래슀 λ©”μ†Œλ“œλ‘œ λ„˜μ–΄κ°€κΈ° 전에, μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ μ–ΈκΈ‰ν–ˆμ—ˆλ˜ 특수 λ©”μ†Œλ“œμ— λŒ€ν•΄ μ•Œμ•„λ³΄μž.(맀우 μ€‘μš”ν•˜λ‹€)

  • 특수 λ©”μ†Œλ“œλŠ” magic method, special method, double underscore, dunder method λ“± λ‹€μ–‘ν•˜κ²Œ 뢈리며, 특수 μƒν™©μ—μ„œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λ©”μ†Œλ“œλ₯Ό λ§ν•œλ‹€.
  • 특수 λ©”μ†Œλ“œμ˜ μ’…λ₯˜λŠ” μ—¬λŸ¬κ°€μ§€κ°€ μžˆλŠ”λ°, ν•΄λ‹Ή ν¬μŠ€νŒ…μ—μ„œλŠ” 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄μ„œ κΌ­ μ•Œμ•„μ•Όν•˜λŠ” __init__λ©”μ†Œλ“œμ™€ __str__λ©”μ†Œλ“œ λ‘κ°€μ§€λ§Œ 닀루어본닀.

 

πŸ“Ž __ init __ λ©”μ†Œλ“œ [이닛 λ©”μ†Œλ“œ]

  • μΈμŠ€ν„΄μŠ€κ°€ 생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœν•˜λŠ” λ©”μ†Œλ“œ
  • __init__λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ μ½”λ“œκ°€ 훨씬 간결해짐을 λŠλ‚„ 수 μžˆλ‹€. πŸ‘
    '''이전에 μ‚¬μš©ν–ˆλ˜ μ½”λ“œμ™€ ν•¨κ»˜ __init__λ©”μ†Œλ“œμ˜ νŽΈλ¦¬ν•¨μ„ 느껴보자!'''
    # κΈ°μ‘΄ μ½”λ“œ
    class User:
        pass
    
    # User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
    user1 = User()
    
    # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜ : μΈμŠ€ν„΄μŠ€ μžμ‹ λ§Œμ˜ 속성
    user1.name = 'dona'
    user1.email = 'iminj1995@gmail.com'
    user1.password = '1234'
    
    # ----------------------------------------------------------------------
    # __init__λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•œ μ½”λ“œ
    class User:
        def __init__(self, name, email, password):
            self.name = name
            self.email = email
            self.password = password
    
    # User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성 + μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜
    user1 = User('dona', 'iminj1995@gmail.com', '1234')
    
    # ----------------------------------------------------------------------
    '''__init__λ©”μ†Œλ“œκ°€ μ•„λ‹Œ λ©”μ†Œλ“œλ‘œ μ •μ˜ν•΄μ€€λ‹€λ©΄ μ•„λž˜μ™€ 같이 μž‘μ„±μ΄ κ°€λŠ₯ν•˜λ‹€.
    __init__λ©”μ†Œλ“œ 처럼 μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜κΉŒμ§€ λ°”λ‘œ ν•  수 μ—†κΈ°λ•Œλ¬Έμ— μ½”λ“œκ°€ 더 길어진닀.'''
    class User:
        def initialize(self, name, email, password):
            self.name = name
            self.email = email
            self.password = password
    
    # User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
    user1 = User()
    # μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜
    user1.initialize('dona', 'iminj1995@gmail.com', '1234')​

 

πŸ“Ž __ str__ λ©”μ†Œλ“œ [λ˜λ” μ—μŠ€ν‹°μ•Œ]

  • print ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œ, μžλ™μœΌλ‘œ 호좜
  • μΈμŠ€ν„΄μŠ€λ₯Ό 좜λ ₯ν•  λ•Œ μš°λ¦¬κ°€ μ›ν•˜λŠ” 정보λ₯Ό printν•˜κ³  싢을 λ•Œ μ‚¬μš©
    class User:
        def __init__(self, name, email, password):
            self.name = name
            self.email = email
            self.password = password
            
        def __str__(self):
            return f"μ‚¬μš©μž: {self.name}, 이메일: {self.email}, λΉ„λ°€λ²ˆν˜Έ: ****"
    
    # User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성 + μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ •μ˜
    user1 = User('dona', 'iminj1995@gmail.com', '1234')
    
    # print instance
    print(user1)
    # out : μ‚¬μš©μž: dona, 이메일: iminj1995@gmail.com, λΉ„λ°€λ²ˆν˜Έ: ****​

2. 클래슀 λ©”μ†Œλ“œ(class method)

      • 클래슀 λ³€μˆ˜[각주:2]의 값을 μ½κ±°λ‚˜ μ„€μ •ν•˜λŠ” λ©”μ†Œλ“œ
      • 클래슀 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 : μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ μ‚¬μš©λ²•κ³Ό λ‹€λ₯΄κ²Œ, λ‘˜ λ‹€ 첫번째 νŒŒλΌλ―Έν„°λ‘œ 클래슀 μžλ™ 전달함
         βž‘️ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ, κ·Έλž˜μ„œ νŒŒμ΄μ¬μ—μ„œλŠ” 클래슀 λ©”μ†Œλ“œμ˜ 첫번째 νŒŒλΌλ―Έν„° 이름을 'cls'(class의 μ•½μž) λ‘œ μ“°κΈ°λ‘œ μ•½μ†ν–ˆλ‹€.  
        1. {클래슀 이름}.{λ©”μ†Œλ“œ 이름}( )
        2. {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}( )
      • 클래슀 λ©”μ†Œλ“œλ₯Ό λ§Œλ“€ λ•ŒλŠ”, @classmethod λΌλŠ” λ°μ½”λ ˆμ΄ν„°[각주:3]λ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

3. 정적 λ©”μ†Œλ“œ(static method)

  • μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 클래슀 λ³€μˆ˜λ₯Ό μ „ν˜€ 닀루지 μ•ŠλŠ” λ©”μ†Œλ“œ
  • λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•œ self, 클래슀 λ©”μ†Œλ“œμ—μ„œ μ‚¬μš©ν•œ cls와 같이 μ „λ‹¬λ˜λŠ” νŒŒλΌλ―Έν„°κ°€ μ—†λ‹€.
  • μ–΄λ– ν•œ 속성을 닀루지 μ•Šκ³ , 단지 κΈ°λŠ₯(행동)적인 μ—­ν• λ§Œ ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©
  • 정적 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법 : μΈμŠ€ν„΄μŠ€, 클래슀λ₯Ό ν†΅ν•΄μ„œ λͺ¨λ‘ μ‚¬μš© κ°€λŠ₯
    1. {클래슀 이름}.{λ©”μ†Œλ“œ 이름}( )
    2. {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}( )
  • 정적 λ©”μ†Œλ“œλ₯Ό λ§Œλ“€ λ•ŒλŠ”, 클래슀 λ©”μ†Œλ“œμ™€ λΉ„μŠ·ν•˜κ²Œ @staticemethod λΌλŠ” λ°μ½”λ ˆμ΄ν„° ν•¨μˆ˜λ₯Ό ν‘œμ‹œν•΄μ£Όμ–΄μ•Όν•œλ‹€.

πŸ’» 클래슀 λ©”μ†Œλ“œμ™€ 정적 λ©”μ†Œλ“œλ₯Ό 같이 μ½”λ“œλ‘œ μ •λ¦¬ν•΄λ³΄μž

class User:
    # 클래슀 λ³€μˆ˜ μ •μ˜
    count = 0

    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password
        User.count += 1

    def __str__(self):
        return f"μ‚¬μš©μž 이름 : {self.name}, 이메일 : {self.email}"

    # 클래슀 λ©”μ†Œλ“œ : 클래슀λ₯Ό νŒŒλ¦¬λ―Έν„°λ‘œ λ°›λŠ” 클래슀 λ©”μ†Œλ“œ, 클래슀 λ³€μˆ˜μ˜ 값을 μ„€μ •ν•˜κ±°λ‚˜ 좜λ ₯
    @classmethod
    def number_of_users(cls):
        print(f"총 μœ μ €μˆ˜λŠ” {cls.count}μž…λ‹ˆλ‹€.")

    # 정적 λ©”μ†Œλ“œ : κΈ°λŠ₯적인 μ—­ν• λ§Œ ν•œλ‹€, μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‚˜ 클래슀 λ³€μˆ˜ λ‘˜ λ‹€ μ‚¬μš©ν•˜μ§€ μ•Šμ„ λ•Œ
    @staticmethod
    def is_valid_email(email):
        '''νŒŒλΌλ―Έν„°λ‘œ 받은 email에 @이 λ“€μ–΄μžˆλŠ”μ§€ 확인'''
        return "@" in email

# User 클래슀의 μΈμŠ€ν„΄μŠ€ 생성
user1 = User('dona', 'iminj1995@gmail.com', '1234')
user2 = User('salmon', 'salmon@gmail.com', '3456')
user3 = User('lee_king_hee', 'kayyounghl@gmail.com', '5678')
user4 = User('teco', 'teco@gmail.com', '6789')

# 클래슀 λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°
# {클래슀 이름}.{λ©”μ†Œλ“œ 이름}( ), {μΈμŠ€ν„΄μŠ€ 이름}.{λ©”μ†Œλ“œ 이름}( ) 두 방법 λͺ¨λ‘ κ°€λŠ₯
User.number_of_users() # out : 총 μœ μ €μˆ˜λŠ” 4μž…λ‹ˆλ‹€.
user1.number_of_users() # out : 총 μœ μ €μˆ˜λŠ” 4μž…λ‹ˆλ‹€.

# μ •μ λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ° : 클래슀 μΈμŠ€ν„΄μŠ€ λͺ¨λ‘ μ‚¬μš© κ°€λŠ₯
print(User.is_valid_email('hello')) # out : False
print(user1.is_valid_email('hello@tistory.com')) # out : True

πŸ“Ž 총 정리 : μ μ ˆν•œ λ©”μ†Œλ“œ μ‚¬μš©ν•˜κΈ°

  1. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€ 
    ➑️ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
  2. μΈμŠ€ν„΄μŠ€ 없이도 ν•„μš”ν•œ 정보가 μžˆλ‹€ : μ½”λ“œ μ˜ˆμ‹œμ—μ„œ User ν΄λž˜μŠ€μ—μ„œ μœ μ €κ°€ λͺ‡λͺ…인지λ₯Ό μ•Œλ €μ£ΌλŠ” countλŠ” μΈμŠ€ν„΄μŠ€κ°€ ν•˜λ‚˜λ„ 없더라도 0λͺ…μ΄λΌλŠ” 정보가 ν•„μš”ν•¨! (클래슀 λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 이유)
    ➑️ 클래슀 λ©”μ†Œλ“œ (μΈμŠ€ν„΄μŠ€κ°€ ν•˜λ‚˜λ„ 없어도 μ‚¬μš© κ°€λŠ₯)
  3. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 클래슀 λ³€μˆ˜ 쀑 아무것도 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€. κΈ°λŠ₯적인 μ—­ν• λ§Œ ν•˜λŠ” λ©”μ†Œλ“œκ°€ ν•„μš”ν•˜λ‹€
    ➑️ 정적 λ©”μ†Œλ“œ
  4. μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μ™€ 클래슀 λ³€μˆ˜ λͺ¨λ‘ μ‚¬μš© : μ•„λž˜ μ½”λ“œ μ˜ˆμ‹œμ—μ„œ __init__ λ©”μ†Œλ“œ
    ➑️ μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ (μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ ,클래슀 λ³€μˆ˜ λͺ¨λ‘ μ‚¬μš© κ°€λŠ₯)
'''각 λ©”μ†Œλ“œ 총정리 example'''
class User:
    # 클래슀 λ³€μˆ˜ μ •μ˜
    count = 0

    # μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œ
    '''μΈμŠ€ν„΄μŠ€ λ³€μˆ˜μΈ self.name, self.email, self.password
    클래슀 λ³€μˆ˜μΈ User.count μ‚¬μš©'''
    def __init__(self, name, email, password):
        self.name = name
        self.email = email
        self.password = password
        User.count += 1

    # 클래슀 λ©”μ†Œλ“œ
    '''클래슀 λ³€μˆ˜μΈ cls.count μ‚¬μš©'''
    @classmethod
    def number_of_users(cls):
        print("총 μœ μ € μˆ˜λŠ”: {}μž…λ‹ˆλ‹€".format(cls.count))

    # 정적 λ©”μ†Œλ“œ
    '''μΈμŠ€ν„΄μŠ€ λ³€μˆ˜, 클래슀 λ³€μˆ˜ 아무 것도 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ'''
    @staticmethod
    def is_valid_email(email_address):
        return "@" in email_address

πŸ“Ž Reference

🏑 ν•΄λ‹Ή λΈ”λ‘œκ·Έ OOP series


πŸ“Ž 각주

  1. μΈμŠ€ν„΄μŠ€ μžμ‹ λ§Œμ˜ 속성(Attribute), κ³ μœ ν•œ λ³€μˆ˜λ₯Ό λ§ν•œλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ 확인이 κ°€λŠ₯ν•˜λ‹€.  [본문으둜]
  2. 같은 클래슀의 λͺ¨λ“  μΈμŠ€ν„΄μŠ€λ“€μ΄ κ³΅μœ ν•˜λŠ” 속성을 λ§ν•œλ‹€. μžμ„Έν•œ λ‚΄μš©μ€ μ§€λ‚œ ν¬μŠ€νŒ…μ—μ„œ 확인이 κ°€λŠ₯ν•˜λ‹€.  [본문으둜]
  3. ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μ•„μ„œ, ν•¨μˆ˜λ₯Ό return ν•΄μ£ΌλŠ” ν•¨μˆ˜λ‘œ, 기쑴의 ν•¨μˆ˜μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•œλ‹€κ³  μ΄ν•΄ν•˜λ©΄ 쉽닀. μΆ”ν›„ ν¬μŠ€νŒ… μ˜ˆμ •μ΄λ‚˜ ν•„μžκ°€ κ³΅λΆ€ν•˜λ©΄μ„œ μ°Έκ³ ν•œ λΈ”λ‘œκ·ΈλŠ” μ—¬κΈ°λ₯Ό 클릭 [본문으둜]