728x90

 

 

 

๊ฐ€๋” ์ž๊ธฐ์†Œ๊ฐœ์„œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ์•ˆ๋ผ์„œ ํž˜๋“ค ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿด ๋•Œ ๊ฐ„๋‹จํžˆ ์ฒดํฌ๋งŒ ํ•ด์ฃผ๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ณต๋ถ™ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12  or  Ctrl + Shift + i) → F1 → Disable JavaScript ์ฒดํฌ

 

 

 

728x90
728x90

 

ํ•œ๊ตญ์‚ฌ๊ฐ€ ๋๋‚˜๊ณ ,

์–ด์ œ๋ถ€ํ„ฐ ์ฝ”ํ…Œ 1์ผ 1๋ฌธ์ œ๋ฅผ ์‹œ์ž‘ํ–ˆ๋‹ค.

 

๋ฐฑ์ค€ 9205๋ฒˆ (https://www.acmicpc.net/problem/9205) ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ,

BFS์ธ์ค„ ์•Œ๊ณ , ์ด์ฐจ์› ๋ฐฐ์—ด ๋งต์„ ๋งŒ๋“ค์–ด์„œ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ๋ฐฉํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋‚˜์•„๊ฐ€๋„๋ก ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ ๋ญ”๊ฐ€ ์ด์ƒํ•˜๋‹ค๋Š” ๋А๋‚Œ์„ ๋ฐ›์•˜๋‹ค.

๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด๋‹ค.

์˜ค๋žœ๋งŒ์— ํ‘ธ๋‹ˆ๊นŒ ๋‹ค ๊นŒ๋จน์—ˆ๋‹ค.

 

ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ์€ ๋ชจ๋“  ์ •์ ์—์„œ ๋ชจ๋“  ์ •์ ์œผ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

DP ๊ธฐ๋ฐ˜์œผ๋กœ ์•„๋ž˜ ๋‘ ๊ฑฐ๋ฆฌ ์ค‘ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

 

x ๋…ธ๋“œ์—์„œ y ๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ   vs   x ๋…ธ๋“œ์—์„œ k (= ๊ฑฐ์ณ๊ฐ€๋Š” ๋…ธ๋“œ, ๊ฒฝ์œ ์ง€) ๋กœ์˜ ๊ฑฐ๋ฆฌ + k ์—์„œ y๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ 

 

3์ค‘ for ๋ฌธ = ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ N³ ์ด๋ผ๋Š” ์ ์„ ์œ ์˜ํ•˜๋ฉฐ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

 

 

์•„๋ž˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด์„œ ๊ฐœ๋…์„ ์ดํ•ดํ–ˆ๋‹ค.

 

 

24. ํ”Œ๋กœ์ด๋“œ ์™€์ƒฌ(Floyd Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜

  ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•˜๋‚˜...

blog.naver.com

 

[Algorithm] Floyd-Warshall ์•Œ๊ณ ๋ฆฌ์ฆ˜ with JAVA

๋“ค์–ด๊ฐ€๋ฉฐํ”Œ๋กœ์ด๋“œ ์›Œ์…œ(Floyd-Warshall) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  ์ •์  ์Œ ์‚ฌ์ด์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. 3์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ „์ฒด ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์ง€๋‚˜์น  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ์ ์ฐจ ํ™•์žฅํ•˜๋ฉฐ ๊ฐ€์žฅ ์ 

jundyu.tistory.com

 

 

 

# 9205 (๋งฅ์ฃผ ๋งˆ์‹œ๋ฉด์„œ ๊ฑธ์–ด๊ฐ€๊ธฐ) Java ์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder answer = new StringBuilder();
        int t = Integer.parseInt(br.readLine());
            
        while (t --> 0) {
            int n = Integer.parseInt(br.readLine());

            StringTokenizer st;
            List<Point> locations = new ArrayList<>(); // ์ƒ๊ทผ์ด๋„ค ์ง‘, ํŽธ์˜์ , ํŽ˜์Šคํ‹ฐ๋ฒŒ ์ขŒํ‘œ ์ €์žฅ
            for (int i = 0; i < n + 2; i++) {
                st = new StringTokenizer(br.readLine());
                int x = Integer.parseInt(st.nextToken());
                int y = Integer.parseInt(st.nextToken());
                locations.add(new Point(x, y));
            }
            
            boolean[][] isAbleToGo = new boolean[n + 2][n + 2]; 

            for (int i = 0; i < n + 2; i++) {
                for (int j = i + 1; j < n + 2; j++) {
                    if (findManhattan(locations.get(i), locations.get(j)) <= 1000) {
                        isAbleToGo[i][j] = isAbleToGo[j][i] = true;
                    }
                }
            }

            for (int k = 0; k < n + 2; k++) { // Floyd Warshall
                for (int i = 0; i < n + 2; i++) {
                    for (int j = 0; j < n + 2; j++) {
                        if (isAbleToGo[i][k] && isAbleToGo[k][j]) isAbleToGo[i][j] = true;
                    }
                }
            }

            answer.append(isAbleToGo[0][n + 1] ? "happy" : "sad").append("\n"); 
        }
        
        System.out.print(answer);
     } 

    static int findManhattan(Point p1, Point p2) {
        return Math.abs(p1.x - p2.x) + Math.abs(p1.y - p2.y);
    }

    static class Point {
        int x;
        int y;

        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}
728x90

'Algorithms > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ LRU Cache  (0) 2022.12.02
๋ฐฑํŠธ๋ž˜ํ‚น (Backtracking)  (0) 2022.11.24
728x90

 

2์ฐจ๋Š” ์ฒด๊ฐ์ƒ 1๊ณผ๋ชฉ์€ ๋ฌด๋‚œํ–ˆ๋Š”๋ฐ, 2๊ณผ๋ชฉ์ด ํ—ท๊ฐˆ๋ ค์„œ ์• ๋งคํ–ˆ๋‹ค.

์†”์งํžˆ ์กฐ๊ธˆ์€ ๋–จ์–ด์งˆ ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ ,, ๋‹คํ–‰์ด๋‹ค! 

 

 

 

1์ฐจ๋Š” ์˜คํ”ˆ๋ถ ์˜จ๋ผ์ธ ์‹œํ—˜์ด๋ผ ๋‹ค๋“ค ๋“€์–ผ ๋ชจ๋‹ˆํ„ฐ๋กœ ์กฑ๋ณด ๋‹ค์šด ๋ฐ›์•„์„œ ์˜†์— ๋‘๊ณ , ctrl + f ํ•˜๋ฉด์„œ ํ’€๋ผ๊ณ  ์•Œ๋ ค์คฌ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ ์ฒญํ•˜์ž๋งˆ์ž ์กฑ๋ณด pdf ํ•˜๋‚˜๋งŒ ๋‹ค์šด ๋ฐ›๊ณ  ๊ทธ๋ƒฅ ์‹œํ—˜ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ,

๋ง‰์ƒ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์„œ ๋‹นํ™ฉํ–ˆ๋‹ค.

 

์ด๋Ÿด ๋•Œ ์ƒ๊ฐ๋‚˜๋Š” ๊ฑด ์—ญ์‹œ ์ง€ํ”ผํ‹ฐ๋ฐ–์— ์—†๋‹ค.

 

๋ฐ”๋กœ ์ง€ํ”ผํ‹ฐ ์นœ๊ตฌํ•œํ…Œ ์˜์กดํ•˜๋ฉด์„œ ๋‹ค ํ’€์—ˆ๋‹ค.

๊ทผ๋ฐ๋„ ํ‹€๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ช‡ ๊ฐœ ์žˆ์—ˆ์Œ ใ…กใ…ก

๊ทธ๋ ‡๊ฒŒ ์ž์‹  ์žˆ๊ฒŒ ๋Œ€๋‹ตํ•˜๋”๋‹ˆ ,,

์–˜๋„ ๋ฏฟ์„๋งŒํ•˜์ง€๋Š” ์•Š๋‹ค. 

ํ•˜์ง€๋งŒ ์–ด์ฐจํ”ผ 60์ ๋งŒ ๋„˜๊ธฐ๋ฉด ๋˜๋‹ˆ๊นŒ ๊ดœ์ฐฎ๋‹ค.

 

 

 

2์ฐจ๋Š” ๋ฌธ์ œ์€ํ–‰์ด๋ผ๊ณ  ํ•ด์„œ ์ผ์ฃผ์ผ ์ •๋„ ํ•˜๋ฃจ์— 1~2ํšŒ์ฐจ์”ฉ cbt ๋Œ๋ฆฌ๋ฉด์„œ ์™ธ์› ๋‹ค.

 

์ตœ๊ฐ• ์ž๊ฒฉ์ฆ ๊ธฐ์ถœ๋ฌธ์ œ ์ „์ž๋ฌธ์ œ์ง‘ CBT

์ „์ž๋ฌธ์ œ์ง‘, CBT, ์ปด์”จ๋น„ํ‹ฐ, ์”จ๋น„ํ‹ฐ, ๊ธฐ์‚ฌ, ์‚ฐ์—…๊ธฐ์‚ฌ, ๊ธฐ๋Šฅ์‚ฌ, ์ปดํ™œ, ์ปดํ“จํ„ฐํ™œ์šฉ๋Šฅ๋ ฅ, 1๊ธ‰, 2๊ธ‰, ์›Œ๋“œ, ์ •๋ณด์ฒ˜๋ฆฌ, ์ „๊ธฐ, ์†Œ๋ฐฉ, ๊ธฐ๊ณ„, ์‚ฌ๋ฌด์ž๋™ํ™”, ์ •๋ณด๊ธฐ๊ธฐ, ์ œ๊ณผ, ์ œ๋นต, ํ•œ๊ตญ์‚ฌ, ๊ณต๋ฌด์›, ์ˆ˜๋Šฅ, ํ•„๊ธฐ,

www.comcbt.com

 

๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด์— ๋งค์šฐ ์ทจ์•ฝํ•œ ํŽธ์ด๋ผ, ๋’ค๋Œ์•„์„œ๋ฉด ๊นŒ๋จน์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋…ธ์…˜์— ์˜ค๋‹ต ์ •๋ฆฌํ•˜๋ฉด์„œ ๊ณ„์† ์ณ๋‹ค๋ณด๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋œ๋‹ค.

๋ณด๊ธฐ์— ์—„์ฒญ ์ค‘๊ตฌ๋‚œ๋ฐฉ์ธ๋ฐ, ๋ญ ๋‚ด๊ฐ€ ๋ณผ ๋•Œ ์ดํ•ด๊ฐ€ ์ž˜ ๋˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ~

 

๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰ 2์ฐจ | Notion

centOS 7์—์„œ ์‚ฌ์šฉ์ž์˜ ๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ œํ•œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์€ ?

www.notion.so

 

 

๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰ ์‘์‹œ๋ฃŒ ๋„ˆ๋ฌด ๋น„์‹ธ๋‹ค.

๋ˆ ์ฃผ๊ณ  ์ž๊ฒฉ์ฆ ์–ป๋Š” ๊ธฐ๋ถ„์ด๋‹ค.

 

728x90

'Certification' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐ์ดํ„ฐ ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€ (ADsP)  (0) 2025.06.25
728x90

๋””์ž์ธ ํŒจํ„ด (Design Pattern)

โš™๏ธ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

โš™๏ธ ๊ฐ ๋ชจ๋“ˆ์˜ ์„ธ๋ถ„ํ™”๋œ ์—ญํ• ์ด๋‚˜ ๋ชจ๋“ˆ๋“ค ๊ฐ„์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ˆ˜์ค€์˜ ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„ ๋ฐฉ์•ˆ์„ ์„ค๊ณ„ํ•  ๋•Œ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ˜•์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์‹ ๋˜๋Š” ์˜ˆ์ œ

โš™๏ธ 1995๋…„ GoF(Gang of Four)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์—๋ฆญ ๊ฐ๋งˆ(Erich Gamma), ๋ฆฌ์ฐจ๋“œ ํ—ฌ๋ฆ„(Richard Helm), ๋ž„ํ”„ ์กด์Šจ(Ralph Johnson), ์กด ๋ธ”๋ฆฌ์‹œ๋””์Šค(John Vlissides)๊ฐ€ ๊ตฌ์ฒดํ™” ๋ฐ ์ฒด๊ณ„ํ™”

โš™๏ธ ๋ฐ”ํ€ด๋ฅผ ๋‹ค์‹œ ๋ฐœ๋ช…ํ•˜์ง€ ๋งˆ๋ผ(Don't reinvent the wheel) : ๊ฐœ๋ฐœ ๊ณผ์ • ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ƒˆ๋กœ ํ•ด๊ฒฐ์ฑ…์„ ๊ตฌ์ƒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฌธ์ œ์— ํ•ด๋‹นํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ 

โš™๏ธ ์ง€๊ธˆ๊นŒ์ง€๋„ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์ด๋‚˜ ํ˜„์—…์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด

โš™๏ธ ์œ ํ˜•์— ๋”ฐ๋ผ ์ƒ์„ฑ ํŒจํ„ด 5๊ฐœ, ๊ตฌ์กฐ ํŒจํ„ด 7๊ฐœ, ํ–‰์œ„ ํŒจํ„ด 11๊ฐœ ์ด 23๊ฐœ์˜ ํŒจํ„ด์œผ๋กœ ๊ตฌ์„ฑ

 

์žฅ์ 

โš™๏ธ ๋ฒ”์šฉ์ ์ธ ์ฝ”๋”ฉ ์Šคํƒ€์ผ๋กœ ์ธํ•ด ๊ตฌ์กฐ ํŒŒ์•… ์šฉ์ด

โš™๏ธ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ ํ•ฉ

โš™๏ธ ๊ฒ€์ฆ๋œ ๊ตฌ์กฐ์˜ ์žฌ์‚ฌ์šฉ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ์‹œ๊ฐ„๊ณผ ๋น„์šฉ ์ ˆ์•ฝ

โš™๏ธ ๊ฐœ๋ฐœ์ž ๊ฐ„ ์›ํ™œํ•œ ์˜์‚ฌ์†Œํ†ต ๊ฐ€๋Šฅ

โš™๏ธ ์„ค๊ณ„ ๋ณ€๊ฒฝ ์š”์ฒญ์— ๋Œ€ํ•œ ์œ ์—ฐํ•œ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ

 

๋‹จ์ 

โš™๏ธ ์ดˆ๊ธฐ ํˆฌ์ž ๋น„์šฉ ๋ถ€๋‹ด ๊ฐ€๋Šฅ์„ฑ

โš™๏ธ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์„ค๊ณ„์™€ ๊ตฌํ˜„์„ ๋‹ค๋ฃจ๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—๋Š” ๋ถ€์ ํ•ฉ

 

 


์ƒ์„ฑ ํŒจํ„ด (Creational Pattern)

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ๊ด€๋ จ๋œ ํŒจํ„ด์ด๋‹ค.

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์ฐธ์กฐ ๊ณผ์ •์„ ์บก์Аํ™”ํ•˜์—ฌ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝ๋˜์–ด๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ์— ํฐ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์— ์œ ์—ฐ์„ฑ์„ ๋”ํ•ด์ค€๋‹ค.

 

์ƒ์„ฑ ํŒจํ„ด ์„ค๋ช…
์ถ”์ƒ ํŒฉํ† ๋ฆฌ
(Abstract Factory)
โš™๏ธ ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์„œ๋กœ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ทธ๋ฃน์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์ถ”์ƒ์ ์œผ๋กœ ํ‘œํ˜„
โš™๏ธ ์—ฐ๊ด€๋œ ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๋ฌถ์–ด ํ•œ ๋ฒˆ์— ๊ต์ฒด ๊ฐ€๋Šฅ
๋นŒ๋”
(Builder)
โš™๏ธ ์ž‘๊ฒŒ ๋ถ„๋ฆฌ๋œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฑด์ถ• ํ•˜๋“ฏ์ด ์กฐํ•ฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ
โš™๏ธ ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๊ณผ์ •๊ณผ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์žˆ์–ด, ๋™์ผํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์—์„œ๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ 
ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ
(Factory Method)
โš™๏ธ ๊ฐ์ฒด ์ƒ์„ฑ์„ ์„œ๋ธŒ ํด๋ž˜์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ถ„๋ฆฌํ•˜์—ฌ ์บก์Аํ™”
โš™๏ธ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜ํ•˜๊ณ  ์‹ค์ œ ์ƒ์„ฑ์€ ์„œ๋ธŒ ํด๋ž˜์Šค ๋‹ด๋‹น
= ๊ฐ€์ƒ ์ƒ์„ฑ์ž(Virtual Constructor) ํŒจํ„ด

ํ”„๋กœํ† ํƒ€์ž…
(Prototype)
โš™๏ธ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ
โš™๏ธ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋น„์šฉ์ด ํฐ ๊ฒฝ์šฐ ์ฃผ๋กœ ์ด์šฉ
์‹ฑ๊ธ€ํ†ค
(Singleton)
โš™๏ธ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์–ด๋””์„œ๋“  ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ์ฐธ์กฐํ•  ์ˆ˜๋Š” ์—†์Œ
โš™๏ธ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋ฟ์ž„์„ ๋ณด์žฅ
โš™๏ธ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„ ์ตœ์†Œํ™”

 

 

 

๊ตฌ์กฐ ํŒจํ„ด (Structural Pattern)

ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๋” ํฐ ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํŒจํ„ด์ด๋‹ค.

๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋„์™€์ค€๋‹ค.

 

๊ตฌ์กฐ ํŒจํ„ด ์„ค๋ช…
์–ด๋Œ‘ํ„ฐ
(Adapter)
โš™๏ธ ํ˜ธํ™˜์„ฑ์ด ์—†๋Š” ํด๋ž˜์Šค๋“ค์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ํŒจํ„ด
โš™๏ธ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋•Œ ์ด์šฉ
๋ธŒ๋ฆฌ์ง€
(Bridge)
โš™๏ธ ๊ตฌํ˜„๋ถ€์—์„œ ์ถ”์ƒ์ธต์„ ๋ถ„๋ฆฌํ•˜์—ฌ, ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ
โš™๏ธ ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„์„ ๋‘ ๊ฐœ์˜ ๋ณ„๋„ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„
์ปดํฌ์ง€ํŠธ
(Composite)
โš™๏ธ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง„ ๋ณตํ•ฉ ๊ฐ์ฒด์™€ ๋‹จ์ผ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ ์—†์ด ๋‹ค๋ฃจ๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
โš™๏ธ ๊ฐ์ฒด๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋“ฏ์ด ๋ณตํ•ฉ ๊ฐ์ฒด ์•ˆ์— ๋ณตํ•ฉ ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ตฌ์กฐ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
(Decorator)
โš™๏ธ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ๋Šฅ๋™์ ์œผ๋กœ ๊ธฐ๋Šฅ๋“ค์„ ํ™•์žฅ
โš™๏ธ ์ž„์˜์˜ ๊ฐ์ฒด์— ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์„ ๋ง๋ถ™์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„
ํผ์‹ธ๋“œ
(Facade)
โš™๏ธ ๋ณต์žกํ•œ ์„œ๋ธŒ ํด๋ž˜์Šค๋“ค์„ ํ”ผํ•ด ๋” ์ƒ์œ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ์„œ๋ธŒ ํด๋ž˜์Šค๋“ค์˜ ๊ธฐ๋Šฅ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉ
โš™๏ธ ์„œ๋ธŒ ํด๋ž˜์Šค๋“ค ์‚ฌ์ด์˜ ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” Wrapper ๊ฐ์ฒด ํ•„์š”
ํ”Œ๋ผ์ด์›จ์ดํŠธ
(Flyweight)
โš™๏ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ์ ˆ์•ฝ
โš™๏ธ ๋‹ค์ˆ˜์˜ ์œ ์‚ฌ ๊ฐ์ฒด ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ
ํ”„๋ก์‹œ
(Proxy)
โš™๏ธ ์ ‘๊ทผ์ด ์–ด๋ ค์šด ๊ฐ์ฒด์™€ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋ ค๋Š” ๊ฐ์ฒด ์‚ฌ์ด์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ•  ์ˆ˜ํ–‰
โš™๏ธ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ๋ฉ”๋ชจ๋ฆฌ์˜ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด๋กœ์˜ ์ ‘๊ทผ ๋“ฑ์— ์ฃผ๋กœ ์ด์šฉ

 

 

 

ํ–‰์œ„ ํŒจํ„ด (Behavioral Pattern)

ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์ฑ…์ž„ ๋ถ„๋ฐฐ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋กœ ๋ถ„๋ฐฐํ•˜๋ฉด์„œ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™” ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

ํ–‰์œ„ ํŒจํ„ด ์„ค๋ช…
์ฑ…์ž„ ์—ฐ์‡„
(Chain of Responsibility)
โš™๏ธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋‘˜ ์ด์ƒ ์กด์žฌํ•˜์—ฌ ํ•œ ๊ฐ์ฒด๊ฐ€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ๊ฐ์ฒด๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ˜•ํƒœ
โš™๏ธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ ๊ฐ์ฒด๋“ค์ด ๊ณ ๋ฆฌ(Chain)๋กœ ๋ฌถ์—ฌ ์žˆ์–ด ์š”์ฒญ์ด ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ณ ๋ฆฌ๋ฅผ ๋”ฐ๋ผ ์ฑ…์ž„์ด ๋„˜์–ด๊ฐ
์ปค๋งจ๋“œ 
(Command)
โš™๏ธ ์š”์ฒญ์„ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์บก์Аํ™”ํ•˜์—ฌ ์žฌ์ด์šฉํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋„๋ก ์š”์ฒญ์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ์— ๋‚จ๊น€
โš™๏ธ ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ข… ๋ช…๋ น์–ด๋“ค์„ ์ถ”์ƒ ํด๋ž˜์Šค์™€ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹จ์ˆœํ™”
์ธํ„ฐํ”„๋ฆฌํ„ฐ
(Interpreter)
โš™๏ธ ์–ธ์–ด์— ๋ฌธ๋ฒ• ํ‘œํ˜„์„ ์ •์˜
โš™๏ธ SQL์ด๋‚˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉ
๋ฐ˜๋ณต์ž
(Iterator)
โš™๏ธ ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ๊ฐ™์ด ์ ‘๊ทผ์ด ์žฆ์€ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉ
โš™๏ธ ๋‚ด๋ถ€ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์˜ ๋…ธ์ถœ ์—†์ด ์ˆœ์ฐจ์  ์ ‘๊ทผ ๊ฐ€๋Šฅ
์ค‘์žฌ์ž
(Mediator)
โš™๏ธ ์ˆ˜๋งŽ์€ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ๋ณต์žกํ•œ ์ƒํ˜ธ์ž‘์šฉ(Interface)์„ ์บก์Аํ™”ํ•˜์—ฌ ๊ฐ์ฒด๋กœ ์ •์˜ํ•˜๋Š” ํŒจํ„ด
โš™๏ธ ๊ฐ์ฒด ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์ค„์—ฌ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ
โš™๏ธ ์ค‘์žฌ์ž๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ํ†ต์ œ์™€ ์ง€์‹œ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰

๋ฉ”๋ฉ˜ํ†  
(Memento)
โš™๏ธ ํŠน์ • ์‹œ์ ์—์„œ์˜ ๊ฐ์ฒด ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๊ฐ์ฒดํ™”ํ•จ์œผ๋กœ์จ ์ดํ›„ ์š”์ฒญ์— ๋”ฐ๋ผ ๊ฐ์ฒด๋ฅผ ํ•ด๋‹น ์‹œ์ ์˜ ์ƒํƒœ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
โš™๏ธ ctrl + z์™€ ๊ฐ™์ด ๋˜๋Œ๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ฃผ๋กœ ์ด์šฉ
์˜ต์„œ๋ฒ„
(Observer)
โš™๏ธ ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉด ๊ฐ์ฒด์— ์ƒ์†๋˜์–ด ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์—๊ฒŒ ๋ณ€ํ™”๋œ ์ƒํƒœ๋ฅผ ์ „๋‹ฌ
โš™๏ธ ์ฃผ๋กœ ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ ๊ฐ„์— ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑ ๋ฐ ๋ฐœํ–‰(Publish)ํ•˜๊ณ , ์ˆ˜์‹ (Subscribe)ํ•ด์•ผ ํ•  ๋•Œ ์ด์šฉ
์ƒํƒœ
(State)
โš™๏ธ ๊ฐ์ฒด์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ผํ•œ ๋™์ž‘์„ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ
โš™๏ธ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์บก์Аํ™”ํ•˜๊ณ , ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ
์ „๋žต 
(Strategy)
โš™๏ธ ๋™์ผํ•œ ๊ณ„์—ด์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์บก์Аํ™”ํ•˜์—ฌ ์ƒํ˜ธ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ •์˜
โš™๏ธ ํด๋ผ์ด์–ธํŠธ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์›ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ ์—†์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ
(Template Method)
โš™๏ธ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ๊ณจ๊ฒฉ์„ ์ •์˜ํ•˜๊ณ , ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์„ธ๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋Š” ๊ตฌ์กฐ
โš™๏ธ ์œ ์‚ฌํ•œ ์„œ๋ธŒ ํด๋ž˜์Šค๋ฅผ ๋ฌถ์–ด ๊ณตํ†ต๋œ ๋‚ด์šฉ์„ ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์ •์˜ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•ด์คŒ
๋ฐฉ๋ฌธ์ž
(Visitor)
โš™๏ธ ๊ฐ ํด๋ž˜์Šค๋“ค์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์—์„œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ
โš™๏ธ ๋ถ„๋ฆฌ๋œ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์€ ๊ฐ ํด๋ž˜์Šค๋ฅผ ๋ฐฉ๋ฌธ(Visit)ํ•˜์—ฌ ์ˆ˜ํ–‰

 

 

 


์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ๊ธฐ์ถœ๋ฌธ์ œ

22๋…„ 4์›”

GoF(Gang of Four) ๋””์ž์ธ ํŒจํ„ด์„ ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰๋™ ํŒจํ„ด์˜ ์„ธ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ๋•Œ, ๊ตฌ์กฐ ํŒจํ„ด์ด ์•„๋‹Œ ๊ฒƒ์€?

โ‘  Adapter ํŒจํ„ด

โ‘ก Bridge ํŒจํ„ด

โ‘ข Builder ํŒจํ„ด

โ‘ฃ Proxy ํŒจํ„ด

 

→ ๋‹ต : โ‘ข 

 

 

22๋…„ 3์›”

GoF (Gang of Four) ๋””์ž์ธ ํŒจํ„ด์—์„œ ์ƒ์„ฑ(Creational) ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์€?

โ‘  ์ปดํฌ์ง€ํŠธ(Composite)

โ‘ก ์–ด๋Œ‘ํ„ฐ(Adapter)

โ‘ข ์ถ”์ƒ ํŒฉํ† ๋ฆฌ(Abstract Factory)

โ‘ฃ ์˜ต์„œ๋ฒ„(Observer)

 

→  ๋‹ต : โ‘ข

 

 

22๋…„ 3์›”

์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ด๊ณ  ๋ฐ˜๋ณต์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ฌด์—‡์ด๋ผ๊ณ  ํ•˜๋Š”๊ฐ€?

โ‘  ๋ชจ๋“ˆ ๋ถ„ํ•ด

โ‘ก ๋””์ž์ธ ํŒจํ„ด

โ‘ข ์—ฐ๊ด€ ๊ด€๊ณ„

โ‘ฃ ํด๋ž˜์Šค ๋„์ถœ

 

→   ๋‹ต : โ‘ก

 

 

21๋…„ 8์›”, 20๋…„ 9์›”

GoF(Gang of Four) ๋””์ž์ธ ํŒจํ„ด๊ณผ ๊ด€๋ จํ•œ ์„ค๋ช…์œผ๋กœ ํ‹€๋ฆฐ ๊ฒƒ์€?

โ‘  ๋””์ž์ธ ํŒจํ„ด์„ ๋ชฉ์ (Purpose)์œผ๋กœ ๋ถ„๋ฅ˜ํ•  ๋•Œ ์ƒ์„ฑ, ๊ตฌ์กฐ, ํ–‰์œ„๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

โ‘ก Strategy ํŒจํ„ด์€ ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์กฐ ํŒจํ„ด์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์ œํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.

โ‘ข ํ–‰์œ„ ํŒจํ„ด์€ ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด๋“ค์ด ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฑ…์ž„์„ ๋ถ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ๋‹ค.

โ‘ฃ Singleton ํŒจํ„ด์€ ํŠน์ • ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค์ง ํ•˜๋‚˜์ž„์„ ๋ณด์žฅํ•˜๊ณ , ์ด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค.

 

→  ๋‹ต : โ‘ก

 

 

21๋…„ 5์›”

GoF(Gang of Four) ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ํ‹€๋ฆฐ ๊ฒƒ์€?

โ‘  Factory Method Pattern์€ ์ƒ์œ„ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ , ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

โ‘ก Prototype Pattern์€ Prototype์„ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

โ‘ข Bridge Pattern์€ ๊ธฐ์กด์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ํด๋ž˜์Šค์— ๊ธฐ๋Šฅ ๋ฐœ์ƒ ์‹œ ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ๋งž์ถฐ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

โ‘ฃ Mediator Pattern์€ ๊ฐ์ฒด๊ฐ„์˜ ํ†ต์ œ์™€ ์ง€์‹œ์˜ ์—ญํ• ์„ ํ•˜๋Š” ์ค‘์žฌ์ž๋ฅผ ๋‘์–ด ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.

 

→  ๋‹ต : โ‘ข

 

 

21๋…„ 5์›”

Gof(Gang of Four) ๋””์ž์ธ ํŒจํ„ด ์ค‘ ์ƒ์„ฑ ํŒจํ„ด์œผ๋กœ ์˜ณ์€ ๊ฒƒ์€?

โ‘  Singleton Pattern

โ‘ก Adapter Pattern

โ‘ข Decorator Pattern

โ‘ฃ State Pattern

 

→  ๋‹ต : โ‘  

 

 

20๋…„ 9์›”

๋””์ž์ธ ํŒจํ„ด ์‚ฌ์šฉ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฒƒ์€?

โ‘  ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์กฐ ํŒŒ์•…์ด ์šฉ์ดํ•˜๋‹ค.

โ‘ก ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„์˜ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค.

โ‘ข ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•œ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋œ๋‹ค.

โ‘ฃ ์ ˆ์ฐจํ˜• ์–ธ์–ด์™€ ํ•จ๊ป˜ ์ด์šฉ๋  ๋•Œ ํšจ์œจ์ด ๊ทน๋Œ€ํ™”๋œ๋‹ค. 

 

> ๋‹ต : โ‘ฃ

 

 

20๋…„ 9์›”

๋‹ค์Œ ๋‚ด์šฉ์ด ์„ค๋ช…ํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์€?

  • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ธ์Šคํ„ด์Šคํ™” ๋  ๊ฒƒ์ธ์ง€๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ๊ฒฐ์ •ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • Virtual-Constructor ํŒจํ„ด์ด๋ผ๊ณ ๋„ ํ•จ

โ‘  Visitor ํŒจํ„ด

โ‘ก Observer ํŒจํ„ด

โ‘ข Factory Method ํŒจํ„ด 

โ‘ฃ Bridge ํŒจํ„ด

 

> ๋‹ต : โ‘ข

 

 

20๋…„ 8, 6์›”

๋””์ž์ธ ํŒจํ„ด ์ค‘์—์„œ ํ–‰์œ„์  ํŒจํ„ด์— ์†ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€?

โ‘  ์ปค๋งจ๋“œ(Command) ํŒจํ„ด

โ‘ก ์˜ต์„œ๋ฒ„(Observer) ํŒจํ„ด

โ‘ข ํ”„๋กœํ† ํƒ€์ž…(Prototype) ํŒจํ„ด

โ‘ฃ ์ƒํƒœ(State) ํŒจํ„ด

 

> ๋‹ต : โ‘ข

728x90
728x90

 

 

ใ… ใ… 

์ด๋ฒˆ์—๋Š” ์•ฝ ์ผ์ฃผ์ผ ์ •๋„ ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ–ˆ๋‹ค.

 

 

์œ ๋ช…ํ•œ ๋ฏผํŠธ์ฑ… ์ƒ€๋Š”๋ฐ ๋ชจ๋“  ์ž๊ฒฉ์ฆ ๊ต์žฌ๊ฐ€ ๊ทธ๋ ‡๋“ฏ ์‚ฌ์‹ค์ƒ ๊ฑฐ์˜ ์•ˆ ๋ดค๊ณ ,

 

1. ์•„๋‹ตํ„ฐ ์š”์•ฝ๋…ธํŠธ

2. ๊ฟˆ๊พธ๋Š”๋ผ์ด์–ธ ์š”์•ฝ๋…ธํŠธ

 

๋‘ ๊ฐœ ๊ตฌ๋งคํ•ด์„œ ๋ดค๋‹ค.

 

 

 

์•„๋‹ตํ„ฐ๊ต์œก

IT์ž๊ฒฉ์ฆ ๋ฐ ๊ธฐํƒ€ IT์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฐ•์˜๋ฅผ ๋‹ค๋ฃจ๋Š” ์•„๋‹ตํ„ฐ๊ต์œก์ž…๋‹ˆ๋‹ค. โ˜… ADsP, ๋น…๋ฐ์ดํ„ฐ๋ถ„์„๊ธฐ์‚ฌ, SQLD, ๊ฒฝ์˜์ •๋ณด์‹œ๊ฐํ™”๋Šฅ๋ ฅ ๋“ฑ โ˜…

www.itdapteredu.co.kr

 

๊ฟˆ๊พธ๋Š”๋ผ์ด์–ธ ๋ฐ์ดํ„ฐ๋ถ„์„ ์ค€์ „๋ฌธ๊ฐ€(ADsP) ํ•ต์‹ฌ ์š”์•ฝ๋…ธํŠธ : ๊ฟˆ๊พธ๋Š”๋ผ์ด์–ธ

[๊ฟˆ๊พธ๋Š”๋ผ์ด์–ธ] ๊ฟˆ๊พธ๋Š”๋ผ์ด์–ธ ์š”์•ฝ๋…ธํŠธ

smartstore.naver.com

 

 

๊ทผ๋ฐ ๋ฏผํŠธ์ฑ… ๊ตฌ๋งคํ•˜๋ฉด ์ข‹์€ ์  = QR๋กœ ๊ธฐ์ถœ๋ฌธ์ œ ํ’€ ์ˆ˜ ์žˆ๋Š” ์–ดํ”Œ(๋ฐ์ดํ„ฐ์—๋“€PT)์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ธฐ์ถœ์€ ์™”๋‹ค ๊ฐ”๋‹ค ์‹œ๊ฐ„๋‚  ๋•Œ ์Šค๋งˆํŠธํฐ์œผ๋กœ ํ’€์—ˆ๋‹ค.

๊ทผ๋ฐ ๊ตฌ๊ธ€๋งํ•ด์„œ ๊ธฐ์ถœ ๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๊ตณ์ด ์ฑ…์„ ์‚ฌ์•ผํ•˜๋‚˜ ์‹ถ๋‹ค.

 

 

+

์•„๋‹ตํ„ฐ ์œ ํŠœ๋ธŒ ๋ดค๋‹ค.

์ข‹์•˜๋‹ค.

์š”์‹œ !

 

 

 

 

 

25.05.17. (a.k.a. ADsP ์‹œํ—˜๋‚ )

ํŒŒ์›Œ P๋Š” ๋Šฆ๊ฒŒ ์ ‘์ˆ˜ํ•ด์„œ ์ด๊ฑฐ ๋ณด๋Ÿฌ ์„œ์šธ๊นŒ์ง€ ๋‹ค๋…€์™”๋‹ค.

 

 

 

๋ฐ์ดํ„ฐ ์ „๋ฌธ๊ฐ€ ํฌ๋Ÿผ (๋น…๋ฐ์ดํ„ฐ๋ถ„์„๊ธฐ์‚ฌ... : ๋„ค์ด๋ฒ„ ์นดํŽ˜

๋น…๋ฐ์ดํ„ฐ๋ถ„์„๊ธฐ์‚ฌ, ADP, ADsP, SQLP, SQLD, DAP, DAsP, BIS ์ž๊ฒฉ์ฆ ์ทจ๋“ ๋“ฑ ๋ฐ์ดํ„ฐ ์ „๋ฌธ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์ž…๋‹ˆ๋‹ค.

cafe.naver.com

์‹œํ—˜ ๋๋‚˜๊ณ  ↑ ์—ฌ๊ธฐ ๋“ค์–ด๊ฐ€๋ฉด ์ง‘๋‹จ์ง€์„ฑ์œผ๋กœ ๋‹ต์„ ๋งž์ถฐ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๋‹ค.

 

 

 

๊ฐ€์ง„๊ฒŒ ์ •์ฒ˜๊ธฐ, SQLD, OPIc ๋ฐ–์— ์—†์–ด์„œ ,,

์ด๋ฒˆ ํ•˜๋ฐ˜๊ธฐ ํ•  ์ผ = ์ž๊ฒฉ์ฆ ์ˆ˜์ง‘

 

ADsP ํ–ˆ๊ณ ,

 

์ด์ œ

 

๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ2๊ธ‰

ํ•œ๊ตญ์‚ฌ1๊ธ‰

์ปดํ™œ1๊ธ‰

๋น…๋ฐ์ดํ„ฐ๋ถ„์„๊ธฐ์‚ฌ

+ ์‹œ๊ฐ„ ๋˜๋ฉด ์–ดํ•™ 1๊ฐœ ๋” ,,?

 

์ด๊ฑฐ ๋‹ค ๋ชจ์œผ๋ฉด ๊ณต๊ธฐ์—… ์„œ๋ฅ˜๋Š” ์•ˆ ๋–จ์–ด์งˆ ๊ฒƒ ๊ฐ™์•„.

 

 

 

 

 

 

 

 

728x90

'Certification' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 2๊ธ‰  (1) 2025.07.08
728x90

ํ•œ์–‘๋Œ€ํ•™๊ต ์ด์„๋ณต ๊ต์ˆ˜๋‹˜์˜ 2017๋…„ 2ํ•™๊ธฐ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

๋ชฉ์ฐจ


DNS ๊ฐ€ UDP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ด์œ 

HTTP, DNS ๋‘˜ ๋‹ค Application Layer Protocol ๋กœ์„œ Transport Layer Protocol ์ธ TCP ์™€ UDP ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. HTTP ๊ฐ€ TCP ๊ธฐ๋ฐ˜์ด๋ผ๋Š” ๊ฒƒ์€ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด DNS ๋Š” ์–ด๋–ค ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ• ๊นŒ ? ์ง๊ด€์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์— TCP ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ๋งŒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ  ํ˜„์žฌ DNS ๋Š” UDP ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๊ฐ์ˆ˜ํ•˜๊ณ ๋„ ์™œ DNS ๋Š” UDP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ ? ์‹ค์ œ TCP ๋Š” UDP ์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ , ๋ณด๋‚ด๋Š” ์ „์†ก ๊ณผ์ •์—์„œ ๋”œ๋ ˆ์ด๊ฐ€ ์žˆ๋‹ค. DNS ๋Š” ๋‹จ์ง€ ์•„์ฃผ ํฌ๊ธฐ๊ฐ€ ์ ์€ ๋ฐ์ดํ„ฐ์ธ ์ฃผ์†Œ๋งŒ ์•Œ๋ฉด ๋˜๋Š”๋ฐ, TCP ๋Š” ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๊ทธ๋Ÿผ  ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ• ๊นŒ ? HTTP ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์—์„œ๋Š” HTTP Response ๋‚ด ๋ฐ์ดํ„ฐ ์–‘์ด ๋งค์šฐ ๋งŽ์„ ์ˆ˜๋„ ์žˆ๊ณ , ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DNS ์˜ ๊ฒฝ์šฐ DNS Query ๋‚ด Response ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ๋งค์šฐ ์ž‘๋‹ค. ํ˜ธ์ŠคํŠธ ๋„ค์ž„์„ ์ „์†กํ•˜๊ณ , IP ์ฃผ์†Œ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด ๋์ด๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ๋ช‡ ๋ฐ”์ดํŠธ ์ฑ„ ๋˜์ง€ ์•Š๋Š”๋‹ค. ์œ ์‹ค๋  ํ™•๋ฅ ์ด ์ ์„ ๋ฟ๋”๋Ÿฌ, ์œ ์‹ค์ด ๋˜๋”๋ผ๋„ ํฐ ๋ถ€๋‹ด์ด ์—†๋‹ค. ๋ฌด์—‡๋ณด๋‹ค UDP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋น ๋ฅด๊ณ , TCP ๋ณด๋‹ค ํ˜„์‹ค์ ์œผ๋กœ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ DNS๋Š” ํ˜„์žฌ UDP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

 


์†Œ์ผ“ (Socket)

  • An interface between applicatioin and network
    • The application creates a socket
    • The socket type dictates the style of communication
      • reliable vs best effort
      • connection-oriented vs connectionless
  • Once configured, the application can
    • pass data to the socket for networt transmission
    • receive data from the socket (transmitted through the networt by some other host)

 


์†Œ์ผ“์˜ ์ข…๋ฅ˜ (Two essential types of sockets)

SOCK_STREAM

  • a.k.a. TCP
  • reliable delivery
  • in-order guaranteed
  • connection-oriented
  • bidirectional

 

SOCK_DGRAM

  • a.k.a.  UDP
  • unreliable delivery
  • no order guarantees
  • no notion of "connection"
    • app indicates dest, for each packet
  • can send or receive

 

 


Socket Functions (TCP case)

TCP ๊ธฐ๋ฐ˜์˜ ์†Œ์ผ“ ํ†ต์‹ ์„ ์œ„ํ•œ C ์–ธ์–ด ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

 

 

์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

TCP Server 

  • socket() :์ด ํ•จ์ˆ˜๋ฅผ call ํ•˜๋ฉฐ Socket API ๋ฅผ ์‚ฌ์šฉ์„ ์‹œ์ž‘ํ•œ๋‹ค. socket ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ TCP Socket, UDP Socket ์„ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • bind() :  ์ƒ์„ฑํ•œ Socket ์„ ๋ช‡ ๋ฒˆ port ์— ์žฅ์ฐฉํ• ์ง€ ์ •ํ•œ๋‹ค.
  • listen() : ์„œ๋ฒ„์— ํŠนํ™”๋œ ํ•จ์ˆ˜์ด๋‹ค. ์ด ์†Œ์ผ“์„ ๋“ฃ๋Š” ์šฉ๋„๋กœ ์“ฐ๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์„œ๋ฒ„์ด๋ฏ€๋กœ ์•ก์…˜์„ ์ทจํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • accept() : bloking ํ•จ์ˆ˜์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ Request ๊ฐ€ ์˜ฌ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

 

blocks until connection from client

 

TCP Client

  • socket() : ์—ญ์‹œ Socket ์„ ์‹œ์ž‘ํ•œ๋‹ค.
  • connect() : ์ƒ๋Œ€ Server ์— TCP connection ์„ ๋งบ๋Š”๋‹ค. ์„œ๋ฒ„ ์ฃผ์†Œ ๋“ฑ์ด ๋“ค์–ด๊ฐ„๋‹ค. bloking ํ•จ์ˆ˜์ด๋‹ค.

 

TCP three-way handshaking

 

์—ฐ๊ฒฐ ํ›„, TCP Client ๋Š” write()  ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ , TCP Server ๋Š” read() ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋‘ ํ•จ์ˆ˜ ์—ญ์‹œ blocking  ํ•จ์ˆ˜์ด๋‹ค.

 

ํ†ต์‹  ์™„๋ฃŒ ํ›„, close() ๋ฅผ ํ†ตํ•ด ์†Œ์ผ“์„ ์ข…๋ฃŒํ•œ๋‹ค.

 

 

UDP ๊ธฐ๋ฐ˜ ์†Œ์ผ“ ํ†ต์‹ ์€ ๊ฐ„๋‹จํ•˜๋‹ค. Server ์ธก์—์„œ Socket ์„ ์—ด๊ณ  Bind ํ•˜๋ฉด, Client ์ธก์—์„œ๋„ Socket ์„ ์—ด๊ณ  ๋ฐ”๋กœ ํ†ต์‹ ํ•˜๋ฉด ๋œ๋‹ค.

 

 


Reference

 

WuT Com-Server: TCP/IP sockets application

Are you satisfied with our site but still have suggestions for improvement? Leave your comments here:

www.wut.de

 

728x90

'CS > Network' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ์ด์–ด (Application Layer) : HTTP ์™€ DNS  (0) 2023.06.27
Transport Layer : TCP์™€ UDP  (1) 2022.07.11
728x90

์บ์‹œ ์ผ๊ด€์„ฑ์ด๋ž€ ๊ฐ๊ฐ ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ ์บ์‹œ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์ธ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์บ์‹œ ์ผ๊ด€์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ์ƒํ™ฉ์„ ๋‘๊ณ  ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹  ๋งŒ์˜ ๋กœ์ปฌ ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ, ์บ์‹œ์˜ ๊ฐฑ์‹ ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์บ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” Conditional GET ์ด๋‹ค.

ํ•œ์–‘๋Œ€ํ•™๊ต ์ด์„๋ณต ๊ต์ˆ˜๋‹˜์˜ 2017๋…„ 2ํ•™๊ธฐ ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

 

 

๋ชฉ์ฐจ


์บ์‹œ ์ผ๊ด€์„ฑ (Cache Coherence)

 

 

์บ์‹œ ์ผ๊ด€์„ฑ์ด๋ž€ ๊ฐ๊ฐ ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ์ปฌ ์บ์‹œ ๋ฐ์ดํ„ฐ์™€ ๋ฉ”์ธ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์บ์‹œ ์ผ๊ด€์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ์ƒํ™ฉ์„ ๋‘๊ณ  ์บ์‹œ ์ผ๊ด€์„ฑ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž์‹  ๋งŒ์˜ ๋กœ์ปฌ ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์„ ๋•Œ,  ์บ์‹œ์˜ ๊ฐฑ์‹ ์œผ๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์บ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” Conditional GET ์ด๋‹ค.

 

 

Conditional GET

don't send object if cache has up-to-date cached version

  • no object transmission delay
  • lower link utilization

 

 if-modified-since: <date>  HTTP ์š”์ฒญ ํ—ค๋”๋Š” ๋‚ ์งœ์™€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์กฐ๊ฑด๋ถ€ ์š”์ฒญ์ด๋‹ค. ์„œ๋ฒ„๋Š” ์ง€์ •๋œ ๋‚ ์งœ ์ดํ›„ ์ˆ˜์ •์ด ๋˜์—ˆ๋‹ค๋ฉด HTTP Status 200 ๊ณผ ํ•จ๊ป˜ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค (Object)๋ฅผ ๋Œ๋ ค์ค€๋‹ค. ํ•˜์ง€๋งŒ ๋งŒ์•ฝ ์ˆ˜์ •๋˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ์€ ๋ฆฌ์†Œ์Šค ์—†์ด HTTP Status 304 (Not Modified) ์‘๋‹ต์„ ํ•œ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€๋Š” HTTP ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ด๋‹ค.

์ด์ œ๋ถ€ํ„ฐ ๋˜ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ์ธ DNS ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 


DNS (Domain Name  System)

How to map between IP address and name, and vice versa ?

  • distributed database : implemented in hierarchy of many name servers
  • application-layer protocol : hosts, name servers communicate to resolve names 

 

ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ๋จธ์‹ ์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์นญํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ฆ‰,  ์ธํ„ฐ๋„ท ์ƒ์˜ ํ•œ ์ปดํ“จํ„ฐ์—์„œ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์†Œ๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. IP ์ฃผ์†Œ์™€ Port ๋ฒˆํ˜ธ๊ฐ€ ๋ฐ”๋กœ ํ•ด๋‹น ์ฃผ์†Œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. Port ๋ฒˆํ˜ธ๋Š” ํ†ต์ƒ์ ์œผ๋กœ ๊ณ ์ •๋œ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด HTTP ๋Š” 80์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ IP ์ฃผ์†Œ๋Š” 32 bit ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ณ ์œ ํ•œ ์ฃผ์†Œ์ด๋‹ค. ์ด๋ฅผ ์ผ์ผ์ด ๊ธฐ์–ตํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์นœ๊ตฌ๋“ค์—๊ฒŒ ์—ฐ๋ฝํ•˜๊ธฐ ์œ„ํ•œ ์ „ํ™”๋ฒˆํ˜ธ๋ฅผ ์ผ์ผ์ด ์™ธ์šฐ๊ธฐ ํž˜๋“  ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋งˆ์น˜ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์™€ ๊ฐ™์ด ์•Œ์•„๋ณด๊ธฐ ์‰ฌ์šด ์˜๋‹จ์–ด (Name Server)๋ฅผ ๊ฐ ์ฃผ์†Œ์™€ ๋งคํ•‘์‹œํ‚ค์ž๋Š” ์ƒ๊ฐ์—์„œ DNS ๊ฐœ๋…์ด ์ƒ๊ฒจ๋‚ฌ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ๊ธ€์˜ Name Server๋Š”  www.google.com  ์ด๊ณ , IP Address๋Š” 123.xxx... ์ธ ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๋ฌธ์ œ๋Š” ์„ธ๊ณ„์˜ ๋ชจ๋“  ์„œ๋ฒ„ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— Access ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋„ ๋ฌด์ˆ˜ํžˆ ๋งŽ๊ณ , ๊ฒ€์ƒ‰ ์‹œ๊ฐ„๋„ ๋ฐฉ๋Œ€ํ•˜๋‹ค. ๋˜ํ•œ, ๋น„์œ ๋ฅผ ํ•˜์ž๋ฉด DNS๋Š” ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „ํ™”๋ฅผ ๊ฑธ๊ธฐ ์œ„ํ•œ ์ค€๋น„ ์šด๋™๊ณผ ๊ฐ™๋‹ค. ํ•ต์‹ฌ์€ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ์ „ํ™”๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด DNS๋Š” ์ „ํ™”๋ฅผ ๊ฑธ๊ธฐ ์œ„ํ•ด ์ „ํ™”๋ฒˆํ˜ธ๋ถ€๋ฅผ ์ฐพ์•„๋ณด๋Š” ๋ถ€๊ฐ€์ ์ธ ํ–‰๋™์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋ถ„์‚ฐ ์‹œ์Šคํ…œ

๋ฌด์—‡๋ณด๋‹ค ๋งŒ์•ฝ ์ •์ „์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ์ž ์‹œ ๋‹ค์šด๋œ๋‹ค๋ฉด ์ „์„ธ๊ณ„ ์‚ฌ๋žŒ๋“ค์€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ (SPOF)๋ฅผ ์•ˆ๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง€๊ธˆ์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์กด์žฌํ•œ๋‹ค.

 

 

" SPOF (single point of failure, ๋‹จ์ผ ์žฅ์• ์ ) "

์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘์—์„œ, ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์ฒด ์‹œ์Šคํ…œ์ด ์ค‘๋‹จ๋˜๋Š” ์š”์†Œ๋ฅผ ๋งํ•œ๋‹ค.

 

 

DNS Query 

๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•  ๋•Œ ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์–ด๋–ค ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ œ์–ดํ•œ๋‹ค.

์ด ์š”์ฒญ์„ ์ฟผ๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

DNS Query ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

๋ฐ˜๋ณต์  ์งˆ์˜ (Iterative Query)

์ตœ์ข… IP ์ฃผ์†Œ๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๊ณ„์†ํ•ด์„œ Local DNS ์„œ๋ฒ„๊ฐ€ ๋ฐ˜๋ณตํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ž…์žฅ์—์„œ๋Š” Root ์— ์ ‘๊ทผํ•  ์ผ์ด ๊ฑฐ์˜ ์—†๋‹ค.

 

์žฌ๊ท€์  ์งˆ์˜ (Recursive Query)

์‚ฌ์šฉ์ž๊ฐ€ Local DNS ์„œ๋ฒ„์— Query ๋ฅผ ๋ณด๋‚ด๋ฉด Local DNS ์„œ๋ฒ„๊ฐ€ Root Name ์„œ๋ฒ„์— Query๋ฅผ ๋ณด๋‚ด๊ณ , Root Name ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ์„œ๋ฒ„์— ์—†๋‹ค๋ฉด ํ•ด๋‹น TLD ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋Š” ์‹์œผ๋กœ, ์‹ค์ œ ๋„๋ฉ”์ธ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„๊นŒ์ง€  Query๊ฐ€ ์ด๋™ํ•˜์—ฌ IP ์ฃผ์†Œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์–ป๋Š”๋‹ค.

 

์‹ค์ œ DNS ์„œ๋ฒ„๋Š” ๋ฐ˜๋ณต๊ณผ ์žฌ๊ท€๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ๋‹ค.

 

์žฌ๊ท€์  DNS ๊ฐ€ ํŠธ๋ž˜ํ”ฝ์„ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ผ์šฐํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

๋„๋ฉ”์ธ ์ฒด๊ณ„

 

 

๐Ÿ’ก DNS : a distributed, hierachical database

client wants IP for www.amazon.com  

  • client queries root server to find com DNS server
  • client queries .com DNS server to get amazon.com DNS server
  • client queries amazon.com DNS server to get IP address for www.amazon.com  

 

๐Ÿ’ก DNS : root name servers

contacted by local name server that ccan not resolve name 

  • contacts authoritative name server if name mapping not known 
  • gets mapping
  • returns mapping to local name server

 

๐Ÿ’ก TLD, authoritative servers

top-level domain (TLD) servers

  • responsible for com, org, net, edu, aero, jobs, museums, and all top-level country domains (e.g. uk, fr)
  • network solutions maintains servers for .com TLD
  • educause for .edu TLD

 

authoriative DNS servers

  • organization's own DNS server(s), providing authoritative hostname to IP mappings for organization's named hosts
  • can be maintained by organization or service provider
  • second-level domain (SLD) servers

 

 

DNS records

distributed db storing resource records (RR)

RR format : (name, value, type, ttl)

 

๊ถŒํ•œ ์žˆ๋Š” DNS ์„œ๋ฒ„์— ์žˆ๋Š” ๋ช…๋ น์œผ๋กœ์„œ, ๋„๋ฉ”์ธ์— ์—ฐ๊ณ„๋œ IP ์ฃผ์†Œ ๋ฐ ํ•ด๋‹น ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์ด ๋ ˆ์ฝ”๋“œ๋Š” DNS ๊ตฌ๋ฌธ์ด๋ผ๊ณ  ํ•˜๋Š” ์ผ๋ จ์˜ ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. DNS  ๋ ˆ์ฝ”๋“œ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Name, Value, Type, TTL ์ด ์žˆ๋‹ค.Type ์— ๋”ฐ๋ผ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๊ฐ€ ๊ฒฐ์ •์ด ๋œ๋‹ค. ์—ฌ๋Ÿฌ type ์ค‘, A ์™€ NS ๊ฐ€ ์žˆ๋‹ค.

 

type = A

  • name is hostname
  • value is IP address

 

type = NS

  • name is domain
  • value is hostname of authoritative name server for this domain

 

๐Ÿ”Ž TTL (Time to live) 
 ์ปดํ“จํ„ฐ๋‚˜ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. 

DNS ์—์„œ ๊ถŒํ•œ ์žˆ๋Š” ๋„ค์ž„์„œ๋ฒ„๋Š” ํŠน์ • ๋ฆฌ์†Œ์Šค ๋ ˆ์ฝ”๋“œ์˜ TTL ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค. ์žฌ๊ท€์  (recursive) ์บ์‹œ ๋„ค์ž„์„œ๋ฒ„๊ฐ€ ๊ถŒํ•œ์žˆ๋Š” ๋„ค์ž„์„œ๋ฒ„์— ์งˆ์˜๋ฅผ ๋ณด๋‚ผ ๋•Œ, ์บ์‹œ ๋„ค์ž„์„œ๋ฒ„๋Š” ๊ทธ ๋ ˆ์ฝ”๋“œ๋ฅผ TTL ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์‹œ๊ฐ„๋™์•ˆ ์บ์‹œ์— ์ €์žฅํ•ด ๋‘”๋‹ค. 

์ถ”ํ›„ ์Šคํ„ฐ๋ธŒ ๋ฆฌ์กธ๋ฒ„(stub resolver)๊ฐ€ ์บ์‹œ ๋„ค์ž„์„œ๋ฒ„์— ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ์งˆ์˜๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ, ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ TTL ๊ฐ’์ด ์•„์ง ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์บ์‹œ ๋„ค์ž„์„œ๋ฒ„๋Š” ๊ถŒํ•œ์žˆ๋Š” ๋„ค์ž„์„œ๋ฒ„์— ์งˆ์˜๋ฅผ ๋ณด๋‚ผ ํ•„์š” ์—†์ด ์บ์‹œ์— ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋ฐ”๋กœ ์‘๋‹ต์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋„ค์ž„์„œ๋ฒ„๋Š” ํŠน์ • ๋„๋ฉ”์ธ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” NXDOMAIN ์‘๋‹ต์— ๋Œ€ํ•ด์„œ๋„ TTL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ด ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ ๊ฐ’์ด ์ตœ๋Œ€ 3์‹œ๊ฐ„ ์ •๋„๋กœ ์งง๋‹ค.

TTL ๊ฐ’์ด ์งง์œผ๋ฉด ์ƒ์œ„์˜ ๊ถŒํ•œ์žˆ๋Š” ๋„ค์ž„์„œ๋ฒ„์— ๊ฐ€ํ•ด์ง€๋Š” ๋ถ€ํ•˜๊ฐ€ ์ปค์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ๋ฐ˜๋ฉด์— ๋ฉ”์ผ ๊ตํ™˜ ๋ ˆ์ฝ”๋“œ(mail exchange record)์™€ ๊ฐ™์ด ์ฃผ์†Œ ๋ณ€๊ฒฝ์— ๋ฏผ๊ฐํ•œ ์„œ๋น„์Šค์— ์ ํ•ฉํ•˜๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค. ์ด ๋•Œ๋ฌธ์— ํŠน์ • ์„œ๋น„์Šค์˜ ์ฃผ์†Œ๊ฐ€ ์˜ฎ๊ฒจ์ง€๋Š” ๊ฒฝ์šฐ, ์ด๋กœ ์ธํ•œ ํ˜ผ๋ž€์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด DNS ๊ด€๋ฆฌ์ž๋Š” ๊ด€๋ จ ๋ ˆ์ฝ”๋“œ์˜ TTL ๊ฐ’์„ ๋‚ฎ์ถ˜๋‹ค.

 

 

+ ์ฝ์–ด๋ณผ ๊ธ€

 

DNS๋ž€? (๋„๋ฉ”์ธ ๋„ค์ž„ ์‹œ์Šคํ…œ ๊ฐœ๋…๋ถ€ํ„ฐ ์ž‘๋™ ๋ฐฉ์‹๊นŒ์ง€) - ํ•˜๋‚˜๋ชฌ

์ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ค‘์š” ํฌ์ธํŠธ DNS(๋„๋ฉ”์ธ ๋„ค์ž„ ์‹œ์Šคํ…œ)์ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ์ด๋ฆ„(www.hanamon.kr)์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋ผ๋Š” ๊ฒƒ์€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด๋ ‡๊ฒŒ ๋„๋ฉ”์ธ

hanamon.kr

 

 


Reference

 

์บ์‹œ ์ผ๊ด€์„ฑ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. -->

ko.wikipedia.org

 

If-Modified-Since - HTTP | MDN

If-Modified-Since HTTP ์š”์ฒญ ํ—ค๋”๋Š” ์กฐ๊ฑด๋ถ€ ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„๋Š” ์ง€์ •๋œ ๋‚ ์งœ ์ดํ›„ ์ˆ˜์ • ๋œ ๊ฒฝ์šฐ์— 200 ๊ณผ ํ•จ๊ป˜ ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋Œ๋ ค ์ค๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ˆ˜์ •๋˜์ง€ ์•Š๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์š”์ฒญ์‹œ, ๋ฆฌ์†Œ์Šค ์—†์ด 304 ์‘

developer.mozilla.org

 

DNS๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? – DNS ์†Œ๊ฐœ - AWS

12๊ฐœ์›” ๋™์•ˆ AWS ํ”„๋ฆฌ ํ‹ฐ์–ด์— ์•ก์„ธ์Šคํ•˜๊ณ  ์—ฐ์ค‘๋ฌดํœด 24์‹œ๊ฐ„ ๊ณ ๊ฐ ์„œ๋น„์Šค, ์ง€์› ํฌ๋Ÿผ ๋“ฑ์„ ๋น„๋กฏํ•œ AWS Basic Support์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ Amazon Route 53๋Š” AWS ํ”„๋ฆฌ ํ‹ฐ์–ด์—์„œ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค

aws.amazon.com

 

[Web] DNS์™€ ์ž‘๋™์›๋ฆฌ

โฌ› DNS(Domain Name System)๋ž€? IP ์ฃผ์†Œ๋Š” IPv4 ๊ธฐ์ค€ 12๊ฐœ ์ˆซ์ž์™€ .์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด ์™ธ์šฐ๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค. ์ด๋ฅผ ์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ 'naver.com', 'google.com'๊ณผ ๊ฐ™์ด ๋ฌธ์ž์™€ .์œผ๋กœ ํ‘œํ˜„ํ•œ ์ฃผ์†Œ๋ฅผ ๋„๋ฉ”์ธ ์ด๋ฆ„(Domai

codybuilder.com

 

ํ•œ๊ตญ์ธํ„ฐ๋„ท์ •๋ณด์„ผํ„ฐ(KRNIC)

๋„๋ฉ”์ธ ์†Œ๊ฐœ, ๋“ฑ๋ก ๋ฐ ์‚ฌ์šฉ, IP์ฃผ์†Œ, AS๋ฒˆํ˜ธ, DNS ์ •๋ณด, ๊ด€๋ จ๊ทœ์ • ์ œ๊ณต

xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e

 

ํƒ€์ž„ ํˆฌ ๋ฆฌ๋ธŒ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํƒ€์ž„ ํˆฌ ๋ฆฌ๋ธŒ(Time to live, TTL)๋Š” ์ปดํ“จํ„ฐ๋‚˜ ๋„คํŠธ์›Œํฌ์—์„œ ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ ๊ธฐ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. TTL์€ ๊ณ„์ˆ˜๊ธฐ๋‚˜ ํƒ€์ž„์Šคํƒฌํ”„์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ์— ํฌํ•จ๋˜๋ฉฐ,

ko.wikipedia.org

 

 

728x90
728x90

๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด (Robert C. Martin)์ด 2000๋…„๋Œ€ ์ดˆ๋ฐ˜์— ๋ช…๋ช…ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์„ค๊ณ„์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์„ ๋งˆ์ดํด ํŽ˜๋”์Šค (Michael C. Feathers)๊ฐ€ ๋‘๋ฌธ์ž์–ด ๊ธฐ์–ต์ˆ ๋กœ ์†Œ๊ฐœํ•œ ๊ฒƒ์ด๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ ์ด ์›์น™๋“ค์„ ํ•จ๊ป˜ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชฉ์ฐจ

  1. SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„)
  2. Single responsibility principle, SRP
  3. Open/closed principle, OCP
  4. Liskov substitution principle, LSP
  5. Interface segregation principle, ISP
  6. Dependency inversion principle, DIP

 

 


๐Ÿ”Ž SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„)

์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ SOLID๋ž€ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด (Robert C. Martin)์ด 2000๋…„๋Œ€ ์ดˆ๋ฐ˜์— ๋ช…๋ช…ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์„ค๊ณ„์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์„ ๋งˆ์ดํด ํŽ˜๋”์Šค (Michael C. Feathers)๊ฐ€ ๋‘๋ฌธ์ž์–ด ๊ธฐ์–ต์ˆ ๋กœ ์†Œ๊ฐœํ•œ ๊ฒƒ์ด๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ ์ž ํ•  ๋•Œ ์ด ์›์น™๋“ค์„ ํ•จ๊ป˜ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. SOLID ์›์น™๋“ค์€ ์†Œํ”„ํŠธ์›จ์–ด ์ž‘์—…์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ฝ๊ธฐ ์‰ฝ๊ณ  ํ™•์žฅํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋  ๋•Œ๊นŒ์ง€ ์†Œํ”„ํŠธ์›จ์–ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜์—ฌ ์ฝ”๋“œ ๋ƒ„์ƒˆ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์นจ์ด๋‹ค. ์ด ์›์น™๋“ค์€ ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๊ณผ ์ ์‘์  ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ „๋ฐ˜์  ์ „๋žต์˜ ์ผ๋ถ€์ด๋‹ค.

 

 

โœ”๏ธ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (Single responsibility principle, SRP)

: ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

 

โœ”๏ธ ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ (Open/closed principle, OCP)

: ์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

โœ”๏ธ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov substitution principle, LSP)

: ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„๋ฅผ ์ฐธ๊ณ ํ•˜๋ผ.

 

โœ”๏ธ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle, ISP)

: ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜๋ณด๋‹ค ๋‚ซ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ผญ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ƒ์†ํ•ด์•ผ ํ•œ๋‹ค.

 

โœ”๏ธ ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle, DIP)

: ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ์ง€, ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ด ์›์น™์„ ๋”ฐ๋ฅด๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

 


Single Responsibility Principle, SRP

• ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

• “ There should never be more than one reason for a class to change. ”

• ํ•œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„ (axis of change)๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

• ์–ด๋–ค ๋ณ€ํ™”์— ์˜ํ•ด ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜ ๋ฟ ์ด์–ด์•ผ ํ•œ๋‹ค.

• ์ฑ…์ž„์€ “ ์บก์Аํ™” ” ํ•œ๋‹ค.

•.์‘์ง‘๋„ (Cohesion)๋ฅผ ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„ (Coupling)๋ฅผ ๋‚ฎ์ถ˜๋‹ค.

• ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ , ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค.

• ๋‹ค๋ฅธ ์›์น™๋“ค์„ ์ ์šฉํ•˜๋Š” ๊ธฐ์ดˆ๊ฐ€ ๋œ๋‹ค.

 

๐Ÿ“Œ Extract Class

Extract Class๋Š” ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ์˜ ์ฑ… <Refactoring: Improving the Design of Existing Code>2์—์„œ ์†Œ๊ฐœ๋œ ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ๋ฆฌํŒฉํ† ๋ง์˜ ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด ์ฑ…์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์œ„ํ—˜์ƒํ™ฉ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์ง/๊ฐ„์ ‘์ ์œผ๋กœ SRP ์›๋ฆฌ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค. ํ•ญ์ƒ ์ฝ”๋“œ๋ฅผ ์ตœ์ƒ์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค๋Š” ๋ฆฌํŒฉํ† ๋ง์˜ ๊ทผ๋ณธ์ •์‹ ๋„ ํ•ญ์ƒ ๊ฐ์ฒด๋“ค์˜ ์ฑ…์ž„์„ ์ตœ์ƒ์˜ ์ƒํƒœ๋กœ ๋ถ„๋ฐฐํ•œ๋‹ค๋Š” ๊ฒƒ์—์„œ ๋น„๋กฏ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Extract Class๋Š” ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์˜ˆ์ „ ํด๋ž˜์Šค์—์„œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์—์„œ ํด๋ž˜์Šค๋Š” ๋ถ„๋ช…ํžˆ ์ถ”์ƒํ™”๋˜์–ด์•ผ ํ•˜๊ณ , ๋ช…ํ™•ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

 

