๐Ÿ’ป Software Engineering/Java Spring

Spring 101 - #2 ์ž๋ฐ” ํ‚ค์›Œ๋“œ์™€ OOP ํŠน์„ฑ 4๊ฐ€์ง€

MayKim51 2020. 7. 19. 16:21

 

ํฌ์ŠคํŠธ ์ œ๋ชฉ ๊ทธ๋Œ€๋กœ Spring ๊ธฐ์ดˆ๋ฅผ ๋‹ค์น˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•˜๋Š” TIL ์„ฑ๊ฒฉ์˜ ์Šคํ”„๋ง ๊ธฐ์ดˆ ์š”์•ฝ ์‹œ๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค. 
Java๋Š” ์•„๋Š”๋ฐ Spring์€ ๋ญ”์ง€ ๋ชจ๋ฅด๊ฒ ๋Š” ์ดˆ๋ณด์ž๋“ค์—๊ฒŒ ์œ ์šฉํ•˜๋„๋ก ์š”์ ๋งŒ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Spring 101 ์‹œ๋ฆฌ์ฆˆ

Spring 101 - #1 ์ž๋ฐ”์™€ ์ ˆ์ฐจ์ /๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
Spring 101 - #2 ์ž๋ฐ” ํ‚ค์›Œ๋“œ์™€ OOP ํŠน์„ฑ 4๊ฐ€์ง€
Spring 101 - #3 ๊ฐ์ฒด์ง€ํ–ฅ์„ค๊ณ„ 5์›์น™ SOLID
Spring 101 - #4 ์Šคํ”„๋ง ๋””์ž์ธ ํŒจํ„ด Spring Design Pattern

 


 

#๊ฐ์ฒด์ง€ํ–ฅ = ํ˜„์‹ค์„ธ๊ณ„๋ฅผ ์ธ์ง€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
์ฝ”๋“œ๋ฅผ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ–ˆ์„๋•Œ ์ฝํžˆ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ OOP๋ฅผ ํ™œ์šฉํ•˜๊ณ  ์žˆ์ง€ ๋ชปํ•œ ๊ฒƒ

 

#Terms

  • Class : ๋ถ„๋ฅ˜์— ๋Œ€ํ•œ ๊ฐœ๋…
  • Object : ์‹ค์ฒด  -> heap์— ์ €์žฅ (๋Œ€์šฉ๋Ÿ‰ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹)
  • Context = Application boundary
  • ์ฐธ์กฐ๋ณ€์ˆ˜, ์ธ์Šคํ„ด์Šค
    ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜ mickey ๋Š” Mouse ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•œ๋‹ค
  • ํด๋ž˜์Šค๋ฉค๋ฒ„ = static ๋ฉค๋ฒ„
  • ๊ฐ์ฒด๋ฉค๋ฒ„ = ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„

 

#OOP 4๋Œ€ ํŠน์„ฑ
์บก์Šํ™” / ์ƒ์†(extend) / ์ถ”์ƒํ™” / ๋‹คํ˜•์„ฑ
Encapsulation , Information hiding / Extend ์žฌ์‚ฌ์šฉ / Abstraction ๋ชจ๋ธ๋ง / Polymorphism ์‚ฌ์šฉํŽธ์˜

 

#Class vs. Object

  • ๊ตฌ๋ถ„: ๋‚˜์ด? ์ œ์กฐ์ผ์ž?
  • ๊ฐ์ฒด: ์œ ์ผ๋ฌด์ดํ•œ ์‚ฌ๋ฌผ
  • ํด๋ž˜์Šค: ์ง‘ํ•ฉ์˜ ๊ฐœ๋…. ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ด์นญ

 

#์บก์Šํ™” information hiding, encapsulation

  • ํ‘œ๊ธฐ๋ฒ•
-private : ๋ณธ์ธ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
~default: ๊ฐ™์€ ํŒจํ‚ค์ง€๋‚ด์˜ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
#protected: ๊ฐ™์€ ํŒจํ‚ค์ง€/์ƒ์† ๋‚ด์˜ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
+public: ๋ชจ๋‘ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • static ๋ฉค๋ฒ„ ์ ‘๊ทผํ• ๋•Œ๋Š” ํด๋ž˜์Šค ๋ช…์„ ์‚ฌ์šฉํ•œ๋‹ค

 

