JAVA

23.01.05 - ๊ฐ์ฒด์ง€ํ–ฅ์ ˆ์ฐจ/Class๋ž€?/Instance๋ž€?/Field/Method

softPattern 2023. 8. 1. 01:31

๊ฐ์ฒด ์ง€ํ–ฅ Object Oriented Programming

๐Ÿ’ก ๊ฐ์ฒด ⇒ ์ถ”์ƒํ™”(abstraction)⇒ํด๋ž˜์Šค ์ƒ์„ฑ+๊ด€๊ณ„(relationship)⇒์บก์Аํ™”(encapsulation)⇒๊ณ„์ธตํ™”,์ƒ์†(Hierarchy)⇒๋‹คํ˜•์„ฑ(polymorphism)

 

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ 3๋‹จ๊ณ„

1.๊ฐ์ฒด ๋ชจ๋ธ๋ง(Object Modeling) :๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ์ •๋ฆฌํ•œ๋‹ค.

object : ํ™๊ธธ๋™

attribute(์†์„ฑ๊ฐ’,ํŠน์„ฑ)

  • ์ด๋ฆ„: ํ™๊ธธ๋™
  • ์ง์—…: ์˜์ 
  • ์„ ํ–‰ ํ–‰ํ•œ ํšŸ์ˆ˜: …

behavior(๊ธฐ๋Šฅ)

  • ๋ฌผ๊ฑด์„ ํ›”์นœ๋‹ค.
  • ํ›”์นœ ๋ฌผ๊ฑด์„ ๋‚˜๋ˆ„์–ด์ค€๋‹ค.
  • ํƒ๊ด€ ์˜ค๋ฆฌ๋ฅผ ํ˜ผ๋‚ธ๋‹ค…

2.ํด๋ž˜์Šค ์ •์˜: ๋ชจ๋ธ๋ง ๊ณผ์ •์—์„œ์˜ attribute๋Š” Field(์ „์—ญ๋ณ€์ˆ˜member variable)๋กœ ์ •์˜ํ•˜๊ณ , behavior๊ธฐ๋Šฅ ๋ฐ ํ–‰์œ„๋Š” Method๋กœ ์ •์˜ํ•œ๋‹ค.

Field

String name = “ํ™๊ธธ๋™”;
String job = “์˜์ ”;
int help = 0;

Method

public void rent() {
}
public void service() {
}

~~bean


application~~

3.์ธ์Šคํ„ด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ : main Method ๋‚ด๋ถ€์—์„œ new๋ผ๋Š” keyword๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ Field, Method์— ์ ‘๊ทผํ•œ๋‹ค. ⇒class์˜ ์‹ค์ฒดํ™”


Java์˜ class ์ข…๋ฅ˜

Application class

⇒ Main method๋ฅผ ๊ฐ€์ง€๋ฉด์„œ ์‹คํ–‰์‹œํ‚จ๋‹ค. (์‹คํ–‰์„ ์œ„ํ•œ ์ˆ˜๋‹จ)

bean class๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฒƒ!

 

Bean class

⇒ Real world๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค. = Object Modeling

์ƒํƒœ, ์†์„ฑ์„ ๋‹ด๊ณ  ์žˆ๋Š” Field

ํ–‰์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” method ๋ฅผ ํฌํ•จํ•œ๋‹ค.

bean class ์ž์ฒด๋กœ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค !

Class๋ž€

ํ•„๋“œ์—์„œ ์ง์ ‘ ๋ชจ๋“  ๊ฐ’์„ ๊ตฌ์ฒดํ™” ํ•˜๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ๊ฒจ๋‚  ๋•Œ๋งˆ๋‹ค ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ค์–ด์ค˜์•ผํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ํ•„๋“œ ๊ฐ’์„ ๊ตฌ์ฒดํ™” ์‹œํ‚ค์ง€ ์•Š๊ณ  Setter method๋ฅผ ์‚ฌ์šฉ ํ•œ๋‹ค.

๊ณตํ†ต๋œ ํŠน์„ฑ, ์†์„ฑ, ํ–‰์œ„์˜ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๋ชจ์ž„์ด๋‹ค.


