hhnn_soph

[Java] μžλ°” 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€? λ³Έλ¬Έ

Language/Java

[Java] μžλ°” 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€?

hhnn_soph 2021. 9. 13. 00:59

πŸ“™ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP: Object Oriednted Programming)

- λΆ€ν’ˆμ— ν•΄λ‹Ήν•˜λŠ” 객체듀을 λ¨Όμ € λ§Œλ“€κ³  각 κ°œμ²΄λ“€μ„ ν•˜λ‚˜μ”© 쑰립해 μ™„μ„±λœ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“œλŠ” 기법

 

이λ₯Ό 더 μžμ„Ένžˆ μ•ŒκΈ° μœ„ν•΄μ„  μžλ°”μ—μ„œμ˜ 객체와 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ΄λž€ 무엇인지 λ¨Όμ € μ•Œμ•„μ•Ό ν•œλ‹€!

 

1. 객체

- μžμ‹ μ˜ 속성을 κ°€μ§€κ³  있고 λ‹€λ₯Έ 것과 식별 κ°€λŠ₯ν•œ λͺ¨λ“  것

  (ex. 물리적: μžλ™μ°¨, μžμ „κ±°, μ±…, μ‚¬λžŒ λ“± // 좔상적: κ°•μ˜, ν•™κ³Ό, μ£Όλ¬Έ λ“±)

- κ°μ²΄λŠ” 속성과 λ™μž‘μœΌλ‘œ ꡬ성

  (ex. 속성: 이름, λ‚˜μ΄, 색상, λͺ¨λΈλͺ… // λ™μž‘: κ±·λ‹€, 웃닀, 달린닀, λ©ˆμΆ˜λ‹€)

- μžλ°”μ—μ„œμ˜ 속성은 ν•„λ“œ(field), λ™μž‘μ€ λ©”μ„œλ“œ(method)둜 ν‘œν˜„

 

2. 객체의 μƒν˜Έμž‘μš©

- 각 κ°œμ²΄λŠ” 독립적이며 λ‹€λ₯Έ 객체와 μ„œλ‘œ μƒν˜Έμž‘μš©ν•˜λ©΄μ„œ λ™μž‘

- μžλ°”μ—μ„œμ˜ 객체의 μƒν˜Έμž‘μš©μ΄λž€ 객체 κ°„μ˜ λ©”μ„œλ“œ ν˜ΈμΆœμ„ 의미. λ§€κ°œκ°’κ³Ό 리턴값을 톡해 데이터λ₯Ό μ£Όκ³ λ°›μŒ

- λ©”μ„œλ“œ(method): μžλ°”μ—μ„œ κ°μ²΄λ“€κ³Όμ˜ μƒν˜Έμž‘μš© μˆ˜λ‹¨

- λ©”μ„œλ“œ 호좜

  : 객체가 λ‹€λ₯Έ 객체의 κΈ°λŠ₯을 μ΄μš©ν•˜λŠ” 것

  : 객체에 λ„νŠΈ μ—°μ‚°μž( . )λ₯Ό 뢙이고 λ©”μ„œλ“œ 이름을 μž‘μ„±

<μ„€λͺ…>
리턴값 = 객체.λ©”μ†Œλ“œλͺ…(λ§€κ°œκ°’1, λ§€κ°œκ°’2, ...);

<ex>
int result = Calculator.add(10, 20);
// 리턴값을 int λ³€μˆ˜μ— μ €μž₯
// 리턴값? λ©”μ†Œλ“œκ°€ μ‹€ν–‰ν•˜κ³  λ‚˜μ„œ ν˜ΈμΆœν•œ μͺ½μœΌλ‘œ λŒλ €μ£ΌλŠ” κ°’

* λ„νŠΈμ—°μ‚°μž: 객체 μ ‘κ·Ό μ—°μ‚°μž. 객체가 κ°€μ§€κ³  μžˆλŠ” ν•„λ“œ/λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ μž ν•  λ•Œ 이용

 

πŸ“™ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° νŠΉμ§•

1. μΊ‘μŠν™”(Encapsulation)

- 객체의 ν•„λ“œμ™€ λ©”μ„œλ“œμ˜ μ‹€μ œ κ΅¬ν˜„ λ‚΄μš©μ„ 감좰 λ³΄ν˜Έν•˜λŠ” 것(μ •λ³΄μ˜ 은닉)

- 이유: μ™ΈλΆ€μ˜ 잘λͺ»λœ μ‚¬μš©μœΌλ‘œ 객체가 μ†μƒλ˜μ§€ μ•Šλ„λ‘

- μ ‘κ·Ό μ œν•œμžλ₯Ό 톡해 객체의 ν•„λ“œμ™€ λ©”μ„œλ“œ μ‚¬μš©λ²”μœ„λ₯Ό μ œν•œν•˜μ—¬ μ™ΈλΆ€λ‘œλΆ€ν„° 보호

2. 상속(Inheritance)

- 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„  μƒμœ„ 객체와 ν•˜μœ„ 객체가 있음

- μƒμœ„ κ°μ²΄λŠ” μžμ‹ μ΄ κ°€μ§€κ³  μžˆλŠ” ν•„λ“œμ™€ λ©”λ„μŠ€λ₯Ό ν•˜μœ„ κ°μ²΄μ—κ²Œ λ¬Όλ €μ£Όμ–΄ μ‚¬μš©ν•  수 μžˆλ„λ‘ 함

- 이유: 이미 잘 개발된 객체λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€κΈ° λ•Œλ¬Έμ— μƒμœ„ 객체의 μˆ˜μ •μœΌλ‘œ λͺ¨λ“  ν•˜μœ„ κ°μ²΄λ“€μ˜ μˆ˜μ •

         νš¨κ³Όλ₯Ό κ°€μ Έμ˜΄. μ΄λŠ” 반볡된 μ½”λ“œ μ‚¬μš©λ„ 쀄여주기 λ•Œλ¬Έμ— 맀우 효율적

3. λ‹€ν˜•μ„±(Polymorphism)

- 같은 νƒ€μž…μ΄μ§€λ§Œ μ‹€ν–‰ κ²½κ³Όκ°€ λ‹€μ–‘ν•œ 객체λ₯Ό μ΄μš©ν•  수 μžˆλŠ” μ„±μ§ˆ

- ν•˜λ‚˜μ˜ νƒ€μž…μ— μ—¬λŸ¬ 객체λ₯Ό λŒ€μž…ν•¨μœΌλ‘œμ¨ λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ΄μš©ν•  수 μžˆλ„λ‘ 함

- μžλ°”λŠ” λ‹€ν˜•μ„±μ„ μœ„ν•΄ λΆ€λͺ¨ 클래슀 ν˜Ήμ€ μΈν„°νŽ˜μ΄μŠ€ νƒ€μž… λ³€ν™˜μ„ ν—ˆμš©ν•˜λ©° 이둜 인해 객체의 λΆ€ν’ˆν™”κ°€ κ°€λŠ₯

 

πŸ“™ 객체와 클래슀

[ 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° 개발의 3κ°€μ§€ 단계 ]

β‘  클래슀 섀계    β‘‘ μ„€κ³„λœ 클래슀둜 객체 생성   β‘’ μƒμ„±λœ 객체 μ‚¬μš©

 

1. 클래슀 섀계

- λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©ν•˜κ³  싢은 객체가 μžˆλ‹€λ©΄ 섀계도λ₯Ό λ¨Όμ € μž‘μ„±

- μžλ°”μ—μ„œμ˜ ν΄λž˜μŠ€κ°€ λ°”λ‘œ 섀계도

- 클래슀 λ‚΄ 객체λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•œ ν•„λ“œμ™€ λ©”μ„œλ“œ 쑴재

 

2. 클래슀둜 객체 생성

- μΈμŠ€ν„΄μŠ€: ν΄λž˜μŠ€λ‘œλΆ€ν„° λ§Œλ“€μ–΄μ§„ 객체, λ©”λͺ¨λ¦¬μ— μƒκΈ°λŠ” 싀체

- μΈμŠ€ν„΄μŠ€ν™”: ν΄λž˜μŠ€λ‘œλΆ€ν„° 객체λ₯Ό λ§Œλ“œλŠ” κ³Όμ •. new μ—°μ‚°μž μ‚¬μš©

- ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ‘œλΆ€ν„° μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€ 생성 κ°€λŠ₯

 

3. 객체 μ‚¬μš©

- new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄ μƒμ„±ν•œ 객체λ₯Ό 클래슀 λ³€μˆ˜μ— λ‹΄μ•„ μ‚¬μš©