Move Method

๋ฉ”์†Œ๋“œ๊ฐ€ ์ž์‹ ์ด ์ •์˜๋œ ํด๋ž˜์Šค๋ณด๋‹ค ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ž˜์Šค์— ๋น„์Šทํ•œ ๋ชธ์ฒด๋ฅผ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ์ด์ „ ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ„๋‹จํ•œ ์œ„์ž„์œผ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์‚ญ์ œํ•œ๋‹ค.

 

Move Field

ํ•„๋“œ๊ฐ€ ์ž์‹ ์ด ์ •์˜๋œ ํด๋ž˜์Šค๋ณด๋‹ค ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ•ด ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๋ฉด, ํƒ€๊ฒŸ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ํ•„๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ธฐ์กด ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

 


Open Closed Principle, OCP

•  ๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™

• “ You should be able to extend a classes behavior, without modifying it. ”

• ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

•.์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ์ถ”๊ฐ€์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ธฐ์กด ๊ตฌ์„ฑ์š”์†Œ์—๋Š” ์ˆ˜์ •์ด ์ผ์–ด๋‚˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

• ์‰ฝ๊ฒŒ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค.

• ๋ณ€ํ•˜๋Š” ๊ฒƒ์€ ์ˆจ๊ธฐ๊ณ  ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ์˜์กดํ•œ๋‹ค.

