day27 πŸŒ•

μž₯λ―ΈΒ·2022λ…„ 7μ›” 10일
0

였늘의 μ„±κ³Ό

λͺ©λ‘ 보기
27/129
post-thumbnail

[λͺ¨λ“  개발자λ₯Ό μœ„ν•œ HTTP μ›Ή κΈ°λ³Έ 지식] μ„Ήμ…˜ 4 μˆ˜κ°•

+) 22. 07. 11. 01:05 μΆ”κ°€

μ„Ήμ…˜ 4. HTTP λ©”μ„œλ“œ μˆ˜κ°• μ™„λ£Œ!!

API URIλ₯Ό 섀계할 λ•Œ λ¦¬μ†ŒμŠ€μ™€ ν–‰μœ„λ₯Ό 뢄리해야 ν•œλ‹€.
λ¦¬μ†ŒμŠ€λŠ” λͺ…사, ν–‰μœ„λŠ” 동사닀. (예: λ°₯을 λ¨Ήλ‹€.)


HTTP μ£Όμš” λ©”μ„œλ“œ

  • GET: λ¦¬μ†ŒμŠ€ 쑰회

  • POST: μš”μ²­ 데이터 처리, 주둜 등둝에 μ‚¬μš©

    • λ©”μ‹œμ§€ λ°”λ””λ₯Ό 톡해 μ„œλ²„λ‘œ μš”μ²­ 데이터λ₯Ό μ „λ‹¬ν•œλ‹€.
    • μ„œλ²„λŠ” μš”μ²­ 데이터λ₯Ό μ²˜λ¦¬ν•œλ‹€.
  • PUT: λ¦¬μ†ŒμŠ€λ₯Ό λŒ€μ²΄, ν•΄λ‹Ή λ¦¬μ†ŒμŠ€κ°€ μ—†μœΌλ©΄ 생성

    • ν΄λΌμ΄μ–ΈνŠΈκ°€ λ¦¬μ†ŒμŠ€μ˜ μœ„μΉ˜λ₯Ό μ•Œκ³  URIλ₯Ό 지정해야 ν•œλ‹€.
  • PATCH: λ¦¬μ†ŒμŠ€ λΆ€λΆ„ λ³€κ²½

  • DELETE: λ¦¬μ†ŒμŠ€ μ‚­μ œ


HTTP λ©”μ„œλ“œμ˜ 속성

  • μ•ˆμ „(Safe Methods)
    ν˜ΈμΆœν•΄λ„ λ¦¬μ†ŒμŠ€λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • λ©±λ“±(Idempotent Methods)
    λͺ‡ λ²ˆμ„ ν˜ΈμΆœν•˜λ“  κ²°κ³Όκ°€ λ˜‘κ°™λ‹€.
    λ©±λ“± λ©”μ„œλ“œ: GET, PUT, DELETE

  • μΊμ‹œ κ°€λŠ₯(Cacheable Methods)
    응닡 κ²°κ³Ό λ¦¬μ†ŒμŠ€λ₯Ό μΊμ‹œλ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
    μΊμ‹œ κ°€λŠ₯ν•œ λ©”μ„œλ“œ: GET, HEAD, POST, PATCH


계산기 끝내기 μ΅œμš°μ„ !!!

μ§„μ§œ!! 끝!! μƒμ„±μžμ—μ„œ 데이터λ₯Ό λ°›μœΌλ©΄ μœ νš¨μ„± κ²€μ‚¬ν•˜κ²Œλ” λ§Œλ“€μ—ˆμŒ... 근데... 이게 λ§žλ‚˜?


