4가지
더보기
1. Error와 Exception의 차이가 뭘까?
- Error는 실행 중 일어날 수 있는 치명적 오류이다! 벌써부터 무섭... Error는 컴파일 시점에 체크할 수 없고 오류가 발생하면 프로그램은 비정상 종료...! 예측 불가능한 UncheckedException에 속한다..!
- 반면에 Exception은 Error보단 그나마 비교적 경미한 오류!!, try - catch를 이용해서 프로그램의 비정상 종료를 막을 수 있다!
2. Checked ? UnChecked? Exception의 종류인데,, 뭐가 다르지?
- CheckedException은 실행하기 전에 예측 가능한 예외를 말하고, 반드시 예외 처리를 해야한다!
- 대표적으로 IOException, ClassNotFoundException 등
- 대표적으로 IOException, ClassNotFoundException 등
- UncheckedException은 실행하고 난 후에 알 수 있는 예외를 말하고, 따로 예외처리는 필요없다!
- 대표적인 NullPointerException, ArrayIndexOutOfBoundException 등
- 대표적인 NullPointerException, ArrayIndexOutOfBoundException 등
- RuntimeException..?
- RuntimeException은 UncheckedException을 상속한 클래스! 반대로 RuntimeException이 아닌 것은 CheckedException을 상속한 클래스이다!
3. Optional API가 뭘까?
- 개발할때 가장 많이 발생하는 예외중 하나가 바로..NullPointerException이다..! NPE를 피하려면 null 여부 검사를 필연적으로 하게 되는데 만약 null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거로워집니다! 하지만 Optional<T>로 null로 인한 예외가 발생하지 않도록 도와주고, Optional 클래스의 메소드를 통해 null을 컨트롤 할 수 있습니다!
4. 컬렉션 프레임워크가 무엇일까?
- 다수의 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스의 집합이다!
- 자바 컬렉션에는 List. Set, Map 인터페이스를 기준으로 여러 구현체가 존재하고, 이에 더해 Stack, Queue 인터페이스도 존재!
- 그럼 List, Set, Map, Queue, Stack은 다 뭘까..?
- List는 순서가 있는 데이터의 집합! 중복도 허용! List는 ArrayList, LinkedList 등의 구현체가 있다!
- Set은 순서가 없는 데이터의 집합! 중복을 허용하지 않는다! 대표적인 구현체는 HashSet, 순서를 보장하기 위해서는 LinkedHashSet을 사용한다!
- Map은 키와 값(Key, Value)이 한 쌍으로 이루어져 있고, 키를 기준으로 중복을 허용하지 않으며, 순서가 없습니다! Key의 순서를 보장하기 위해서 LinkedHashMap을 사용합니다
- Stack 객체는 직접 new 키워드로 사용할 수 있으며, Queue 인터페이스는 LinkedList에 new 키워드를 적용해 사용할 수 있습니다!
2. CodeKata
문제 설명
두 수를 입력받아 두 수의 최대 공약수와 최소 공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대 공약수, 그 다음 최소 공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대 공약수는 3, 최소 공배수는 12이므로 solution(3,12)는 [3,12]를 반환해야 합니다.
제한 사항
두 수는 1 이상 10000000이하의 자연수입니다.
풀이
class Solution { public int[] solution(int n, int m) { int max = Math.max(n, m); int min = Math.min(n, m); while(min != 0){ int r = max % min; max = min; min = r; } int h = n * m /max; int[] answer = {max, h}; return answer; } }
1. Math 함수를 사용해서 m과 n 중에서 더 큰 수를 max 변수에 담았습니다.
2. max와 마찬가지로 m과 n 중에서 더 작은 수를 min 변수에 담았습니다.
3. 제한 사항에서 두 수는 1 이상이 있었기 때문에 while문으로 != 0 (0이 아니면) 조건을 넣었습니다.
4. 유클리드 호제법을 사용해서 최대 공약수를 구하였습니다.
5. 최소 공배수는 두 수의 곱 / 최대 공약수 이 공식을 사용해서 값을 구하였습니다.
Servlet이 뭔데 다들 그렇게 얘기를 하나요..?
그냥 스윽하고 지나갈만한 내용이 아니었다고 한다.... 한번 집중해서 알아가보자..!
1. Servlet 이란 뭘까?
public abstract class HttpServlet extends GenericServlet {
//...
protected void doGet(HttpServletRequest req, HttpServletResponse resp){...}
protected void doPost(HttpServletRequest req, HttpServletResponse resp){...}
//...
}
- 자바를 사용해서 웹 페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양이다!
- 쉽게 말해서, "웹 서버 프로그래밍을 하기 위한 사양을 갖춘 자바 코드" 정도..?라고 할 수 있다!
- Servlet은 Servlet Container에 의해 관리, 실행된다! .HTTP Server + Servlet Container가 웹 서버 역할에 필요한 대부분을 구현해두었고, 개발자는 Servlet을 만들어 HTTP요청을 받아 처리하는 부분을 구현하는 것이라고 한다..!
- 요청(Request)과 응답(Response) HTTP 웹 서버 기능 동작이 가능하다!
Servlet은 Servlet Container에 의해 관리, 실행된다는데 Servlet Container은 또 뭐죠..?
- Servlet이 어떠한 역할을 수행하는 manual이라고 보면, Servlet Container은 그 manual을 보고 핸들링(handling)한다고 볼 수 있다!
- Servlet Container는 클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹 서버와 소켓을 통신하며 대표적인예로 아파치 톰캣(Tomcat)이 있다!
톰캣(Tomcat)이란?
- 웹 애플리케이션 서버(WAS)중 하나로 Servlet Container, Servlet Engine이라고 표현할 수 있으며 자바 웹 프로그래머가 작성한 Servlet을 관리한다!
- Servlet을 관리하는다는 말은 클라이언트가 어떤 요청(Request)을 했을 때ㅡ 어떤 SErvlet을 실행할 것인지 제어해준다는 것이다.
- 톸맷은 Servlet을 관리해주는 주체이기 때문에 아무 클래스가 아니라 Servlet(HttpServlet 클래스를 상속한 클래스)이어야 한다.
- 서블릿의 생명주기?
- Servlet Container는 Servlet의 탄생과 죽음을 관리한다..?
- Servlet Class를 로딩하여 인스턴스화 하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 Servlet Method를 호출
- 또한 Servlet이 생명을 다 한 순간에는 적절하게 Garbage Collection(GC)을 진행하여 편의를 제공한다!
- Servlet Container는 Servlet의 탄생과 죽음을 관리한다..?
- DispatcherServlet ??????
- HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)
- HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)
- DispatcherServlet의 장점!
- dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리하면서 상당히 편리하게 이용이 가능하다! 따라서 Controller만 구현해두기만 하면 Dispatcher-Servlet이 알아서 적합한 컨틀롤러로 위임을 해주는 구조이다!
- dispatcher-servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링 해주고 공통 작업을 처리하면서 상당히 편리하게 이용이 가능하다! 따라서 Controller만 구현해두기만 하면 Dispatcher-Servlet이 알아서 적합한 컨틀롤러로 위임을 해주는 구조이다!
- Dispatcher-Servlet의 동작 과정
- Client의 요청을 Dispatcher - Servlet이 받음
- 요청 정보를 통해 요청을 위임할 Controller를 찾음
- 요청을 Controller로 위임할 핸들러 어댑터를 찾아서 전달
- 핸들러 어댑터가 Controller로 요청을 위임
- 비즈니스 로직을 처리
- Controller가 반환값을 반환
- 핸들러 어댑터가 반환값을 처리
- 서버의 응답을 Client로 반환
'스프링' 카테고리의 다른 글
Spring JPA 뭐하는 키워드지..? (1) | 2024.08.24 |
---|---|
스프링 의존성 주입? 강한 결합? 느슨한 결합? (0) | 2024.08.21 |
[Spring] Entity...! (0) | 2024.08.19 |
[TIL] 2024.08.16 [Java/Spring] (0) | 2024.08.19 |
[TIL] Java 2024.08.08 (0) | 2024.08.09 |