• ๋ณ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•œ๋‹ค.

• ๊ด€๋ฆฌ์™€ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ธฐ๋ฐ˜์ด ๋œ๋‹ค.

• ์ถ”์ƒํ™” ”๋Š” OCP ์˜ ํ•ต์‹ฌ์š”์†Œ์ด๋‹ค.


๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™์€ ๋ฒ„ํ‹€๋ž€ํŠธ ๋ฉ”์ด์–ด (Bertrand Meyer)๊ฐ€ 1998๋…„ ์ฑ… 3์—์„œ ์ •์˜ํ•œ ๊ฐœ๋…์ด๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ์š”์†Œ (์ปดํฌ๋„ŒํŠธ, ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ํ•จ์ˆ˜)๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์›๋ฆฌ์ด๋‹ค. ์ฆ‰, ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ๋น„์šฉ์€ ๊ฐ€๋Šฅํ•œ ์ค„์ด๊ณ , ํ™•์žฅ์„ ์œ„ํ•œ ๋น„์šฉ์€ ๊ฐ€๋Šฅํ•œ ๊ทน๋Œ€ํ™” ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฒ„ํ‹€๋ž€ํŠธ ๋ฉ”์ด์–ด๋Š” ์ด ์›์น™์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒ์†์€ ์„œ๋ธŒ ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ์Šˆํผ ํด๋ž˜์Šค์˜ ์„ธ๋ถ€ ์ •๋ณด์™€ ๊ธด๋ฐ€ํžˆ ๊ฒฐํ•ฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, SOLID ์›์น™์„ ์ •๋ฆฌํ•œ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด (Robert C. Martin)์€ ๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰์œ„ (behavior)๋ฅผ ์ •์˜ํ•˜๊ณ , ์ •์˜๋œ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ํ—ˆ์šฉํ•˜๋„๋ก ํ•˜์˜€๋‹ค. ๋˜ํ•œ, OCP์˜ ์ฃผ์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ถ”์ƒํ™”์™€ ๋‹คํ˜•์„ฑ์ด๋ผ๊ณ  ํ•˜์˜€๋‹ค.



