Home > CS > 2024 > ๐Ÿ’พ [CS] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Framework)์˜ ์ฐจ์ด์ .

๐Ÿ’พ [CS] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Framework)์˜ ์ฐจ์ด์ .
CS

๐Ÿ’พ [CS] ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Framework)์˜ ์ฐจ์ด์ .

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library) ์™€ ํ”„๋ ˆ์ž„์›Œํฌ(Framework) ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด์ง€๋งŒ, ๋‘˜ ์‚ฌ์ด์—๋Š” ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฐจ์ด์ ์€ ์ œ์–ด ํ๋ฆ„๊ณผ ์‚ฌ์šฉ ๋ฐฉ์‹์—์„œ ์ฃผ๋กœ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library) ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ ๋˜๋Š” ํ•จ์ˆ˜๋“ค์˜ ๋ชจ์Œ์œผ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ์„ ํƒ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ œ์–ด๊ถŒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ œ์–ด ํ๋ฆ„
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
    • ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฃผ๋„์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ๊ฐ€์ ธ๋‹ค ์”๋‹ˆ๋‹ค.
  • ์œ ์—ฐ์„ฑ
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹จ์ˆœํ•œ ๋„๊ตฌ๋กœ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ์ž์œ ๋กญ๊ฒŒ ์„ค๊ณ„์™€ ๊ตฌ์กฐ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ: Java์˜ Controller ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

import java.util.Collections;
import java.util.List;

public class Example {
    public static void main(String[] args) {
        List<String> list = List.of("Apple", "Banana", "Orange");
        Collections.sort(list);
    }
}
  • ์œ„ ์ฝ”๋“œ์—์„œ Collections.sort()๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•˜์—ฌ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•.

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์„ ํƒํ•ด์„œ ํ˜ธ์ถœ.
  • ์ฝ”๋“œ์˜ ์ œ์–ด ํ๋ฆ„์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌ.
  • ์œ ์—ฐํ•˜๊ณ  ์ œํ•œ์ด ์ ์Œ.
  • ํŠน์ • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„์˜ ์ฝ”๋“œ ์ง‘ํ•ฉ.

2๏ธโƒฃ ํ”„๋ ˆ์ž„์›Œํฌ(Framework)

ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ์ œ์–ด ํ๋ฆ„์„ ๋ฏธ๋ฆฌ ์ •ํ•ด ๋†“์€ ์ผ์ข…์˜ ๋ผˆ๋Œ€ ๋˜๋Š” ํ‹€์ž…๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, ์ œ์–ด ํ๋ฆ„์€ ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • ์ œ์–ด ์—ญ์ „(Inversion of Control, IoC)
    • ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์Šค์Šค๋กœ ์ œ์–ดํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ํ•„์š”ํ•œ ์‹œ์ ์— ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
      • ์ด๋ฅผ ์ œ์–ด์˜ ์—ญ์ „์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.
  • ์„ค๊ณ„ ํŒจํ„ด ์ œ๊ณต
    • ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ตฌ์กฐ์™€ ์„ค๊ณ„ ํŒจํ„ด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
      • ๊ฐœ๋ฐœ์ž๋Š” ๊ทธ ๊ตฌ์กฐ์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ: Spring ํ”„๋ ˆ์ž„์›Œํฌ.

@RestController
public class HelloController {
    
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, World!";
    }
}
  • ์œ„ ์ฝ”๋“œ๋Š” Spring ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ @RestController ์™€ @GetMapping ๊ฐ™์€ ์—๋„ˆํ…Œ์ด์…˜์„ ํ†ตํ•ด HTTP ์š”์ฒญ์ด ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉฐ, ์ œ์–ด ํ๋ฆ„์€ Spring ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํŠน์ง•.

  • ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ์–ด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœ.
  • ์ผ์ •ํ•œ ๊ตฌ์กฐ์™€ ์„ค๊ณ„ ํŒจํ„ด์„ ์ œ๊ณตํ•˜์—ฌ ํ†ต์ผ๋œ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰.
  • ์ œ์–ด ์—ญ์ „(Inversion of Control, IoC)์„ ํ†ตํ•ด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ์ฃผ๋„.
  • ๋” ํฐ ๊ตฌ์กฐ์™€ ํ‹€์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ๋” ๊ฐ•๋ ฅํ•œ ์ œ์•ฝ๊ณผ ๊ทœ์น™์ด ์ ์šฉ๋จ.

3๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด์  ์š”์•ฝ.

๊ตฌ๋ถ„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library) ํ”„๋ ˆ์ž„์›Œํฌ(Framework)
์ œ์–ด ํ๋ฆ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ œ์–ด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ œ์–ด(์ œ์–ด ์—ญ์ „, IoC)
์‚ฌ์šฉ ๋ฐฉ์‹ ํ•„์š”์— ๋”ฐ๋ผ ์„ ํƒ์ ์œผ๋กœ ํ˜ธ์ถœ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๊ฐœ๋ฐœ
์œ ์—ฐ์„ฑ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค๊ณ„์™€ ๊ตฌ์กฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์„ค๊ณ„์™€ ๊ตฌ์กฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜
์ฑ…์ž„ ๋ถ„๋ฐฐ ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณต ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ๋ฅผ ์ •์˜
๊ทœ๋ชจ ์ž‘์€ ๋ชจ๋“ˆ์ด๋‚˜ ํ•จ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํฐ ํ‹€์„ ์ œ๊ณต
์˜ˆ์‹œ Java์˜ Collection Spring

4๏ธโƒฃ ์ œ์–ด์˜ ์—ญ์ „(Inversion of Control, IoC).

์ œ์–ด์˜ ์—ญ์ „์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ค‘์š”ํ•œ ํŠน์ง• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.
์ œ์–ด์˜ ์—ญ์ „์ด๋ž€, ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ์–ด๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์ž๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์š”์ฒญํ•  ๋•Œ ์‹คํ–‰๋  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋ฟ, ์ „์ฒด์ ์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ œ์–ด ์—ญ์ „์˜ ์˜ˆ์‹œ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)
    • ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ(Framework)
    • ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ณ , ํ•„์š”ํ•œ ์‹œ์ ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ๊ฒฐ๋ก .

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํŠน์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ๋กœ์„œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜๋ฉด, ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ์ œ์–ด ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ ์ ˆํ•œ ์‹œ์ ์— ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š”๋Š” ๋” ์œ ์—ฐํ•˜๊ณ , ํŠน์ • ๊ธฐ๋Šฅ์— ์ง‘์ค‘๋œ ๋„๊ตฌ์ธ ๋ฐ˜๋ฉด, ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ œ์–ด์˜ ์—ญ์ „์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „๋ฐ˜์˜ ๊ตฌ์กฐ๋ฅผ ์ œ์‹œํ•˜๋ฉฐ, ๋” ํฐ ํ‹€์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.