목록전체 글 (287)
개발자는 기록이 답이다
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bfw9gJ/btsEmMvh7AB/6Ek1YAnxuuhkfcKtTU6Iw0/img.png)
객체지향 프로그래밍의 장점 중 하나는 코드를 재사용하기가 용이하다는 것이다. 전통적인 패러다임 에서 코드를 재사용하는 방법은 코드를 복사한 후 수정하는 것이다. 객체지향은 조금 다른 방법을 취한다. 객체지향에서는 코드를 재사용하기 위해 '새로운 코드를 추가한다. 객체지향에서 코드는 일반적으로 클래스 안에 작성되기 때문에 객체지향에서 클래스를 재사용하는 전통적인 방법은 새로운 클래스를 추가하는 것이다. 클래스를 재사용하기 위해 새로운 클래스를 추가하는 방법 상속 : 재사용 관점에서 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 방법 합성 : 새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법 (11장에서는 합성에 관해 자세히 살펴보고 상속과 합성의 장단점..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Cf5N4/btsEmExwnHY/b6ju7jIpkTLxYfr9uFpBu1/img.png)
1. 함수 호출 모델(함수를 호출하는 관점) 동기 비동기 Blocking Java IO x Non-Blocking Java NIO (File IO는 non-blocking 불가능) Java AIO(Java NIO2) Java IO는 동기 블로킹만 지원한다. caller가 IO요청을 하는 동안 아무것도 하지못하고, 응답이 돌아왔을때 caller가 직접 처리하는 구조 Java NIO는 동기 논블로킹에 해당한다. 대신 File IO는 non-blocking이 불가능하고 동기블로킹으로 동작한다 2. I/O모델(내부적으로 어플리케이션이 커널을 호출하는 IO관점) 동기 비동기 Blocking Java IO x Non-Blocking Java NIO, Java AIO x 3. Java IO Java 1.0에서 처음 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/biCp5M/btsEeKMlCij/2GVZEt0ckQeU84Za3H0K20/img.png)
함수형 인터페이스 함수형 프로그래밍을 지원하기 위해 java8부터 도입 1개의 추상 메서드를 갖고 있는 인터페이스 함수를 1급 객체로 사용할 수 있다 함수를 변수에 할당하거나 인자로 전달하고 반환값으로 사용 가능 Funtion, Consumer, Supplier, Runnable 등 @FunctionalInterface public interface Function { R apply(T t); } @FunctionalInterface public interface Consumer { void accpet(T t); } @FunctionalInterface public interface Supplier { T get(); } @FunctionalInterface public interface Runnabl..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/czaMdt/btsEdMvGd4z/G3Wt6f5JoUOaUKHahWcte1/img.png)
자바의 신 책에는 DTO에 Serializable를 꼭 구현해야 된다고 되어 있다. 하지만 나는 Spring boot 프로젝트를 했을때 한번도 구현하지 않았는데도, 문제가 없었던것 같다. 어떤 관련이 있는지 "직렬화"라는 개념에 대해서 더 정확히 이해하고자 한다. 본 포스팅을 이해하기 위해서는 사전에 IO에 대한 배경지식이 필요하다. 1. 직렬화란? 직렬화라는 개념은 wiki에서 나오는 것처럼"데이터의 구조"나 객체의 "상태"를 지속되게 만드는 프로세스이다. 우리가 만든 데이터와 객체는 이미 비트로 표현되어 있으며, 해당 객체가 네트워크로 전송되거나 데이터베이스에 저장되기 위해 객체의 상태를 연속적인 바이트 형태로 유지하는 것이 바로 직렬화이다. 여기서 마샬링이라는 개념도 나오는데, 직렬화랑 비슷하지만 ..