๐Ÿ“Œ ๊ทธ๋ž˜๋”” ๋ถ€์น˜ (Grady Booch)๊ฐ€  ๋งํ•˜๋Š” ์ถ”์ƒํ™”๋ž€ ?

๋‹ค๋ฅธ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์‹๋ณ„๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์˜ ๋ณธ์งˆ์ ์ธ ํŠน์ง•์ด๋‹ค.


 


Liskov Substitution Principle, LSP

• ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

• “ Functions that use pointers or references to base classes must be able to use objects of derived objects of derived classes without knowing it. ”

• Sub type์€ ์–ธ์ œ๋‚˜ Super type์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

• ๊ณ„์•ฝ์— ์˜ํ•œ ์„ค๊ณ„ (Design by Contract)์™€ ์œ ์‚ฌ์„ฑ์„ ์ง€๋‹Œ๋‹ค.

• OCP๋ฅผ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ธฐ๋ฐ˜ ์›์น™์ด๋‹ค.

• ํ–‰๋™์  ํ•˜์œ„ํ˜• (Behavioral Subtype) : ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ (Notion of substitutability for object)์„ ์ •์˜ํ•œ๋‹ค.

• LSP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ์ „ํ˜•์ ์ธ ์˜ˆ๋กœ Circle-ellipse Problem์ด ์žˆ๋‹ค.


