Study 47

자바 기본서를 다시 읽다. 3 - 로컬클래스와 익명객체, 그리고 람다식 (1)

람다식을 공부하다보니, 로컬클래스와 익명개체 그리고 람다식의 관계가 보였다. 람다식을 더 정확하게 사용하기 위해 로컬클래스와 익명개체부터 정리해보려고 한다. I. 로컬클래스 첫번째로, 로컬클래스는 중첩 클래스 중 하나로 하나의 클래스, especially 메소드 내부에서 선언되어 메소드가 실행 될 때에만 사용되는 클래스이다. 로컬클래스와 반대로 멤버클래스는 하나의 클래스 안에서 멤버변수로 선언되어 객체가 사용중에 언제든 재사용이 가능한 객체이다. 로컬클래스는 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없어 public, private 등의 접근 제한자가 사용이 불가능하다. 또한 static 필드와 메소드도 선언할 수 없다. 로컬클래스의 가장 중요한 특징은 다음과 같다. 로컬 클래스 내부에서 바깥 ..

Study/Java 2022.03.15

자바 기본서를 다시 읽다. 2 - 인터페이스

인터페이스의 중요성은 두말하면 입 아프다. 인터페이스를 사용함으로써 개발자는 객체의 내부 구조를 알 필요가 없고 메소드만 알고 있으면 되고, 개발코드의 수정 없이 사용 객체를 변경할 수 있다. I. 인터페이스 구성 상수필드 : public static final의 특성을 갖는다. 이를 생략해도 컴파일 과정에서 자동으로 붙게 된다. 추상 메소드 : public static abstract의 특성을 갖는다. 디폴트 메소드 : public default의 특성을 갖는다. 정적 메소드 : public static의 특성을 갖는다. 객체가 없어도 인터페이스 만으로 호출 가능 이렇듯 인터페이스들의 모든 메소드는 기본적으로 public 접근제한자를 가지고 있기 때문에 이를 구현한 객체들은 public보다 낮은 접근제..

Study/Java 2022.03.11

자바 기본서를 다시 읽다. 1-JVM의 메모리 사용 영역

Java 기본서를 다시 읽으려고 한다. 이펙티브 자바를 공부하기 전 빠르게 완독하려 핀 책이었으나, 기본기가 꽤나 듬성듬성 비어있더랬다. 지식의 구멍을 메우고 기초를 탄탄히 하자는 마음에서 다시 자바 기본서를 공부해보려 한다. 내가 선택한 책은 '이것이 자바다(신용권)'의 책이다. 기존에 가지고 있던 기본서는 'Introduction to Java Programming(Liang)'이라는 원서였는데 자바 8의 함수형 인터페이스와 스트림 등이 반영되어있지 않아 이 책을 선택하게 되었다. 자바 8 관련 내용을 제외하고는 헷갈렸던 부분을 빠르게 짚고 넘어가려고 한다. 그 첫번째로 JVM과 메모리 사용 영역에 대해 알아보자. 자바는 운영체제에서 바로 실행될 수 없는 언어이다. 자바 프로그램은 완전한 기계어가 아..

Study/Java 2022.03.10

[스프링 웹 MVC 활용] 03. URI 패턴 및 요청 매개변수(단순 타입)

핸들러 메소드에서 인자로 받는 클래스들에 대해 조금 더 구체적으로 알아보자. 그 첫번째는 URI 패턴의 일부를 핸들러 메소드의 인자로 받는 방법이다. I. URI 패턴 - @PathVariable, @MatrixVariable로 클라이언트가 요청을 보낼 때 uri에 매개변수를 넣어서 요청할 수 있다. // # 1. testCode @RunWith(SpringRunner.class) @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest() throws Exception { // 테스트를 할 때는 꼭 void형식으로 해줘야 한다. mockMvc.perform(get("/even..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 02. 핸들러 메소드의 Argument와 Return 타입

1. 메소드 Argument와 Return Type : 주로 요청 그 자체 또는 요청에 들어있는 정보를 받아오는데 사용한다. https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-arguments Web on Servlet Stack Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes from the name of its source mo..

Study/Spring 2022.03.01

