IT ์•Œ์•„๊ฐ€๊ธฐ

[์ฝ”๋”ฉ ๊ธฐ์ดˆ] ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด - ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 1ํŽธ. ํด๋ž˜์Šค, ๊ฐ์ฒด, ๋ฉ”์„œ๋“œ, ์†์„ฑ ๋“ฑ์— ๋Œ€ํ•˜์—ฌ

์žก์‹๋ƒฅ์ด 2025. 2. 11. 13:34

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์•Œ์•„์•ผํ•˜๋Š” ์ด์œ  

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด(Object)๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ฌถ๊ณ , ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์„ OOP(Object Oriented Programming Language)๋ผ๊ณ  ํ•œ๋‹ค. 

 

Python, Java, C++, Kotlin ๋“ฑ ๋Œ€๋ถ€๋ถ„ ์šฐ๋ฆฌ๊ฐ€ ์ ‘ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์–ธ์–ด์— ๋Œ€ํ•ด์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๊ณตํ†ต ๊ฐœ๋…์œผ๋กœ ์žก๊ณ  ๊ฐ€๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด๊ฐ€ OOP์ธ ๊นŒ๋‹ญ์€ ์ด๋ฏธ ์“ด ์ฝ”๋“œ๋ฅผ ์ƒ์†/์บก์Аํ™” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ณ , ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

์šฐ์„  ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ OOP์™€ ๋ฐ˜๋Œ€๋˜๋Š” ์–ธ์–ด๋Š” ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(POP)๋ผ๊ณ  ํ•œ๋‹ค. ๋ช…๋ น์–ด ์ค‘์‹ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋˜์–ด ์žˆ์–ด ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์–ด๋ ต๊ณ , ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์–ด๋ ต๋‹ค๊ณ  ์•Œ๋ ค์ง„ C ์–ธ์–ด๊ฐ€ ๋ฐ”๋กœ ์ด ํ˜•ํƒœ์ด๋‹ค. 

๋Œ€ํ‘œ์ ์ธ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด, ํŒŒ์ด์ฌ!


๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•ต์‹ฌ ๊ฐœ๋… 

OOP๋Š” ๋ฐ์ดํ„ฐ๋ฅผ "๊ฐ์ฒด(Object)๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ฌถ๋Š”๋‹ค๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค. 

OOP์—์„œ ๋“ฑ์žฅํ•˜๋Š” ํ•ต์‹ฌ ์šฉ์–ด๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.  

Class (ํด๋ž˜์Šค) : ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„ 

Object (๊ฐ์ฒด) : ํด๋ž˜์Šค์—์„œ ๋งŒ๋“ค์–ด์ง„ ์‹ค์ฒด.

Attribute (์–ดํŠธ๋ฆฌ๋ทฐํŠธ) : ๊ฐ์ฒด์˜ ์†์„ฑ (๋ฐ์ดํ„ฐ)

Method (๋ฉ”์„œ๋“œ)  : ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘ (ํ•จ์ˆ˜)

 

 

์˜ˆ๋ฅผ๋“ค์–ด, ๋Œ€ํ‘œ์ ์ธ OOP์ธ ํŒŒ์ด์ฌ์—์„œ์˜ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ๊ฐœ๋…์„ ์ •์˜ํ•ด๋ณด์ž.

# ํด๋ž˜์Šค ์ •์˜
class Car:
    def __init__(self, brand, model):
        self.brand = brand          # ์–ดํŠธ๋ฆฌ๋ทฐํŠธ
        self.model = model          # ์–ดํŠธ๋ฆฌ๋ทฐํŠธ

    def drive(self):                # ๋ฉ”์„œ๋“œ
        return f"{self.brand} {self.model} is driving!"

# ๊ฐ์ฒด ์ƒ์„ฑ
car1 = Car("Toyota", "Corolla")
car2 = Car("Tesla", "Model S")

# ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ ‘๊ทผ ๋ฐ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
print(car1.brand)          # Toyota
print(car2.model)          # Model S
print(car1.drive())        # Toyota Corolla is driving!

 

1. ์šฐ์„ , ์ „๋ฐ˜์ ์ธ ์„ค๊ณ„๋„์ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์˜€๋‹ค. ํด๋ž˜์Šค๋Š” ํ˜„์‹ค์„ธ๊ณ„์˜ ์‚ฌ๋ฌผ์„ ์ฝ”๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” '์ž๋™์ฐจ'๋ผ๋Š” ์‚ฌ๋ฌผ์„ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด 'Car'์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” ์ƒ์„ฑ์ž(__init__)์™€ ๋ฉ”์„œ๋“œ(drive())๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