๐Ÿ“Œ Signature ์š”๊ตฌ์‚ฌํ•ญ

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ๋ฉ”์†Œ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์€ ๋ฐ˜๊ณต๋ณ€์„ฑ (Contravariance)

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ๋ฉ”์†Œ๋“œ return ํƒ€์ž…์˜ ๊ณต๋ณ€์„ฑ (Covariance)

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ๋ฉ”์†Œ๋“œ๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ์—์„œ throwํ•œ ํ•˜์œ„ํ˜•์„ ์ œ์™ธํ•˜๊ณ  ์ƒˆ๋กœ์šด ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜๋Š” ์—†๋‹ค.

๐Ÿ“Œ Sub type์˜ ํ–‰๋™ ์กฐ๊ฑด

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ์„ ํ–‰ ์กฐ๊ฑด (pre-condition)์€ ๊ฐ•ํ™”๋  ์ˆ˜ ์—†๋‹ค.

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ํ›„ํ–‰ ์กฐ๊ฑด (Post-condition)์€ ์•ฝํ™”๋  ์ˆ˜ ์—†๋‹ค.

• ์„œ๋ธŒ ํƒ€์ž…์—์„œ ์ˆ˜ํผ ํƒ€์ž…์˜ ๋ถˆ๋ณ€ํ˜•์€ ๋ฐ˜๋“œ์‹œ ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค.

