๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end ๋ฐ๋ธŒ์ฝ”์Šค/week 01 - 02 TIL (java, DB)

[TIL] 221018 - Java์˜ OOP

by young-ji 2022. 10. 18.

ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ JAVA(2) - Java์˜ OOP

 

1. ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • JAVA : ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด
  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ
    • ํ”„๋กœ๊ทธ๋žจ์ด ๊ฑฐ๋Œ€ํ™” ํ•˜๋ฉด์„œ ๋“ฑ์žฅ. ๋งŒ๋“ค ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๊ด€๋ฆฌ๊ฐ€ ํž˜๋“ค์–ด์ง
    • ์–ด๋–ป๊ฒŒ ํฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ฒƒ์ธ๊ฐ€? ⇒ ํ•ด๊ฒฐ์ฑ… : ์ž‘๊ฒŒ ๋‚˜๋ˆ ์„œ ๋งŒ๋“ค๊ณ  ํ•ฉ์น˜๊ธฐ
  • ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๊ฐ์ฒด๋“ค์—๊ฒŒ ๋‚˜๋ˆ ์„œ ์ˆ˜ํ–‰

 

  • ๊ฐœ๋…์ ์ธ ์šฉ์–ด → ๊ฐ์ฒด / ๊ธฐ์ˆ ์ ์ธ ์šฉ์–ด → class, instance
  • ๊ฐ์ฒด๋Š” ์ž‘์€ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰
  • ๊ฐ์ฒด์™€ ๊ฐ์ฒด๋Š” ์„œ๋กœ ํ˜‘๋ ฅ
    • ⇒ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ชฉํ‘œ : ์ผ์„ ์ž˜๊ฒŒ ์ชผ๊ฐœ์„œ ๊ฐ์ฒด์—์„œ ์œ„์ž„ํ•˜๊ณ , ์„œ๋กœ ํ˜‘๋ ฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๊ฐ์ฒด๋ฅผ ์„œ๋กœ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.
    • type(ํ˜•)์œผ๋กœ ๊ตฌ๋ถ„
    • String str = “Hellow World”
    ⇒ ํƒ€์ž… ๋งŒ๋“ค๊ธฐ : class ๋งŒ๋“ค๊ธฐ (๊ฐ์ฒด์—๊ฒŒ ์ฑ…์ž„(๊ธฐ๋Šฅ)์ฃผ๊ธฐ)
package com.programmers;

import java.lang.*;

class MyObject extends Object implements Runnable{ // class type ๋งŒ๋“ค๊ธฐ
	// ํ•„๋“œ ์˜์—‰
	private int a = 0;
	// ๋ฉ”์†Œ๋“œ ์˜์—ญ
	public void run(){
		a += 1;
	}
}

MyObject obj = new MyObject();
// MyObject ํƒ€์ž…์˜ ๋ณ€์ˆ˜ obj๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ณ€์ˆ˜์— MyObject์œผ๋กœ ์ƒ์„ฑ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋Œ€์ž…

 

2. ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์„ฑ

1๏ธโƒฃ ๊ฐญ์Šํ™”

  1. ์™„์„ฑ๋„๊ฐ€ ์žˆ๋‹ค  : ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹จ์œ„๋กœ์„œ ์™„์ „ํ•จ์„ ๊ฐ–๋Š”๋‹ค.
  2. ์ •๋ณด๊ฐ€ ์€๋‹‰๋˜์–ด ์žˆ๋‹ค   : ๊ฐ์ฒด์˜ ์ •๋ณด๊ฐ€ ๋ฐ–์œผ๋กœ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜, ๋ฐ–์—์„œ ๊ฐ์ฒด ๋‚ด์˜ ์ •๋ณด์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•œ๋‹ค.

⇒ ๊ฐ์ฒด๋Š” ์Šค์Šค๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

์™ธ๋ถ€์— ์˜์กดํ•˜๊ฑฐ๋‚˜, ์นจ๋žต์„ ์ œํ•œํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

: ์ ‘๊ทผ์ง€์ •์ž๋ฅผ ํ†ตํ•ด ์ž์‹ ์ด ์›ํ•˜๋Š” ๋งŒํผ๋งŒ ์™ธ๋ถ€์— ์ œ๊ณตํ•ด ์ค€๋‹ค.

  • ์ ‘๊ทผ์ง€์ •์ž

private : ๊ฐ์ฒด ์†Œ์œ 

protected : ์ƒ์†๋œ ๊ฐ์ฒด์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ

(friendly) : ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (ํŒจํ‚ค์ง€ ๊ฐ€์‹œ์„ฑ)

public : ๋ชจ๋‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

2๏ธโƒฃ ์ƒ์†

  • ์ƒ์œ„, ๋ถ€๋ชจ, super, [์ถ”์ƒ]
  • ํ•˜์œ„, ์ž์‹, (this), [๊ตฌ์ฒด]

์ƒ์†์„ ์“ฐ๋Š” ์ด์œ ?

→ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—๊ฒŒ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„๋•Œ??? NO