#Extend ์ƒ์† = ์žฌ์‚ฌ์šฉ, ํ™•์žฅ
is-a , is a kind of ๊ด€๊ณ„ (e.g. ๊ณ ๋ž˜๋Š” ๋™๋ฌผ์˜ ํ•œ ๋ถ„๋ฅ˜๋‹ค)

  • ์ƒ์† -> ์กฐ์ง๋„X ๊ณ„์ธต๋„X
    ์ƒ์† = ๋ถ„๋ฅ˜๋„
  • ํด๋ž˜์Šค ๋ช…์€ ๋ถ„๋ฅ˜์Šค๋Ÿฝ๊ฒŒ, ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜๋ช…์€ ์œ ์ผ๋ฌด์ดํ•œ ์‚ฌ๋ฌผ์ฒ˜๋Ÿผ ์ž‘๋ช…ํ•ด์•ผ ํ•œ๋‹ค
  • ์ž๋ฐ”๋Š” ๋‹ค์ค‘์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค
  • T ๋ฉ”๋ชจ๋ฆฌ์— ํ•˜์œ„ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ์ƒ์œ„ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋„ ํ•จ๊ป˜ ์ƒ์„ฑ๋œ๋‹ค

##์ธํ„ฐํŽ˜์ด์Šค : is able to (๋‚ ์ˆ˜ ์žˆ๋Š”, ํ—ค์—„์น  ์ˆ˜ ์žˆ๋Š”_

  • Serializable ์ง๋ ฌํ™” ํ•  ์ˆ˜ ์žˆ๋Š”
  • Cloneable ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋Š”
  • Comparable ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”
  • Runnable ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”

-> ์ƒ์œ„ํด๋ž˜์Šค๋Š” ๋ฌผ๋ ค์ค„ ํŠน์„ฑ์ด ํ’์„ฑํ•  ์ˆ˜๋ก / ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„์„ ๊ฐ•์ œํ•  method ๊ฐฏ์ˆ˜๊ฐ€ ์ ์„ ์ˆ˜๋ก ์ข‹๋‹ค
= LSP ๋ฆฌ์Šค์ฝ”ํ”„์น˜ํ™˜ ๋ฒ•์น™ / ISP ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„ํ•  ์›์น™

 

#Abstraction ์ถ”์ƒํ™”

  • ๊ตฌ์ฒด์ ์ธ ๊ฒƒ์„ ๋ถ„ํ•ดํ•ด์„œ Application Boundary์— ์žˆ๋Š” ํŠน์„ฑ๋งŒ ์žฌ์กฐํ•ฉํ•œ ๊ฒƒ
  • = ๋ชจ๋ธ๋ง
  • ์ถ”์ƒํ™”์˜ ๊ฒฐ๊ณผ๋ฌผ = ๋ชจ๋ธ
  • ๋ชจ๋ธ์˜ ์ž๋ฐ”์—์„œ์˜ ํ‘œํ˜„ = ํด๋ž˜์Šค
  • ํด๋ž˜์Šค์˜ ๋…ผ๋ฆฌ์  ์„ค๊ณ„(UML), ๋ฌผ๋ฆฌ์  ์„ค๊ณ„

 

#UML ํ‘œ๊ธฐ

๋ฐ‘์ค„ : ํด๋ž˜์Šค๋ฉค๋ฒ„ (static)

 

#๋ณ€์ˆ˜ ์œ ํ˜• ์…‹

์ด๋ฆ„ ์‚ฌ๋Š” ๊ณณ(T ๋ฉ”๋ชจ๋ฆฌ)
Static ๋ณ€์ˆ˜ Static ์˜์—ญ (ํด๋ž˜์Šค๊ฐ€ static์— ๋ฐฐ์น˜๋ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ™•๋ณด)
์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ Heap ์˜์—ญ (๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ํ• ๋‹น)
local ๋ณ€์ˆ˜ Stack (Stack frame ๋‚ด๋ถ€) - ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋จ

 

#UML ์ถ”์ฒœ์ฑ…

- UML for Java Programmers, by Robert C. Martin
- UML Distilled 2nd edition, Martin ํŒŒ์šธ๋Ÿฌ

 

#Override
: ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋”๋ผ๋„, ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(์žฌ์ •์˜)ํ•œ method๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค!

 

#Call by Value, Call by Reference = Call By Address

  • ๊ธฐ๋ณธ์ž๋ฃŒํ˜• - Call by value
  • ๊ฐ์ฒด์ฐธ์กฐ๋ณ€์ˆ˜ - Call by Reference, by Address (๊ฐ’์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์ง€๋งŒ ์ฃผ์†Œ๋กœ ์ฝํž˜)