분류 전체보기
Resource / Validation
들어가기에 앞서 본 포스팅은 백기선님의 인프런 강의를 기반으로 작성된 포스팅임을 알려드립니다. 처음 스프링을 배우는 입장이라 정확하지 않은 정보가 있을 수 있습니다. 댓글을 통해 알려주신다면 최대한 빨리 피드백하도록 하겠습니다! Resource 추상화 org.springframework.core.io.Resource : java.net.URL을 추상화한 클래스 추상화를 한 이유 : docs.spring.io 기존의 java.net.URL의 경우 classpath 기준의 상대경로로 읽어오는 기능 부재 ServletContext 기준의 상대경로로 읽어오는 기능 부재 구현의 복잡성과 편의성 메소드의 부족 Resource를 받아오는 상황으로 파일이나 URL에서 받아오는 경우를 생각해볼수 있다. // // Sou..
스프링 IoC 컨테이너와 Bean ( 3 )
들어가기에 앞서 본 포스팅은 백기선님의 인프런 강의를 기반으로 작성된 포스팅임을 알려드립니다. 처음 스프링을 배우는 입장이라 정확하지 않은 정보가 있을 수 있습니다. 댓글을 통해 알려주신다면 최대한 빨리 피드백하도록 하겠습니다! ApplicationContext AppicationContext는 컨테이너에서 Bean을 꺼내오는 기능말고도 다양한기능을 가지고 있습니다. Bean들의 그룹을 의미하는 Profile과 Property를 다루는 Environment Environment Spring Framework Docs Core Technologies In the preceding scenario, using @Autowired works well and provides the desired modulari..
스프링 IoC 컨테이너와 Bean ( 2 )
들어가기에 앞서 본 포스팅은 백기선님의 인프런 강의를 기반으로 작성된 포스팅임을 알려드립니다. 처음 스프링을 배우는 입장이라 정확하지 않은 정보가 있을 수 있습니다. 댓글을 통해 알려주신다면 최대한 빨리 피드백하도록 하겠습니다! Bean의 등록 Spring Boot에서 Bean은 ComponentScan을 통하여 등록됩니다. @SpringBootApplication 이라는 애노테이션 내부를 확인해보면 @ComponentScan 이라는 애노테이션이 메타애노테이션으로 달려있는 것을 확인할 수 있습니다. Spring Boot 프로젝트는 이 @SpringBootApplication이 붙어있는 클래스 이하의 경로에 있는 클래스들을 대상으로 @Component 가 붙어이는 애노테이션을 탐색하여 Bean으로 만들어주..
스프링 IoC 컨테이너와 Bean ( 1 )
들어가기에 앞서 본 포스팅은 백기선님의 인프런 강의를 기반으로 작성된 포스팅임을 알려드립니다. 처음 스프링을 배우는 입장이라 정확하지 않은 정보가 있을 수 있습니다. 댓글을 통해 알려주신다면 최대한 빨리 피드백하도록 하겠습니다! IoC ( Inversion of Control ) / DI ( Depencency Injection ) IoC ( 제어의 역전 ) 라는 말 자체는 개념적인 성격을 지닙니다. public class BookService { private BookRepository bookRepository = new BookRepository(); public Book save(Book book){ book.setCreated(new Date()); book.setBookStatus(BookSt..
빌더
이펙티브 자바 3판 아이템 2. 생성자에 매개변수가 많다면 빌더를 고려하라 빌더 빌더는 인스턴스 생성 시에 제공해야할 선택적 매개변수가 많을 때 사용할 수 있는 방식입니다. 메소드를 연쇄적으로 실행하면서 파라마터 값을 받아오고, 최종적으로 build() 를 통하여 완성된 인스턴스를 반환합니다. 기존의 사용방식 ( 점층적 생성자 패턴, 자바빈즈 패턴 ) public class ComputerShop { private String CPU; private String Mainboard; private String Ram; private Long RamSize; private String Cooler; private String GraphicCard; private String Case; public Compu..
정적 팩토리 메소드
이펙티브 자바 3판 아이템 1. 생성자 대신 정적 팩토리 메소드를 고려하라 인스턴스 생성법 보통 클래스의 인스턴스를 생성하기 위해서는 public 생성자를 이용합니다. 이 생성자를 이용하여 인스턴스를 얻는 방법에 대해 문제점을 찾아보는 시각으로 접근을 해봅시다. 운이 좋으면 어떠한 상황에도 별다른 문제점이 없는 사용방법이 될 수도있고, 어쩌면 문제점을 발견하고 그 문제를 해결할 수 있는 다른 방법을 얻을 수 있을지도 모릅니다. 생성자를 이용한 인스턴스 생성의 문제점? 역시 예시를 직접 살펴보는 것이 더 잘 이해될 것이라고 생각하여 예시 코드를 작성해가며 생각해 보았습니다. 1. 생성된 인스턴스의 목적성 public class Order { private String menu; private Long pr..
3392 화성지도
위 이미지와 같이 항상 x축, y축과 평행한 변을 가진 직사각형 들의 면적을 출력하는 문제입니다. 예시로 든 이미지를 좌표평면상에 그려보면 위와 같은 그림이 되며, 각 직사각형의 면적에 해당하는 부분에 1을 더하면 오른쪽과 같이 나타납니다. 1 이상의 값이 들어간 모든 블럭의 값을 합하면 면적이 되는 것을 알 수 있습니다. 단순하게 직사각형을 모두 탐색한다면 최대 30000의 좌표를 가지기 때문에 30000 * 30000 = 9억 으로 시간이 너무 많이 들게됩니다. 여기서 해결해야하는 부분을 살펴봅시다. 직사각형 내부의 숫자를 어떻게 갱신할 것인가. 1이상의 값을 가지는 블럭의 수를 어떻게 세야하는가? 크게 두 가지의 문제를 해결해야함을 알 수 있습니다. 해결법 숫자를 갱신하는 조건은 범위내의 면적에 숫..
p384 ( Slurpys )
Slump 조건 1. D or E로 시작 2. 첫 글자 이후엔 F가 1개 이상은 반드시 옴. 3. F이후에 Slump또는 G가 와야함 Slimp 조건 1. A로 시작. 2. 총 두글자라면 반드시 AH여야함. 3. 길이가 2 이상이면 두 가지 경우가 있음. -> AB(Slimp)C -> A(Slump)C Slurpy 조건 Slimp에 이어서 Slump가 나오는 문자열 조건에따라 주어진 문자열이 Slurpy가 맞는지 확인하는 문제입니다. isSlump()와 isSlimp() 함수를 재귀적으로 작동하게 만들어서 풀었습니다. 먼저 처음으로 주어진 문자열에서 D 또는 E의 바로 이전에 C가 있는 경우를 찾아서 전체 문자열을 Slimp와 Slump로 나눴습니다. Slump의 경우 F가 등장한 경우 계속해서 진행하며..
Optional
자바 8에서 추가된 키워드입니다. 어떠한 작업의 결과로 null이 왔을 때, 이를 처리하기 위해서는 보통 if문을 사용하여 체크합니다. College Ahn = College.student(1234567, "ddings"); Integer age = Ahn.getAge(); if(age != null){ /* do something */ } 이런식으로 null을 체크하게되면, 컴파일 타임에 IDE가 알려주지 않기 때문에 사용자가 실수로 빠트리는 경우 + 코드 작성 시의 번거로움이 생깁니다. 한 두개의 경우는 별로 신경쓰이지 않더라도 null체크를 해야하는 값이 많아지면 많아질수록 사용자가 실수할 확률은 점점 상승하며, 코드의 가독성은 하락할 것으로 예상됩니다. Optional Optional을 사용하게 ..
Stream
Stream 자바 SE 8 버전에 추가된 기능으로 Collection에 저장되어있는 데이터를 탐색하고, 선별하여 최종적인 결과를 만들어내는 과정을 좀 더 간편하게 표현할 수 있는 방법입니다. Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections. 오라클 자바 docs에서는 컬렉션의 map에서 특정 데이터를 골라내는 것과 같은 연산을 함수스타일로 지원해주는 클래스라고 말하고있네요. 스트림은 데이터를 담고있는게 아니라, 데이터가 흐를 수 있는 통로에 해당하는 개념이며 스트림내의 모든 연산은 보통 한번만 수행되며 스트림연산을 거치더라도 원본데이터의 ..