섀계 λ‚΄μš©

  1. Input Classμ—μ„œ 값을 μž…λ ₯ λ°›λŠ”λ‹€.
  2. μž…λ ₯ 받은 값을 곡백 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ 배열에 μ €μž₯ν•œλ‹€.
  3. 배열에 μ €μž₯된 값을 ν™€μˆ˜ 번째 κ°’, 짝수 번째 κ°’ κΈ°μ€€μœΌλ‘œ λ‚˜λˆ  각각 숫자 λ¦¬μŠ€νŠΈμ™€ μ—°μ‚°μž λ¦¬μŠ€νŠΈμ— λ„£λŠ”λ‹€. 이 λ•Œ μˆ«μžκ°€ λ§žλŠ”μ§€, λΆ€ν˜Έκ°€ λ§žλŠ”μ§€ μœ νš¨μ„± 검사λ₯Ό ν•΄μ€€ λ’€ λ„£λŠ”λ‹€.
  4. 각 λ¦¬μŠ€νŠΈμ— μ €μž₯된 값을 μ΄μš©ν•΄ ν•΄λ‹Ή μ—°μ‚°μžμ— 맞게 κ³„μ‚°ν•œλ‹€.
  5. Output Classμ—μ„œ 합계λ₯Ό 좜λ ₯ν•œλ‹€.

public class Main {
    public static void main(String[] args) {

        Input input = new Input();

        String[] str = input.inputDataSplit(input.input());
        input.split(str);

        List<String> operators = input.getOperators();
        List<Integer> numbers = input.getNumbers();

        int result = Calculator.calculate(numbers, operators);

        Output output = new Output();
        output.output(result);

    }
}

➑️ Main Class: μ‹€ν–‰ν•˜λŠ” 클래슀


public class Input {

    private List<String> numbers = new ArrayList<>();
    private List<String> operators = new ArrayList<>();

    public String input() {
        System.out.print("μž…λ ₯κ°’: ");
        return new Scanner(System.in).nextLine();
    }

    public String[] inputDataSplit(String str) {
        return str.split(" ");
    }

    public void split(String[] str_arr) {
        for(int i = 0; i < str_arr.length; i++) {
            if (i % 2 == 0)
                numbers.add(str_arr[i]);
            if (i % 2 != 0)
                operators.add(str_arr[i]);
        }
    }

    public List<Integer> getNumbers() {
        return new Number(numbers).getNumbers();
    }

    public List<String> getOperators() {
        return new Operator(operators).getOperators();
    }

}

➑️ Input Class: μ‚¬μš©μžμ—κ²Œ 값을 μž…λ ₯ λ°›λŠ” 클래슀

  • inputDataSplit()
    μž…λ ₯ 받은 λ¬Έμžμ—΄μ„ 곡백을 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ” λ©”μ„œλ“œ

  • split()
    곡백을 κΈ°μ€€μœΌλ‘œ λΆ„λ¦¬ν•œ λ¬Έμžμ—΄μ΄ μ§μˆ˜μΈμ§€ ν™€μˆ˜μΈμ§€ ν•˜λ‚˜μ”© ν™•μΈν•œλ‹€.
    λ§Œμ•½ 짝수라면 μˆ«μžμ΄λ―€λ‘œ numbers λ¦¬μŠ€νŠΈμ— λ„£κ³ ,
    ν™€μˆ˜λΌλ©΄ λΆ€ν˜Έμ΄λ―€λ‘œ operators λ¦¬μŠ€νŠΈμ— λ„£λŠ”λ‹€.

  • getNumbers()
    Number 클래슀의 getNumbers() ν•œ κ°’(μœ νš¨μ„± 검사 ν•œ κ°’)을 κ°€μ Έμ˜¨λ‹€.

  • getOperators()
    Operator 클래슀의 getOperators() ν•œ κ°’(μœ νš¨μ„± 검사 ν•œ κ°’)을 κ°€μ Έμ˜¨λ‹€.


public class Number {

    private List<Integer> numbers = new ArrayList<>(); //ν•„λ“œ

    public Number(List<String> strings) {
        for (String string : strings) {
            validateNumber(string);
        }
    }

    private void validateNumber(String str) {
        if(!(str.matches("^[0-9]*$")))
            throw new RuntimeException("μˆ«μžκ°€ μ•„λ‹™λ‹ˆλ‹€.");
        numbers.add(Integer.parseInt(str));
    }

    public List<Integer> getNumbers() {
        return numbers;
    }

}