ํด๋ž˜์Šค → ์ธ์Šคํ„ด์Šคํ™” → ๊ฐ์ฒด ์ƒ์„ฑ

ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ‘์ธ์Šคํ„ด์Šคํ™”’ ํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค. (๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋‹ค.)

ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์ง„ ‘๊ฐ์ฒด’๋ฅผ ‘์ธ์Šคํ„ด์Šค’๋ผ ํ•œ๋‹ค.

ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

'ํด๋ž˜์Šค๋ช… ๋ณ€์ˆ˜๋ช… = new ํด๋ž˜์Šค๋ช…();'⇒ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ

User user = new User();⇒ new :์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ⇒ ํด๋ž˜์Šค๋ช…();: ์ƒ์„ฑ์ž ์ƒ์„ฑ

์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€์ˆ˜์— ์ฐธ์กฐํ•˜์—ฌ ์ €์žฅํ•˜๋‹ค.


Method

behavior ⇒ Method ํ–‰์œ„, ๋™์ž‘, ๊ธฐ๋Šฅ

ํ•„์š”ํ•œ Data๋ฅผ ๋„˜๊ธฐ๊ณ  ๊ฒฐ๊ณผ Data๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ์ฒด ๊ฐ„ Data๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ด๋‹ค.

Incomeup(){ 
	Income++
	System.out.println("์ˆ˜์ž…์ด ์ฆ๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
}

method๋Š” ์ผ์ข…์˜ ํ•จ์ˆ˜์™€ ๊ฐ™๋‹ค !

*getter Method: ์ƒํƒœ๊ฐ’์„ return ํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. encapsulation ๋œ ์ƒํƒœ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.


instance๊นŒ์ง€์˜ ๊ณผ์ •

๋ณด๋“œ๋งˆ์นด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ถ”์ƒํ™” ํ•˜์—ฌ ๊ฒ€์€์ƒ‰๋ณด๋“œ๋งˆ์นด ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ(Bean) ๋งŒ๋“ ๋‹ค.

์ƒํƒœ, ์†์„ฑ ์ •๋ณด ⇒ Field

ํ–‰์œ„ ⇒ method

์ƒํƒœ๋‚˜ ์†์„ฑ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๊ฒ€์€์ƒ‰๋ณด๋“œ๋งˆ์นด ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ

main method๋ฅผ ๋„ฃ์–ด ๊ฒ€์€์ƒ‰๋ณด๋“œ๋งˆ์ปค์‚ฌ์šฉ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ(application)์„ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.

๋งŒ์•ฝ ‘์ฒญ์ƒ‰๋ณด๋“œ๋งˆ์นด’๋„ ๋งŒ๋“ค์–ด์•ผํ•˜๋ฉด bean ํด๋ž˜์Šค๋ฅผ ๋˜ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผํ•œ๋‹ค.

ํ•„๋“œ ๊ฐ’์„ ๋งค๋ฒˆ ์ง์ ‘ ๊ตฌ์ฒดํ™” ์‹œํ‚ค์ง€ ์•Š๊ณ  Setter method๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


์ถ”์ƒํ™” ์ž‘์—…

๊ณตํ†ต๋œ ํŠน์„ฑ์ด๋‚˜ ํ–‰์œ„๋ฅผ ์ถ”์ถœํ•ด์„œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ

์ถ”์ƒํ™” ์ˆ˜์ค€์ด ๋†’๋‹ค = ์ผ๋ฐ˜ํ™”๊ฐ€ ์ž˜๋๋‹ค

object =====⇒ ์ถ”์ƒํ™” ์ž‘์—… class ===⇒ instance(์‹ค์ฒดํ™”)
(๊ฐ์ฒด) Field(attribute)
method(behavior)
๊ณตํ†ต์ ์ธ ์†์„ฑ์ด๋‚˜ ํŠน์„ฑ ๋ฐ ํ–‰์œ„๋ฅผ ์ถ”์ถœํ•ด๋‚ธ๋‹ค.
  class๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹จ๊ณ„

 

๊ฒ€์€์ƒ‰๋ณด๋“œ๋งˆ์นด → ๊ฒ€์€์ƒ‰๋ณด๋“œ๋งˆ์นด์‚ฌ์šฉ → ์ฒญ์ƒ‰๋ณด๋“œ๋งˆ์นด → ๋ณด๋“œ๋งˆ์นด / ์ˆœ์œผ๋กœ ์ ˆ์ฐจ ์ดํ•ดํ•  ๊ฒƒ .


Encapsulation ์บก์Аํ™”

๊ณต๊ฐœ์ ์ธ interface๋‘๋กœ ๊ตฌํ˜„์„ ์ˆจ๊ธด๋‹ค.

๊ตฌํ˜„์„ ์ˆจ๊ธฐ๋Š” ์ ˆ์ฐจ ์€๋‹‰ ⇒ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๋งŒ open

๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๋Š” information hiding ⇒ ๊ฐ์ฒด์˜ ์ค‘์š”ํ•œ ์ •๋ณด(์ƒํƒœ์ •๋ณด) openํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๊ฐ์ฒด์ง€ํ–ฅ์˜ reference

๋™๋ฌผ(์ƒ์œ„)

๋™๋ฌผ a = new ๋™๋ฌผ

์‚ฌ๋žŒ(ํ•˜์œ„)

์‚ฌ๋žŒ b = new ์‚ฌ๋žŒ

  1. ๋™๋ฌผ a = new ์‚ฌ๋žŒ ⇒ ๊ฐ€๋Šฅ ํ•˜์œ„๋Š” ์ƒ์œ„๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. (ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒƒ์€ ํฌ๊ธฐ๊ฐ€ ํฐ๊ฒƒ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ)
  2. ์‚ฌ๋žŒ b = new ๋™๋ฌผ ⇒ ๋ถˆ๊ฐ€๋Šฅ ์ƒ์œ„๋Š” ํ•˜์œ„๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. (ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฒƒ์€ ์ž‘์€ ๊ฒƒ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ!)

๐Ÿ’ก ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ๋„ ์•”๋ฌต์  casting์€ ๊ฐœ๋…์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒƒ์—์„œ ํฐ ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜์ด ๋œ๋‹ค !

 


Polymorphism ๋‹คํ˜•์„ฑ

๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Method Overloading / Method Overriding

A ๊ธฐ๋Šฅ ————————————

-a ๊ธฐ๋Šฅ

-b ๊ธฐ

-c๊ธฐ๋Šฅ

a, b, c ๋ชจ๋‘ A ๊ธฐ๋Šฅ ์ œํ’ˆ์ด๋‹ค. ⇒ ~is a ~ ๊ด€๊ณ„ ์„ฑ๋ฆฝ ⇒ ์ƒ์œ„๋Š” ํ•˜์œ„ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค !

A

๊ธฐ๋Šฅ c

a

๊ธฐ๋Šฅc

b

๊ธฐ๋Šฅ c

c

๊ธฐ๋Šฅ c

⇒ A = new a / new b / new c ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์œ„๋Š” ์ƒ์œ„๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค!


Method syntax

method = behavior = message

  • getter method
    • getname()
    • getAdd()
    • getAllInformation() ←๋ฐฐ์—ด

๊ธฐํƒ€

ex) ์‚ฌ๋‚ด์‹œ์Šคํ…œ ๋ชจ๋ธ๋ง

  • Field ์ด๋ฆ„, ์ง๊ธ‰, ์›”๊ธ‰, ์‚ฌ๋ฒˆ… ⇒ Static
  • Method ์ผํ•˜๋‹ค, ์ถœ์žฅ๊ฐ€๋‹ค… ⇒ Dynamic

⇒ Object Modeling

๋ณ€์ˆ˜์„ ์–ธ๋งŒ ํ•ด์ฃผ๊ณ  ๊ฐ’์€ ์ง€์ •์•ˆํ•ด์ค€๋‹ค๋ฉด?

  • boolean a; ⇒ default ๊ฐ’์ด false์ด๋‹ค.
  • int a; ⇒ default ๊ฐ’์ด 0์ด๋‹ค.