• ์ด๋ ฅ ์ œ์•ฝ ์กฐ๊ฑด (History constraint - History rule)

• ๊ฐ์ฒด๋Š” ๊ทธ ์ž์‹ ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ˆ˜์ • (์บก์Аํ™”) ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.

• ๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์ง€์  (mutable point)์„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ์ง€์  (immutable point)์˜ ์„œ๋ธŒ ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ ๋‹ค.

๐Ÿ“Œ ๊ณต๋ณ€์„ฑ (Convariance)์™€ ๋ฐ˜๊ณต๋ณ€์„ฑ (Contravariance)

• ๊ณต๋ณ€์„ฑ : ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๋ณ€ํ•˜๋ฉด ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋„ ๋ณ€ํ•˜๋Š” ์„ฑ์งˆ

• ๋ฐ˜๊ณต๋ณ€์„ฑ : ๊ทธ ๋ฐ˜๋Œ€์˜ ์„ฑ์งˆ

 

 


Interface Segregation Principle, ISP

• ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

• “ Clients should not be foreced to depend upon interfaces that they do not use. ”

• ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„ ์–ธํ•œ๋‹ค.

• ์‹œ์Šคํ…œ ๋‚ด๋ถ€ ์˜์กด์„ฑ์„ ์•ฝํ™”์‹œ์ผœ ๋ฆฌํŒฉํ† ๋ง, ์ˆ˜์ •, ์žฌ๋ฐฐํฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์€ ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋ณด๋‹ค๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ฒด์ ์ด๊ณ  ์ž‘์€ ๋‹จ์œ„๋“ค๋กœ ๋ถ„๋ฆฌ์‹œ์ผœ ๊ผญ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ƒ์†ํ•˜์ž๋Š” ์˜๋ฏธ์ด๋‹ค. SRP๋Š” ํด๋ž˜์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐํ•œ๋‹ค๋ฉด ISP๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‹จ์ผ ์ฑ…์ž„์„ ๊ฐ•์กฐํ•œ๋‹ค.

 

 


Dependency Inversion Principle, DIP

• ์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™

• “High level modules should not depend upon low level modules. Both should depend upon abstractions.”

• “Abstractions should not depend upon details. Details should depend upon abstractions.”

• ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•˜๊ณ , ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

• ์ƒ์œ„ ๋ชจ๋“ˆ์€ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

• “์ƒ์œ„์™€ ํ•˜์œ„ ๊ฐ์ฒด ๋ชจ๋‘ ๋™์ผํ•œ ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค”๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ๋Œ€์›์น™์„ ์ œ๊ณตํ•œ๋‹ค.

 