→ ์ถ”์ƒ๊ณผ ๊ตฌ์ฒด ๊ด€๊ณ„์—์„œ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. (์ƒ๋ฌผ > ๋™๋ฌผ > ํฌ์œ ๋ฅ˜ > ์‚ฌ๋žŒ > ์—ฌ์ž )

 

3๏ธโƒฃ ์ถ”์ƒํ™”

  • ์ƒ์œ„ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ์ƒ์œ„์— ์žˆ๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ํ•˜์œ„๋ณด๋‹ค ์ถ”์ƒ์ ์ด์•ผ ํ•œ๋‹ค.

์ถ”์ƒํ™”๋œ ๊ฐ์ฒด : ์ถ”์ƒ์ฒด

๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด : ๊ตฌ์ƒ์ฒด

// ** ์˜๋ฏธ์  ์ถ”์ƒ์ฒด **
class Login{
	void login(){}
}
class kakakoLogin extends Login{
	void login(){}
}

// ** ์ถ”์ƒ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ๊ฐ์ฒด **
abstract class Login{
	abstract void login();
	// abstract ๋ฉ”์†Œ๋“œ : ๊ตฌํ˜„์ฒด๋ฅผ ๊ฐ–์ง€์•Š๊ณ  ์ •์˜๋งŒ ๊ฐ€์ง„๋‹ค. 
}
class kakakoLogin extends Login{
	@Override void login(){} // ๊ตฌํ˜„์˜ ์˜๋ฌด๋ฅผ ๊ฐ€์ง„๋‹ค. -> ๋ฐ˜๋“œ์‹œ override
}

// ** ๊ฐ์ฒด ์ž์ฒด๊ฐ€ ์ถ”์ƒ์  **
interface Login{
	void login(){}
}
class kakakoLogin implements Login{
	@Override void login(){} // ๊ตฌํ˜„์˜ ์˜๋ฌด๋ฅผ ๊ฐ€์ง„๋‹ค
}

 

4๏ธโƒฃ ๋‹คํ˜•์„ฑ

  • ํ˜•(type)์„ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ƒ์† ๊ด€๊ณ„์— ์žˆ์„ ๋•Œ)

: ๊ฐ™์€ ๊ฐ์ฒด์— ๋Œ€ํ•ด ํ•„ํ„ฐ๋ง๋œ(type์— ๋งž๋Š”) ๊ธฐ๋Šฅ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. → ๊ฐ์ฒด๊ฐ€ ์ผ์„ ๋ถ„ํ• ํ•ด์„œ ํ•˜๋Š”๋ฐ ์•ˆ์ „์„ฑ์„ ํ™•๋ณด

class KakakoLogin implements Login,Portal{
	void kakao(){}
	@Override void login(){} 
	@Override void portal(){} 
}

Portal p = new KakaoLogin();
p.portal()
Login l = new KakaoLogin();
l.login()

KakaoLogin l = new KakaoLogin(); // ์ „๋ถ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ?

 

3. ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฐ์ฒด์ง€ํ–ฅ์„ ์ž˜ ํ•  ์ˆ˜ ์žˆ์„๊นŒ

  • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    1. ๊ฐ์ฒด๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ–ˆ๋Š”๊ฐ€
    2. ๊ฐ์ฒด๊ฐ„์˜ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ์–ด๋– ํ•œ๊ฐ€

1๏ธโƒฃ ๊ฐ์ฒด์ง€ํ–ฅ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ : UML

  • UseCase Diagram
  • Sequence Diagram
  • Package Diagram
  • Class Diagram

class diagram
class diagram cheat sheet

 

Tool

2๏ธโƒฃ ์„ค๊ณ„ : ์–ด๋–ป๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ž˜ ๋‚˜๋ˆ„๊ณ  ์—ฐ๊ด€์ง€์„ ์ˆ˜ ์žˆ๋Š”๊ฐ€

  • ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์„ฏ๊ฐ€์ง€ ์›์น™ → SOLID
    1. S : SRP (๋‹จ์ผ ์ฑ…์ž„ ์›์น™): ์ˆ˜์ •์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ˆ˜์ •๋˜๋Š” ์ด์œ ๋Š” ํ•˜๋‚˜ ๋•Œ๋ฌธ์ด์—ฌ์•ผ ํ•œ๋‹ค .
    2. O : OCP : ์ˆ˜์ •์—๋Š” ๋‹ซํžˆ๊ณ , ํ™•์žฅ์—๋Š” ์—ด์–ด๋ผ.
    3. L : LSP : ์ถ”์ƒ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์— ๊ตฌ์ƒ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด๊ฐ€๋„ ์•„๋ฌด ๋ฌธ์ œ ์—†์–ด์•ผ ํ•œ๋‹ค.
    4. I : ISP
    5. D : DIP
  • ์›์น™์— ๋”ฐ๋ผ ์„ค๊ณ„ํ•  ๊ฒฝ์šฐ ๊ณตํ†ต์  ⇒ GoF 23๊ฐ€์ง€ ๋””์ž์ธ ํŒจํ„ด

https://refectoring.guru/ ์ฐธ๊ณ 

๋Œ“๊ธ€