➑️ Number Class: 숫자λ₯Ό numbers λ¦¬μŠ€νŠΈμ— μ €μž₯ν•˜λŠ” 클래슀

  • validateNumber(String str)
    λ¬Έμžκ°€ 숫자(0-9)κ°€ λ§žλŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œ (μœ νš¨μ„± 검사)
    μˆ«μžκ°€ μ•„λ‹ˆλ©΄ RuntimeException을 λ°œμƒμ‹œν‚€κ³ 
    μˆ«μžκ°€ λ§žλ‹€λ©΄ λ¬Έμžμ—΄μ„ μ •μˆ˜κ°’μœΌλ‘œ λ°”κΏ” numbers에 μ €μž₯ν•œλ‹€.

public class Operator {

    private List<String> operators = new ArrayList<>();

    public Operator(List<String> strings) {
        for (String string : strings) {
            validateOperator(string);
        }
    }

    public static int Operate(int num1, int num2, String operator) {
            switch (operator) {
                case "+": return num1 + num2;
                case "-": return num1 - num2;
                case "*": return num1 * num2;
                case "/": return num1 / num2;
                default: throw new IllegalArgumentException("잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€."); //IllegalArgumentException: λΆ€μ μ ˆν•œ 인수λ₯Ό μ „λ‹¬ν–ˆμŒμ„ λ‚˜νƒ€λƒ„
            }
    }

    private void validateOperator(String str) {
        if(!(str.matches("[-+*/]"))) {
            throw new RuntimeException("λΆ€ν˜Έκ°€ μ•„λ‹™λ‹ˆλ‹€.");
        }
        operators.add(str);
    }

    public List<String> getOperators() {
        return operators;
    }
}

➑️ Operator Class: μž…λ ₯ν•œ μ—°μ‚°μž(λΆ€ν˜Έ)에 맞좰 값을 κ³„μ‚°ν•˜λŠ” 클래슀

  • int Operate(int sum, int num, String operator)
    λΆ€ν˜Έμ— 맞좰 값을 κ³„μ‚°ν•˜κ³ , λ§Œμ•½ μ§€μ •λœ λΆ€ν˜Έ(-+*/)κ°€ μ•„λ‹ˆλΌλ©΄ "잘λͺ»λ˜μ—ˆμŠ΅λ‹ˆλ‹€."λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ„œλ“œ

  • validateOperator(String str)
    λ¬Έμžκ°€ λΆ€ν˜Έ(-, +, *, /)κ°€ λ§žλŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œ (μœ νš¨μ„± 검사)
    λΆ€ν˜Έκ°€ μ•„λ‹ˆλ©΄ RuntimeException을 λ°œμƒμ‹œν‚€κ³ 
    λΆ€ν˜Έκ°€ λ§žλ‹€λ©΄ ν•΄λ‹Ή λ¬Έμžμ—΄μ„ operators에 μ €μž₯ν•œλ‹€.


public class Calculator {

    public static int calculate(List<Integer> numbers, List<String> operators) {
        int result = numbers.get(0);

        for(int i = 0; i < operators.size(); i++) {
            result = Operator.Operate(result, numbers.get(i+1), operators.get(i));
        }

        return result;
    }

}

➑️ Calculator Class: 숫자 λ¦¬μŠ€νŠΈμ— μ €μž₯된 κ°’κ³Ό λΆ€ν˜Έ λ¦¬μŠ€νŠΈμ— μ €μž₯된 값을 λΆˆλŸ¬μ™€ μ°¨λ‘€λŒ€λ‘œ κ³„μ‚°ν•˜λŠ” 클래슀


public class Output {

    public void output(int result) {
        System.out.println("κ²°κ³Όκ°’: " + result);
    }

}

➑️ Output Class: 값을 좜λ ₯ν•˜λŠ” 클래슀

  • output(int result)
    κ³„μ‚°ν•œ κ²°κ³Όκ°’(result)을 좜λ ₯ν•˜λŠ” λ©”μ„œλ“œ
profile
김뉴비

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보