์˜์กด ๊ด€๊ณ„ ์—ญ์ „ ์›์น™์€ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๊ณ , ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์›์น™์ด๋‹ค. ํด๋ž˜์Šค ์‚ฌ์ด์— ์˜์กด ๊ด€๊ณ„๋Š” ๋‹น์—ฐํžˆ ์กด์žฌํ•˜์ง€๋งŒ, ์ตœ๋Œ€ํ•œ ์ถ”์ƒํ™”๋œ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค. Java์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ ํƒ€์ž…์— ๊ธฐ๋ฐ˜ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ๋Š” ์˜๋ฏธ์ด๊ธฐ๋„ ํ•˜๋‹ค. DIP์˜ ํ‚ค์›Œ๋“œ๋Š” ‘IOS’, ‘ํ›… ๋ฉ”์†Œ๋“œ’, ‘ํ™•์žฅ์„ฑ’์ด๋‹ค.

 

 

 


Reference

 

SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„) - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. -->

ko.wikipedia.org

 

๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ 5๋Œ€ ์›๋ฆฌ: SOLID

ํ˜„์žฌ๋ฅผ ์‚ด์•„๊ฐ€๋Š” ์šฐ๋ฆฌ๋“ค์€ ๋ชจ๋‘ ์ผ์ •ํ•œ ์›๋ฆฌ/์›์น™ ์•„๋ž˜์—์„œ ์ƒํ™œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ์˜ ์›์น™ ์ด๋ผ ํ•จ์€ ์ข์€ ์˜๋ฏธ๋กœ๋Š” ๊ฐœ๊ฐœ์ธ์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์ด๋‚˜ ์‹ ๋…, ๊ฐ€์น˜๊ด€ ์ •๋„๊ฐ€ ๋  ์ˆ˜๊ฐ€ ์žˆ๊ฒ ๊ณ , ๋„“๊ฒŒ๋Š” ํ•œ

www.nextree.co.kr

 

728x90

'Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž๋ฐ” ๋ฌธ์ž์—ด String ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ : stack๊ณผ heap  (0) 2022.06.28
728x90

ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ์ด์ง€๋งŒ ์ ˆ๋Œ€ ํ‰๋ฒ”ํ•˜์ง€๊ฐ€ ์•Š๋‹ค. ์•Œ๊ณ  ๋ณด๋‹ˆ ๋ฐฐ๋‚ญ ๋ฌธ์ œ (knapssack problem)๋กœ Dynamic Programming์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. Knapsack Algorithm์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์™€, ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์ „์ž๋Š” Fraction Knapsack Problem์ด๋ผ๊ณ  ํ•˜๊ณ , Greedy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ”— ๋ฌธ์ œ ๋งํฌ

 

12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ

์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ W(1 ≤ W ≤ 100,000)์™€ ํ•ด๋‹น ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜ V(0 ≤ V ≤ 1,000)

www.acmicpc.net

 

๐Ÿ”Ž ๋ฌธ์ œ ํ’€์ด

ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ์ด์ง€๋งŒ ์ ˆ๋Œ€ ํ‰๋ฒ”ํ•˜์ง€๊ฐ€ ์•Š๋‹ค. 

 

์•Œ๊ณ  ๋ณด๋‹ˆ ๋ฐฐ๋‚ญ ๋ฌธ์ œ (knapsack problem)๋กœ Dynamic Programming์˜ ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.

Knapsack Algorithm์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ๋ฐฐ๋‚ญ ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

์ง์„ ์ชผ๊ฐค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์™€, ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

์ „์ž๋Š” Fraction Knapsack Problem์ด๋ผ๊ณ  ํ•˜๊ณ ,  Greedy๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

ํ›„์ž๋Š” 0/1 Knapsack Problem์ด๋ผ๊ณ  ํ•˜๊ณ , ๋ณดํ†ต DP๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋‚˜๋ฌด์œ„ํ‚ค์™€ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋ฐฐ๋‚ญ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ดํ•ดํ–ˆ๋‹ค.

 

 

๋ฐฐ๋‚ญ ๋ฌธ์ œ - ๋‚˜๋ฌด์œ„ํ‚ค

๋ฌด๊ฒŒ ๋Œ€๋น„ ๊ฐ€์น˜๊ฐ€ ๋‹ค๋ฅธ ๋ฌผ๊ฑด๋“ค์„ ์ผ์ •ํ•œ ์šฉ๋Ÿ‰์˜ ์šฉ๊ธฐ์— ๋‹ด์•„์•ผ ํ•œ๋‹ค๋Š” ๊ธฐ๋ณธ ํ‹€์—์„œ, ๋ฐ”๋ฆฌ์—์ด์…˜์ด ๋งŽ๋‹ค. ๊ฐ€๋ฐฉ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๋ฌธ์ œ, ๊ณ ๋ คํ•  ๋ณ€์ˆ˜๊ฐ€ ๋ฌด๊ฒŒ์™€ ๊ฐ€์น˜ ์™ธ์—๋„ ๋” ์žˆ๋Š” 3๊ฐœ ์ด์ƒ์˜ ๋ณ€์ˆ˜ ๋ฌธ

namu.wiki

 

Dynamic Programming: ๋ฐฐ๋‚ญ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ (Knapsack Problem)

๋„๋‘‘์ด ๋ณด์„๊ฐ€๊ฒŒ์— ๋ฐฐ๋‚ญ์„ ๋ฉ”๊ณ  ์นจ์ž…ํ–ˆ๋‹ค. ๋ฐฐ๋‚ญ์˜ ์ตœ๋Œ€ ์šฉ๋Ÿ‰์€ W์ด๋ฉฐ, ์ด๋ฅผ ์ดˆ๊ณผํ•ด์„œ ๋ณด์„์„ ๋‹ด์œผ๋ฉด ๋ฐฐ๋‚ญ์ด ์ฐข์–ด์งˆ ๊ฒƒ์ด๋‹ค. ๊ฐ ๋ณด์„๋“ค์˜ ๋ฌด๊ฒŒ์™€ ๊ฐ€๊ฒฉ์€ ์•Œ๊ณ  ์žˆ๋‹ค. ๋ฐฐ๋‚ญ์ด ์ฐข์–ด์ง€์ง€ ์•Š๋Š” ์„ ์—์„œ

gsmesie692.tistory.com

 

์ด ๋ฌธ์ œ๋Š” ์ง์„ ์ชผ๊ฐค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ DP๋กœ ํ‘ผ๋‹ค.

์•„๋ž˜ ๋ธ”๋กœ๊ทธ์— ๋‚˜์˜ค๋Š” ํ…Œ์ด๋ธ” ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ดํ•ดํ•˜๋Š”๋ฐ ๋„์›€์ด ๋œ๋‹ค.

 

 

[๋ฐฑ์ค€] 12865๋ฒˆ ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ (์ž๋ฐ” ํ’€์ด)

๋ฌธ์ œ https://www.acmicpc.net/problem/12865 12865๋ฒˆ: ํ‰๋ฒ”ํ•œ ๋ฐฐ๋‚ญ ์ฒซ ์ค„์— ๋ฌผํ’ˆ์˜ ์ˆ˜ N(1 ≤ N ≤ 100)๊ณผ ์ค€์„œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ K(1 ≤ K ≤ 100,000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฑฐ์ณ ๊ฐ ๋ฌผ๊ฑด์˜ ๋ฌด

code-lab1.tistory.com

 

 

Java ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        int[][] dp = new int[N + 1][K + 1];

        for (int i = 1; i <= N; i++) {
            st = new StringTokenizer(br.readLine());

            int W = Integer.parseInt(st.nextToken());
            int V = Integer.parseInt(st.nextToken());

            for (int j = 1; j <= K; j++) {
                if (j < W) {
                    dp[i][j] = dp[i - 1][j];
                    continue;
                }

                dp[i][j] = Math.max(V + dp[i - 1][j - W], dp[i - 1][j]);
            }
        }

        System.out.println(dp[N][K]);
    }
}

 

728x90
728x90

ํ”„๋ž™ํƒˆ (Fractal)์ด๋ž€ ? 

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

 

ํ”„๋ž™ํƒˆ ํŠธ๋ฆฌ (Fractal Tree)

ํ”„๋ž™ํƒˆ ๊ตฌ์กฐ๊ฐ€ ๋‚˜๋ฌด์˜ ๋ชจ์–‘์ธ ํ”„๋ž™ํƒˆ ํŠธ๋ฆฌ๋ฅผ Java๋ฅผ ์ด์šฉํ•ด  ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๊ทธ๋ ค๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์ง€๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์‚ผ๊ฐํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค. 

import java.awt.Frame;
import java.awt.Graphics;

/**
 * FractalTree.
*/

public class FractalTree extends Frame {
    int startX;
    int startY;
    int angle;
    int length;
    int rotate;
    int growth;
    int depth;

    /**
     * Constroctors.
     *
     * @param width width
     * @param height height
     * @param x x
     * @param y y
     * @param angle angle
     * @param length length
     * @param rotate rotate
     * @param growth growth
     */
    public FractalTree(int width, int height, int x, int y,
            int angle, int length, int rotate, int growth) {
        this.startX = x;
        this.startY = y;
        this.angle = angle;
        this.length = length;
        this.rotate = rotate;
        this.growth = growth;

        this.setSize(width, height);
    }

    /**
     * Paint branch.
     *
     * @param graphics graphics
     * @param startX startX
     * @param startY startY
     * @param degree degree
     * @param length length
     */
    public void branch(Graphics graphics, int startX, int startY, int degree, int length) {
        if (length > 1) {
            int endX = (int) (startX - length * Math.cos(Math.toRadians(degree)));
            int endY = (int) (startY - length * Math.sin(Math.toRadians(degree)));
            int branchLength = (int) (length * growth * 0.01);

            graphics.drawLine(startX, startY, endX, endY);
            branch(graphics, endX, endY, degree - rotate, branchLength);
            branch(graphics, endX, endY, degree + rotate, branchLength);
        }
    }

    @Override
    public void paint(Graphics graphics) {
        branch(graphics, startX, startY, this.angle, this.length);
    }

    public static void main(String[] args) {
        FractalTree tree = new FractalTree(500, 500, 250, 450, 90, 100, 30, 75);
        tree.setVisible(true);
    }
}

์ง  !

 

 


Reference

 

ํ”„๋ž™ํƒˆ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „. ํ”„๋ž™ํƒˆ(์˜์–ด: fractal) ๋˜๋Š” ํ”„๋ž™ํ„ธ์€ ์ผ๋ถ€ ์ž‘์€ ์กฐ๊ฐ์ด ์ „์ฒด์™€ ๋น„์Šทํ•œ ๊ธฐํ•˜ํ•™์  ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค. ์ด๋Ÿฐ ํŠน์ง•์„ ์ž๊ธฐ ์œ ์‚ฌ์„ฑ์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‹ค์‹œ ๋งํ•ด ์ž๊ธฐ ์œ ์‚ฌ์„ฑ์„

ko.wikipedia.org

 

728x90

+ Recent posts