+) 22. 07. 11. 01:05 μΆκ°
μΉμ 4. HTTP λ©μλ μκ° μλ£!!
API URIλ₯Ό μ€κ³ν λ 리μμ€μ νμλ₯Ό λΆλ¦¬ν΄μΌ νλ€.
리μμ€λ λͺ
μ¬, νμλ λμ¬λ€. (μ: λ°₯μ λ¨Ήλ€.)
GET: 리μμ€ μ‘°ν
POST: μμ² λ°μ΄ν° μ²λ¦¬, μ£Όλ‘ λ±λ‘μ μ¬μ©
PUT: 리μμ€λ₯Ό λ체, ν΄λΉ 리μμ€κ° μμΌλ©΄ μμ±
PATCH: 리μμ€ λΆλΆ λ³κ²½
DELETE: 리μμ€ μμ
μμ (Safe Methods)
νΈμΆν΄λ 리μμ€λ₯Ό λ³κ²½νμ§ μλλ€.
λ©±λ±(Idempotent Methods)
λͺ λ²μ νΈμΆνλ κ²°κ³Όκ° λκ°λ€.
λ©±λ± λ©μλ: GET, PUT, DELETE
μΊμ κ°λ₯(Cacheable Methods)
μλ΅ κ²°κ³Ό 리μμ€λ₯Ό μΊμλ‘ μ¬μ© κ°λ₯νλ€.
μΊμ κ°λ₯ν λ©μλ: GET, HEAD, POST, PATCH
μ§μ§!! λ!! μμ±μμμ λ°μ΄ν°λ₯Ό λ°μΌλ©΄ μ ν¨μ± κ²μ¬νκ²λ λ§λ€μμ... κ·Όλ°... μ΄κ² λ§λ?
μ€κ³ λ΄μ©
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 리μ€νΈμ μ μ₯νλ ν΄λμ€
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: κ°μ μΆλ ₯νλ ν΄λμ€