프로그래밍 공부
[Spring] 의존 자동 주입, @AutoWired
@Autowired 어노테이션을 이용한 의존 자동 주입 대체로 스프링에서 자동주입이라고 말하면 @Autowired 어노테이션이 붙어있는 경우를 말한다. @Autowired 를 해당 필드나 메서드에 붙이게 되면 스프링은 타입이 일치하는 빈 객체를 찾아서 주입하게 된다. 만약 생성자 주입을 사용한다면, 생성자가 하나일 경우 @AutoWired 를 생략해도 자동 주입된다. public class MemberInfoPrinter { private MemberDao memDao; private MemberPrinter printer; public void printMemberInfo(String email) { Member member = memDao.selectByEmail(email); if (member =..
[Spring] @Component vs @Bean
저번 포스팅 ([Spring] Java Bean vs Spring Bean) 에 이어서 빈과 관련된 두번째 포스팅을 진행한다. 스프링 MVC에서는 @Controller, @Service, @Repository 등으로 빈으로 등록할 수 있으며, configuration 관련 객체들은 @Bean과 @Component 으로 스프링 컨테이너에 객체를 빈으로 등록할 수 있다. 그럼 @Bean 과 @Component의 차이는 무엇일까? 두 어노테이션은 혼용해도 될까? 정답은 No다. @Bean과 @Component는 각자 선언할 수 있는 타입이 정해져있어 해당 용도외에는 컴파일 에러를 발생시킨다. 각각의 어노테이션에 대해서 알아보도록 하자. @Component 개발자가 직접 컨트롤이 가능한 Class들의 경우에사용..
[Spring] Controller에서 데이터 받기
대체로 Spring으로 애플리케이션을 구성한다면, Controller에서 값을 받아서 비즈니스 로직을 처리하도록 넘기게 된다. 이때, 이러한 Method Parameter를 어떻게 받는지에 대해서 이야기해보고자 한다. 어찌보면 간단한 개념을 왜 정리하지? 싶을 수도 있으나, 공식 문서를 보게되면 굉장히 많은 Method Argument를 제공하고 있다는 것을 볼 수 있다. 그렇기에, 일단 지금 쓰는 것을 제대로 소화하고, 그 이유를 이해한 뒤에 추가적으로 다른 개념들을 이해하면 더 좋을 것 같아서 정리해본다. @RequestParam @Controller @RequestMapping("/pets") public class EditPetForm { // ... @GetMapping public String..
[Spring] Java Bean vs Spring Bean
스프링으로 개발을 진행하다보면, Bean이라는 개념을 정말 자주 만나게 된다. 무슨 느낌인지 대충은 알겠는데... 그래서 대체 Bean은 어떻게 만들어지는 것이고, 무슨 개념일까? 라고 물으면 막상 대답하기는 쉽지 않다. 그래서 일단 Bean이라는 것이 무엇인지부터 알아보면서 Bean에 대해서 하나씩 정리해보고자 한다. Java Bean Bean은 스프링에서만 나오는 개념 아니야? 라고 물어볼 수 있으나, 자바에도 빈이라는 개념은 존재한다. 위키피디아 링크 Java Bean은 데이터 표현을 목적으로 하는 특정 형태의 클래스라고 이해하면 된다. DTO나 VO와도 유사한 점이 있어 보인다. 개발 툴이나 응용프로그램에서 사용하고자 하는 개념으로 출발했다고 하나, 현재는 그 의미로는 거의 사용하지 않는 것으로 ..
[Spring] @ExceptionHandler 와 @ControllerAdvice
예외처리 프로그래밍에서 예외처리는 매우 중요하다. 사실 우테코에 들어오기 전에는 예외처리와 관련된 코드를 매우 세세하게 짜는 편은 아니었다. 그냥 돌아가면 되는 거지! 정도의 코드였다. 다만, 상세하고 다양한 예외를 갖출 수 있게 된다면 더 안정적인 프로그램이 만들어질 수 있다. 그렇지만 try-catch나 if문으로 예외를 잡거나 상위메서드로 예외처리를 위임하는 등의 작업을 진행하더라도 코드는 쉽게 복잡해질 수 있고, 이는 비즈니스 로직보다 예외처리를 위한 코드에 더 힘쓰게 되는 결과를 초래한다. 나 역시 해당 부분에 있어서 잘 모르는 부분이 존재했고, 또한 기존 Spark 구현 코드를 Spring으로 이식하는 과정에서 예외처리와 관련된 문제들을 해결하기 위해 @ExceptionHandler와 @Con..
[Spring] DI(Dependency Injection, 의존성 주입)이란?
의존이란? 의존 주입이라는 단어를 알아보기 전, 의존이라는 단어의 의미부터 알아보자. 여기서 말하는 의존은 객체 간의 의존을 의미한다. 간단하게 아래의 예시를 보자. public class LottoService{ private LottoTicket winLottoTicket = new WinLottoTicket(); public int checkNumber(LottoTicket userTicket){ return winLottoTicket.checkSameNumber(userTicket); } } 위의 코드에서 집중해서 보아야 할 점은, LottoService라는 클래스가 LottoTicket이라는 클래스의 메서드를 사용한다는 점이다. 즉, 간단하게 말해서 객체에서 '의존'한다는 의미는 한 클래스가 다..
[Spring] @Controller와 @RestController
String에서 컨트롤러를 지정하기 위한 어노테이션으로는 @Controller와 @RestController가 있다. 기존 Spring MVC의 컨트롤러인 @Controller가 존재하는데도 왜 @RestController를 새로 만들어서 사용하고 있는 것인지에 대해서 정리해보고자 한다. MVC 패턴이란? 먼저, Controller라는 개념이 등장한 MVC 패턴에 대해서 알아보자. MVC 패턴은 Model - View - Controller의 약자로, 각 세가지 형태로 역할을 나누어 개발하는 방법론의 일환이다. 간단하게 설명하면, 각 형태는 다음과 같은 역할을 갖는다. View : 사용자에게 시각적으로 보여주는 부분으로, 사용자와 상호작용을 하는 부분 Model : 해당 애플리케이션이 처리하는 데이터를 ..
[Spring] @RequestMapping
@RequestMapping이란? client에서 오는 요청을 처리하기 위한 api url을 매핑할 때, Spring에서는 @RequestMapping이라는 어노테이션을 사용한다. 이때, 편의를 위해서 이 RequestMapping을 4가지로 나뉘어 추가적으로 지원하는데, 이는 아래의 5가지와 같다. @GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping @ReqeustMapping의 옵션 value value는 간단하게 말하면 연결할 url이다. 이는 다양한 방식으로 사용할 수 있으며, 기본적으로 url을 넣는 이외에도 정규식, 변수, AntPattern 등을 다양하게 활용할 수 있다. @RequestMapping(value = "/exam..
[JAVA] JVM이란?
1. JVM이란? JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신은 프로그램 실행을 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것.) 자바 애플리케이션은 클래스 로더를 통해 읽어들여 자바 API와 함께 실행한다. 자바 바이트 코드를 실행할 수 있는 주체다. Bytecode는 클래스 단위(.class)로 생성되므로, 프로그램의 수정이 일어나더라도 전체 소스코드를 다시 컴파일할 필요가 없다. Java가 OS에 구애받지 않고 재사용 가능하게 해준다. (중개자의 역할) 메모리 관리, Garbage Collection을 수행한다. 스택 기반의 가상 머신 2. 왜 자바 가상머신을 알아야 하는가? 한정된 메모리를 효율적으로 사용하여 최고의 성..
[Java] Stream API
1. Stream API란 스트림이란 자바 8 API에 새롭게 추가된 기능이다. JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java를 이용해 함수형으로 프로그래밍할 수 있는 API 들을 제공해주고 있다. 그 중에서 Stream API는 데이터를 추상화하고, 처리하는데 자주 사용되는 함수들을 정의해두었다. 여기서 데이터를 추상화하였다는 것은 데이터의 종류에 상관 없이 같은 방식으로 데이터를 처리할 수 있다는 것을 의미하며, 그에 따라 재사용성을 높일 수 있다. 이번 로또 과제를 하면서 개인적으로 Stream API의 사용에 대해서 리뷰어분께 질문을 해봤고,대체러 Stream을 사용한다는 이야기를 들을 수 있어, 한번 정리하면서 공부를 진행해보려고 한다. 위의 예제에서 나와..