분류 전체보기 59

데코레이터 패턴, 프록시패턴 그리고 다이나믹 프록시

AOP는 IoC/DI , 서비스 추상화와 함께 스프링의 3대 기반 기술 중 하나이다. 스프링이 DI를 사용하는 이유가 무엇이었나 한번 생각을 해보자. 만약 Client쪽에서 어떠한 클래스를 직접 참조하게 되면 그 클래스의 비즈니스 로직을 수정이 수정되면 client쪽 서비스가 정상 작동하지 않을 수 있다. 그렇기 때문이 이 두 오브젝트의 결합도를 낮추기 위해 인터페이스를 사용하여 의존관계를 주입해주고, 오브젝트간의 결합도를 낮춘다고 했다. AOP에서도 이러한 DI가 중요하게 사용되는데, 기존에 Client가 UserService라는 객체를 직접 참조했다고 가정해보자. 이는 강한 결합도를 띄고 있는 상태이므로 Client

Study/Spring 2022.04.13

REST, REST API, RESTful 과 HATEOAS

더이상 미룰 수 없다. 너의 결혼, 나의 Rest API와 Hateoas 정리 ㅋ_ㅋ Rest, Restful 참 많이도 들어봤다. 도대체 Rest API는 무엇인가? 결론적으로 얘기하면 REST는 아키텍쳐이고, REST API는 REST를 기반으로 서비스 API를 구현 한 것이다. REST Rest란? 먼저 REST는, 자원 기반의 구조(ROA, Resource Oriented Architecture)설계에서 그 중심에 Resource가 있고 이 Resource 를 처리 하기 위해서 HTTP Method를 활용하는 아키텍쳐이다. REST에서 가장 중요한 것은 Resource이다. 이렇게 중요한 자원을 REST에서는 서버와 클라이언트간에 어떻게 주고 받느냔 말이다? 그 답은 바로 REST 안에 있다. R..

Study/Web 2022.04.12

자바 기본서를 다시 읽다. 9 - 스트림의 최종처리 메소드