*๋ณดํ†ต ํด๋ž˜์Šค๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค. 

 

2. ์ƒ์„ฑ์ž(Constructor)๋Š” ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ, ์กฐ๊ธˆ์€ ํŠน๋ณ„ํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค. ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๋ฉฐ, ์ฃผ๋กœ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜(์†์„ฑ)์„ ์ดˆ๊ธฐํ™”๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค. ํŒŒ์ด์ฌ์—์„œ๋Š” __init__๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ๋Š” ์ƒ์„ฑ์ž์˜ ์ด๋ฆ„์ด ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ์˜ˆ์‹œ์—์„œ๋Š” __init ๋ฉ”์„œ๋“œ๋ฅผ ํด๋ž˜์Šค์—์„œ ์ฒซ๋ฒˆ์งธ๋กœ ์ •์˜ํ•˜์˜€๊ณ , ํ˜„์žฌ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ์šฉ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ self์™€ ์ž๋™์ฒด์— ๋Œ€ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ „๋‹ฌํ•  ๋ฐ์ดํ„ฐ๋“ค์ธ brand์™€ model์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด๊ฐ€์žˆ๋‹ค.  

2-1. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์ธ car1= Car("Toyota, "Corolla")๋ฅผ ํ†ตํ•ด์„œ ์ƒ์„ฑ์ž๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. Car()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด __init__๊ฐ€ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์‹คํ–‰๋œ๋‹ค. self๋Š” ์ฐธ์กฐ์šฉ์ด๋‹ˆ ๋„˜๊ธฐ๊ณ , Toyota๊ฐ€ brand์—, Corolla๊ฐ€ model์— ์ €์žฅ๋œ car1์ด๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ๊ฒจ๋‚œ๋‹ค.  

 

3. ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ž‘(ํ•จ์ˆ˜)์ด๋‹ค. ()๊ฐ€ ๋’ค์— ๋ถ™์–ด์žˆ์œผ๋ฉด ๋ฉ”์„œ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ์ข‹๋‹ค. ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ์ •์˜๋˜๊ณ , ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•ญ์ƒ self๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ฐ์ฒด ๋‚ด์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ๊ฐ์ฒด์ด๋ฆ„ ๋’ค์— .(dot)์„ ๋ถ™์ด๊ณ  ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ๋ถ™์—ฌ๋„ฃ์–ด๋ณด์ž. 

3-1. def drive(self): return f"{self.brand} {self.model} is driving!" ์ฝ”๋“œ๋ฅผ ๋ณด์ž. drive()๊ฐ€ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด๊ณ , ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ธŒ๋žœ๋“œ๋ช…+๋ชจ๋ธ๋ช…๊ณผ ํ•จ๊ป˜ ์šด์ „์ค‘์ด๋ผ๋Š” ๋ฉ˜ํŠธ๊ฐ€ ํ”„๋ฆฐํŠธ ๋  ๊ฒƒ์ด๋‹ค. 

3-2. print(car1.drive()) ์ฝ”๋“œ๋ฅผ ๋ณด์ž. car1 ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ .(dot)์„ ๋ถ™์ด๊ณ  drive()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋”ํ•˜๊ณ , ์ด๊ฒƒ์„ print()๋ผ๋Š” ํ”„๋ฆฐํŠธํ•˜๋ผ๋Š” ๊ธฐ๋ณธ ํŒŒ์ด์ฌ ๋ฉ”์„œ๋“œ์— ๋„ฃ์—ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์˜†์˜ Toyota Corolla is driving์œผ๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.  

 

4. ์–ดํŠธ๋ฆฌ๋ทฐํŠธ(Attribute)๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ(๋ฐ์ดํ„ฐ)๋กœ, ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ self๋ฅผ ํ†ตํ•ด์„œ ์ •์˜๋˜๋ฉฐ ๊ฐ์ฒด๋ณ„๋กœ ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. 

4-1. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์ฝ”๋“œ์—์„œ๋Š” car1 ๊ฐ์ฒด์˜ brand ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” Toyota์ด๊ณ , car2 ๊ฐ์ฒด์˜ model ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋Š” Model S๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ์œผ๋ฉด ์—ญ์‹œ print(car1.brand)์ฒ˜๋Ÿผ ๊ฐ์ฒด ๋’ค์— .(dot)์„ ๋ถ™์ด๊ณ  ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ถ™์ด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

4-2. ์ด๋ฏธ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์—, ์ƒˆ๋กœ์šด ์–ดํŠธ๋ฆฌ๋ทฐํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, car1์˜ ์ƒ‰์„ ๋นจ๊ฐ„์ƒ‰์ด๋ผ๊ณ  ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด car1.color = "Red" ๋ผ๊ณ  ํ•˜๋ฉด ์ถ”๊ฐ€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

์ด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ๊ฒŒ ๋œ ์ƒˆ๋กœ์šด OOP์— ๋Œ€ํ•œ ์šฉ์–ด๋“ค์„ ๋‹ค์‹œ ์ •๋ฆฌํ•ด๋ณด์ž! 

1. Variable vs Attribute

Variable (๋ณ€์ˆ˜): ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, OOP ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ „๋ฐ˜์—์„œ ํ™œ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์ด๋‹ค.

* Atrribute(์†์„ฑ): ์œ„์—์„œ ์†์„ฑ์€ ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด์˜ ์†์„ฑ(๋ฐ์ดํ„ฐ)๋ฅผ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ๋‹ค. ์ฆ‰ ์†์„ฑ์€ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ ์•ˆ, ํด๋ž˜์Šค ๋ฐ–์ด๋“  ์–ด๋””์„œ๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜ ์†์„ฑ์€ ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด ๋‚ด๋ถ€์— ์กด์žฌํ•œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 

* ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ ์ฝ”๋“œ์—์„œ x๋Š” ๊ทธ๋ƒฅ Variable์ด์ง€๋งŒ, self.name๊ณผ self.age๋Š” Person class์—์„œ ์ƒ์„ฑํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ์†์„ฑ(Attribute)์ธ ๊ฒƒ์ด๋‹ค. 

# ์ผ๋ฐ˜ ๋ณ€์ˆ˜
x = 10                 # ๊ทธ๋ƒฅ ๋ณ€์ˆ˜ (Variable)

# ํด๋ž˜์Šค์™€ ๊ฐ์ฒด์˜ ์†์„ฑ (Attribute)
class Person:
    def __init__(self, name, age):
        self.name = name           # name์€ ๊ฐ์ฒด์˜ ์†์„ฑ(Attribute)
        self.age = age                 # age๋„ ์†์„ฑ(Attribute)

 

2. Object vs Instance

ํด๋ž˜์Šค๊ฐ€ ์„ค๊ณ„๋„๋ผ๋ฉด ๊ฐ์ฒด(Object)๋Š” ์„ค๊ณ„๋„๋กœ ๋งŒ๋“  ์ œํ’ˆ์ด๋ผ๊ณ  ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋‹ค. ์ธ์Šคํ„ด์Šค(Instance)๋Š” ํด๋ž˜์Šค๋ผ๋Š” ์„ค๊ณ„๋„๋กœ ๋งŒ๋“  ๊ตฌ์ฒด์ ์ธ ์‹ค์ฒด(๊ฐ์ฒด)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์‹ค์ œ๋กœ ๋‘˜์€ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๊ฐœ๋…์ ์œผ๋กœ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•˜๋‹ค. 

 

3. Parameter(๋งค๊ฐœ๋ณ€์ˆ˜)์™€  Argument(์ธ์ž)

๋‘˜์€ ๋ฉ”์„œ๋“œ ์–˜๊ธฐํ•˜๋‹ค๊ฐ€ ๋‚˜์˜จ ๊ฐœ๋…์ด๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ๋ฐ›์„ ๊ฐ’์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ธ์ž๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์‹ค์ œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค. 

์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” name์ด ๋งค๊ฐœ๋ณ€์ˆ˜, Bob์ด ์ธ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

def greet(name):       # 'name'์€ ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter)
    print(f"Hello, {name}!")

greet("Bob")            # "Bob"์€ ์ธ์ž(Argument)

 


๋‹ค์Œ ํŽธ์—๋Š” OOP ์–ธ์–ด๋“ค์˜ ์žฅ์ ์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค!  

์บก์Аํ™” / ์ƒ์† / ๋‹คํ˜•์„ฑ / ์ถ”์ƒํ™”

 

728x90