[스프링 웹 MVC 활용] 01. HTTP Request 맵핑하기

스프링 MVC 의 핵심 기술이었던 DispatcherServlet이 핸들러를 찾아서 요청들을 수행하는지 실제로 활용을 해보자. I. HTTP Method로 맵핑하기 첫번째로 HttpRequest를 처리하는 Handler를 작성하는 방법이다. Handler는 기본적으로 Controller Class 안에 메소드들이라고 생각하면 쉽다. 그리고 그 메소드에 어떤 HttpReqeust를 처리할 것인지, 어떤 값을 리턴해줄 것인지(뷰 모델인지, ResponseBody인지) 등을 설정해주면 DispatcherServlet의 HandlerAdaptor가 이를 처리해 줄 것이다. @Controller public class SampleController { @RequestMapping("/hello") /* * #1...

Study/Spring 2022.03.01

[스프링 웹 MVC 설정] 01. @EnableWebMvc와 WebMvcConfigurer

스프링에서 기본적인 전략은 DispatcherServlet.properties에서 제공해주지만, 개발자가 직접 스프링 MVC의 구성요소를 Bean으로 등록할 수 있다. 아래의 예시는 row-level에서 직접 Bean을 등록해주는 방식으로 실무에서 이렇게 사용하는 경우는 없다고 보면된다. 단지 원리를 익히자면 그런 것이다 라고 보고 넘어가면 되는 예시코드이다. // #Controller코드 @Controller public class HelloController { @Autowired HelloService helloService; /* * /hello/1?name=gayoung&age=25 * @param id * @param name * @return * */ @GetMapping("/hello/{i..

Study/Spring 2022.03.01

[스프링 웹 MVC 동작원리] Servlet과 DispatcherServlet의 동작원리

I. Servelet 소개 1. Servlet 이란? - 자바 엔터프라이즈 에디션에서 웹 애플리케이션 개발을 위한 스펙과 API를 제공하는데, 그 중 가장 중요한 것이 HttpServlet이다. - 요청마다 프로세스를 생성하는 것이 아니라 한 프로세스 내에 자원을 공유하는 쓰레드로 요청을 처리함. > 이식성이 좋다. 2. Servlet 엔진 또는 서블릿 컨테이너(톰캣, 제티 등) - 세션관리 - 네트워크 서비스 - MIME 기반 메세지 인코딩, 디코등 - 서블릿 생명주기 관리 3. Servlet의 생명주기 - init: 서블릿 컨테이너가 서블릿 인스턴스를 초기화 - service: 서블릿 초기화 이후에는 모든 요청이 쓰레드 단위로 처리되고, 인스턴스의 service()메소드가 호출된다. :이 안에서 HT..

Study/Spring 2022.03.01

스프링 핵심기술 06. AOP

이제 스프링 AOP에 대해 알아보자. AOP란 Aspect-Oriented Programming으로 흩어진 Aspect들을 모듈화하는 프로그래밍 기법을 말한다. 자바에서는 AspectJ나 스프링AOP를 통해 구현하며, 컴파일시점 / 로드타임 / 런타임에 AOP를 적용시킬 수 있다. AOP 관련 개념이 잘 설명된 포스팅을 좀 찾아보았다. https://tecoble.techcourse.co.kr/post/2021-06-25-aop-transaction/ AOP 입문자를 위한 개념 이해하기 이 글은 AOP 개념이 생소한 입문자들을 위한 포스팅입니다. 1. OOP의 한계 image… tecoble.techcourse.co.kr https://atoz-develop.tistory.com/entry/Spring-..

Study/Spring 2022.02.13

스프링 핵심기술 05. 추상화

스프링이 제공하는 추상화 기술에 대해 알아보자. 순서는 다음과 같다. Resource 추상화 Validation 추상화 Data Binding 추상화 1. Resource 추상화 Resource 추상화란 무엇인가? java.net.URL이라는 클래스를 Spring.core.io.resource라는 클래스로 감싸서 Low-level에 있는 리소스에 접근하는 기능이다. (java.net.URL을 classpath기준으로가져오기 위해서) @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceLoader.getResource("classpath:test.txt"); // #1. Resou..

Study/Spring 2022.02.13