목록분류 전체보기 (231)
코딩 기록들

여행사에 패키지 여행상품이 있다. - 여행비용 : 20세이상 100만원, 미만은 50만원 - 고객 3명이 패키지여행을 떠난다고했을때, 비용계산과 고객명단 검색등에 대한 연산을 스트림을 활용해 구현 - 고객에 대한 클래스 만들고 ArrayList로 고객 관리 - custer class 만들고 ArrayList로 관리 힌트 1. 고객의 명단을 출력 2. 여행의 총비용 계산 3. 고객중 20세이상인 사람의 이름을 '정렬'(sorted())하여 출력 고객정보 Customer CustomerLee CustomerKim CustomerHong 이름 이유신 김유신 홍유신 나이 40 20 13 비용 100 100 50 public class TravelCustomer { private String name; //이름 ..
연산 수행에 대한 구현을 하는 reduce() 연산! 정의된 연산이 아닌 프로그래머가 직접 구현한 연산을 적용 reduce()의 두번째 파라미터로(람다식으로) 구현할수있다(방법1) -> 만약 이 내용이 너무 많다면, BinaryOperator를 구현하고, Binary Operator를 구현한 클래스를 넣어주면 됨(아래 예시 중 방법2) T reduce(T identify, BinaryOperator accumulator) 최종 연산으로 스트림의 요소를 소모하며 연산을 수행 배열의 모든 요소의 합(sum을 쓸 수도 있지만,)을 구하는 reduce() 연산 구현 예 Arrays.stream(arr).reduce(0, (a,b)->a+b)); // reduce()에 들어가는 값 : 초기 - initial값, ..

Custom Validation 1. AssertTrue / False 와 같은 method지정을 통해 Custom Logic 적용 가능(재사용 불가) 2. CustomValidator를 적용하여 재사용이 가능한 Custom Logic 적용가능 @AssertTrue -> "is" 라는 키워드로 항상 메소드가 시작해야 됨 @AssertTrue(message = "yyyyMM의 형식에 맞지 않습니다.") public booldean isReqYearMonthValidation(){ System.out.println("assert true call"); try{ LocalDate localDate = LocalDate.parse(getReqYearMonth() + "01", DateTimeFormatter.o..
Validation - 자바에서 null값에 대해 접근하려고 할 때 null pointer exception 발생 -> 이러한 부분 방지 위해 미리 검증을 하는 과정을 validation 이라고 함 [ validation이 필요한 이유 ] 1) 검증해야할 값이 많은 경우 코드의 길이가 길어짐 2) 구현에 따라 Service Logic과의 분리가 필요함 3) 흩어져 있는 경우 어디에서 검증하는지 알기 어렵고, 재사용의 한계가 있음 4) 구현에따라 달라질 수 있지만, 검증 로직이 변경되는 경우 테스트코드등 참조하는 클래스에서 로직이 변경되어야하는 부분이 발생할수 있음 자주 사용하는 annotation @size 문자길이 측정 (Int Type 불가) @NotNull null 불가 @NotEmpty null,..

AOP Aspect Oriented Programming 관점지향 프로그래밍 - 스프링 어플리케이션은 특별한경우를 제외하고는 대부분 MVC 웹 어플리케이션에서 web layer, business layer, data layer로 정의 1) web layer : REST API를 제공하며, Clienet 중심의 로직 제공(ex.response 내려주거나 Http statur 바꿔주는 역할) 2) business layer : 내부정책에 따른 logic를 개발하며, 주로 해당 부분을 개발 3) data layer : 데이터베이스 및 외부와의 연동 처리 - 횡단관심 - AOP : 기능 중복되는 메소드들, 특정 구역에 반복되는 로직들을 한곳에 몰아서 코딩할수있게 해줌 (스프링 어플리케이션의 특징) - 주요 An..
스트림이란? - 자료, 컬렉션, 배열등이 모여있을때, 이 자료들의 연산을 한다고 했을때 연산들의 처리를 추상화(일관성있게) 한 것(동일한 방식으로 연산될 수 있도록) 자료의 대상과 관계없이 동일한 연산을 수행 일관성 있는 연산으로 자료의 처리를 쉽고 간단하게 함 자료 처리에 대한 추상화가 구현되었다고 함 배열, 컬렉션(스트림메소드 호출가능 : .stream하면 스트림객체 생성가능)을 대상으로 연산을 수행 함 한번 생성하고 사용한 스트림은 재사용 할 수 없음 다른 연산을 수행하기 위해서는 스트림을 다시 생성해야 함 자료에 대한 스트림을 생성하여 연산을 수행하면 스트림은 소모됨 import java.util.Arrays; public class IntArrayStreamTest { public static ..

IOC Inversion of Control - 스프링에서는 일반적인 자바 객체를 new 로 생성하여 개발자가 관리하는것이아닌, 'Spring Container'에 모두 맡김 (싱글톤의 형태로 관리됨) - 개발자에서 -> 프레임워크로 제어의 객체관리의 권한이 넘어갔음 : "제어의 역전" -> 객체를 사용하기위해서는? : 주입을 받는다! (DI) DI Dependency Injection (장점) - 의존성으로부터 격리시켜 -> 코드테스트에 용이함 - 외부로부터 내가 사용할 객체에 주입을 받음 - DI 통해 불가능한 상황을 안정적으로 테스트 가능(ex. Mock과 같은 기술) - 코드를 확장하거나 변경할 때 영향을 최소화(추상화) - 순환참조를 막을 수 있음 DI 활용 예시 public class Enco..
스프링 프레임워크의 구성 : 총 20여가지 https://spring.io/projects/spring-framework/ -> 이러한 모듈들은 스프링의 핵심기능(DI, AOP, etc)을 제공하며 필요한 모듈만 선택하여 사용가능 현재 단일 아키텍처(대부분이 모놀리스 형태의 서버)에서 마이크로서비스 아키텍처로 변환중 (스프링도 이에맞춰 진화하고 있는 상태) 여러가지 모듈 중, 스프링부트(웹서버), 스프링데이터(JDBC, 마이바티스, JAP), 스프링배치(일정양의 데이터 모아서 대용량 처리), 스프링 시큐리티(웹서버, 백오피스 등 권한 관련된거 처리),스프링 클라우드(마이크로서비스) 스프링의 등장 배경 ) 2000년대 초반 자바 EE : 작성/테스트가 매우 어렵고 번거로웠다 -> 느슨한 결합이 된 애플리케..