분류 전체보기
-
자바 8 - 함수형 인터페이스 Predicate<T>Java, Kotlin, Spring 2022. 1. 12. 08:06
자바의 람다 표현식 - 정의와 사용방법에 이어서 자바의 람다 표현식 - 활용 방법 까지 알아보았다. 자바 8 버전에는 람다와 메소드 참조를 쉽게 사용할 수 있도록 도와주는 함수형 인터페이스들을 제공한다. 함수형 인터페이스들은 java.util.function 패키지에 정의되어 있다. 제공하는 인터페이스의 종류는 공식문서에서 확인하자. 이 포스팅에서 사용한 예제코드는 Github 에서 확인할 수 있다. 1. 사전 준비 우리는 Predicate, Consumer 그리고 Function 를 알아볼 것이다. 각각의 함수형 인터페이스를 사용할 객체로 Vehicle 클래스를 만들어서 사용해보자. public class Vehicle { private Type type; private String vendor; pr..
-
자바의 람다 표현식 2 - 활용 방법Java, Kotlin, Spring 2022. 1. 12. 08:05
이 전 포스팅에서 람다의 정의와 사용방법에 대하여 알아보았다. 이번 포스팅에서는 람다가 적용되어 있지 않은 기존 코드에 람다를 적용하여 변화를 살펴보고, 어떠한 점을 얻게 되었는지 살펴보자. 1. 반복되는 동작을 발견하기 동작 파라미터화는 반복되는 동작을 파라미터로 전달받음으로써 해당 부분에 대한 제어권을 호출 영역으로 넘기는 것이다. public String processFile() throws IOException { try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { return br.readLine(); } } 위의 예제 코드에서와 같이 파일 처리같은 작업은 대부분 자원을 열고, 처리한 다음, 자원을 닫는 순서로 진..
-
자바의 람다 표현식 1 - 정의와 사용방법Java, Kotlin, Spring 2022. 1. 12. 08:03
C와 Java의 기본 문법을 막 공부하고, 몇 가지 간단한 프로그래밍을 할 수 있었던 시점에 자바스크립트는 두 언어와 달리 함수를 다루는 방식이 매우 자유롭다는 것을 처음 알고나서 매우 신기했던 기억이 있다. 람다 표현식은 이급 객체(second-class)에 머물던 자바의 함수(객체 내 메소드)를 일급 객체(first-class)으로 바꾼 것이다. 좀 더 자세히 알아보도록 하자. 1. 메소드를 값으로 취급 function withFoo(func) { const foo = function () { console.log('foo'); }; return function () { foo(); func(); }; } const bar = withFoo(function () { console.log('bar');..
-
ReactNative 에서 Github Actions 로 CI/CD 구축하기React, React Native 2022. 1. 12. 08:01
Github Actions 프로젝트의 Workflow를 쉽게 구성할 수 있도록 하는 Github의 기능. 목표 테스트 자동화 빌드 자동화 원격 저장소(s3)에 Artifacts 파일 업로드 Slack Notification Github Secrets 원격 레포지토리에 업로드 할 수 없는 소스 코드를 Github Actions에서 사용하기 위함. 안드로이드 빌드 패스워드 (KEY_PASSWORD, UPLOAD_PASSWORD) 안드로이드 릴리즈 키 AWS 정보 Slack Webhook Endpoint 테스트 자동화 jobs: install-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install npm depend..
-
Composite Pattern 알아보기Design Pattern 2022. 1. 12. 07:57
JAVA 객체지향 디자인 패턴 도서를 참고한 내용임. 구조적 형태의 전체와 부분의 유사성 - 컴퍼지트 패턴 Computer(전체)를 구성하는 Keyboard, Body, Monitor(부분)이 유사하다. 문제점 Interface를 활용하여 의존성 역전을 하지 않은 코드는 OCP를 위배할 수 밖에 없다. Interface가 아니라 구체 클래스를 의존하는 클래스는 변경이 필요할 때, 수정을 피할 수 없기 때문이다. 따라서 여기서도 OCP를 위배했다고 책은 지적한다. (우리가 작성하고 있는 코드의 거의 대부분..(99%)은 OCP를 위배한다. ) 해결책 문제점의 핵심은 Computer 클래스가 부품을 구현한 구체적인 클래스를 의존하기 때문이다. 우리는 이 전통적인 의존 방향성을 고쳐야 한다. 이 그림을 다시보..
-
Jest 에서 callback 실행 테스트 해보기Javascript 2022. 1. 12. 07:55
기존에 처리하던 방식 this.setState(state, () => { this.props.requestAPI(); });위의 코드가 있다고 하자. 기존에는 setState 함수를 jest.fn 으로 mock 시켜버리니, callback의 실행을 테스트할 방법이 없다고 생각했다. 그래서 requestAPI의 실행은 검증할 수 없었고, 아래와 같이 expect문을 작성하여 익명의 함수가 전달되었다는 테스트만 작성했다. expect(mockSetState).toBeCalledWith(state, expect.any(Function)); mockImplementaion 사용하기 혹시나 어떤 특별한 방법이 있을까? 하고 궁금하여 jest.fn how to run callback 이라고 구글에 검색했다. 그런데..
-
Spring Security 간단 용어 정리Java, Kotlin, Spring 2022. 1. 12. 07:54
Spring Security Authentication 용어 정리 SecurityContextHolder - 인증된 유저의 세부사항이 저장되는 장소 SecurityContext - SecurityContextHolder에서 얻어지며 현재 인증된 유저의 Authentication을 포함하고 있음 Authentication - 인증받을 유저나 SecurityContext안에 현재 유저에게 credential을 제공하기 위해 AuthenticationManager에 입력될 수 있음 GrantedAuthority - Authentication에서 인증받은 유저에게 부여되는 권한 AuthenticationManager - Spring Security의 Filter가 인증을 수행하는 방법이 정의된 API Provi..
-
React Native 에서 단위 테스트 작성하기React, React Native 2022. 1. 12. 07:53
Prototype class 문법으로 Foo 클래스(함수) 생성하기 class Foo1 { methodA() { console.log('method A'); } } 전통적인 방식으로 Foo 함수 생성하기 var Foo2 = function() {}; Foo2.prototype.methodA = function() { console.log('method A'); }; 사용해보기 var foo1 = new Foo1(); foo1.methodA(); var foo2 = new Foo2(); foo2.methodA(); Foo1.prototype.methodA(); Foo2.prototype.methodA(); 두가지 방식은 같은 결과를 보여준다. React Native에서 View..