스트림의 최종 처리 메소드에 대해서 알아보자. 매칭(allMatch(), anyMatch(), noneMatch()) 매칭 메소드는 최종처리시 요소들이 특정 조건에 만족하는지 Predicate 를 사용하여 조사한다. 어려울것이 없다. public static void main (String[] args){ int[] intArr = new int[]{1,3, 5}; boolean isAllEvenNum = Arrays.stream(intArr).allMatch(a->a%2==0); boolean isThereEvenNum = Arrays.stream(intArr).anyMatch(a->a%2==0); boolean isAllOddNum = Arrays.stream(intArr).noneMatch(a->a..

Study/Java 2022.04.06

자바 기본서를 다시 읽다. 8 - 스트림의 중간처리 메소드

스트림은 기본적으로 중간처리 메소드와 최종처리 메소드로 이루어진 파이프라인으로 활용할 수 있다고 이전에 알아보았다. 그렇다면 중간처리와 최종 처리시 각각 활용할 수 있는 메소드들에 어떤 것들이 있는지 알아보자. 스트림의 중간처리 메소드 distinct(), filtering() 첫번째로, 중복 데이터를 걸러내는 distinct(), 특정 기준으로 데이터를 걸러주는 filtering()에 대해 알아보자. List list = Arrays.asList("윤가영","김나영","윤다영","김라영","윤마영","윤가영"); list.stream() .distinct() // 중복제거 .filter(n-> n.contains("윤")) // 조건 .forEach(s-> System.out.println("name ..

Study/Java 2022.04.06

자바 기본서를 다시 읽다. 7 - 스트림의 개념과 파이프라인

스트림의 개념과 특징 스트림(Stream)이란, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자를 말한다. // Iterator 와 Stream(람다식 사용)의 비교 public class IterationStreamExample { public static void main (String[] args){ List strings = Arrays.asList("홍길동","신용권","김자바"); Iterator iterator = strings.iterator(); while(iterator.hasNext()){ String name = iterator.next(); System.out.println("name is : " + name); } Stream stream = st..

Study/Java 2022.04.05

자바 기본서를 다시 읽다. 6 - 메소드 참조

메소드 참조 메소드 참조란, 메소드를 참조하여 매개변수의 정보 및 리턴 타입을 알아내어 람다식에서 불필요한 매개변수를 제거하는 것이다. 예를들어 아래와 같은 코드가 있을 때, 람다식은 단순히 두개의 값을 Math.max() 메소드의 매개값으로 전달하는 역할만 한다. ( o1 , o2 ) -> Math.max(o1, o2); 이는 메소드 참조를 통해 아래와 같이 간결하게 변환할 수 있다. IntBinaryOperator operator = Math :: max; 정적 메소드와 인스턴스 메소드 참조 정적메소드와 인스턴스 메소드를 참조하는 방식은 다음과 같다. 정적 메소드 - 클래스::메소드 인스턴스 메소드 - 참조변수::메소드 import java.util.function.IntBinaryOperator; ..

Study/Java 2022.03.29

자바 기본서를 다시 읽다. 5 - 함수적 인터페이스의 Default Method

4강에서 알아보았던 함수적 인터페이스들은 andThen()과 compose()라는 디폴트 메소드를 가지고 있다. 이 디폴트 메소드들은 첫번째 메소드의 처리결과를 두번째 메소드의 매개값으로 넘겨주지만, 인터페이스AB = 인터페이스A.andThen(인터페이스B); or 인터페이스AB = 인터페이스B.andThen(인터페이스A); 최종결과 = 인터페이스AB.method(); 위와같이 인터페이스 AB 의 method()를 호출하기 위해 매개값으로 인터페이스 A와 B의 연산값을 넘겨준다면 andThen은 인터페이스A 호출 -> 인터페이스B 호출 compose는 인터페이스B 호출 -> 인터페이스A 호출을 먼저 한다. Consumer와 Function API를 사용한 코드를 통해 알아보자. import java.ut..

Study/Java 2022.03.27

NLP의 이해

1. NLP ( natural Launguage Processing ) : 텍스트에서 의미있는 데이터를 처리하는 기술. 자연어는 기계어에 비해 처리하기가 어렵기 때문에 전처리 과정이 필요한데, Tokenization, cleaning, normalization 의 단계를 거친다. 토큰 : 문법적으로 더 이상 나눌 수 없는 언어 요소 OOV : Out of Vocabulary - 구축한 단에 사전에 단어가 없어 null값으로 처리됨. 단어사전수가 많아지면 Vector 수가 많아지고, 단어 사전 수가 적으면 예측력이 떨어지기 때문에 적절한 단어사전의 수를 정하는 것이 중요하다. 형태소 분석과 명사 추출 : Token을 만들 때 형태소나 명사 단위로 추출을 하는 방법. BPE : 형태소와 명사 추출 방법 라이..

CNN의 이해

1. Neural Network Input Layer - Hidden Layer - Output Layer가 weight 값에 의해 연결되어있다. Activation : 다음 모델에 값을 넘기는 방식. 액티베이션을 사용하는 이유는 비선형으로 딥러닝을 해석하기 위함이다. 선형으로 딥러닝을 설명하는 경우 복잡한 케이스에 대해서 하나의 식으로 설명할 수가 없기 때문이다. 따라서 임계치가 넘어가면 다음 뉴런을 Activate 시키는 뉴런의 활동방식과 동일하기 인공신경망에서도 Activation 처럼 중간 네트워크를 사용한다. Optimization : MSE : (예측한값 - 실제값) ^ 2 을 통해 Loss 를 측정. 제곱을 하는 이유는 오차에 대해 가중치를 주기 위하거나 미분할때 쉬우려고. 입력값에 따른 L..

데이터 과학과 AI

1. Data Planning 단계 : forecast는 시계열분석.x 의 final 값 이후에 어떤 값이 예측될 것인가? : prediction은 모형 설계 후 x의 도메인 내에서 y값 예측. 2. Data preparing - 데이터를 가공하기 전에 탐색하고, 구조적 측면을 파악한다. Without 모형 Resistance : 일부 관측 개체의 지나친 영향력에 저항하라 : 중앙값을 보면서 Residual : 일탈에 주목하라 : 튀는 값을 주목하라. 잔차(y - y의 예측값)가 큰 값을 보면 거기에 유의미한 결과가 있다. Re-Expression : 같은것이라도 달리 나타내어 득을 취한다. 3000 - 1000 을 로그를 취함으로써 30 - 10으로 나타낼 수 있는것처럼. Raw 데이터에 집착하지 않는..