본문 바로가기

Dev.

(341)
[Java8] 2. Default Method(디폴트 메서드) 2. 디폴트 메서드Java 8에서는 디폴트 메서드라는 것을 사용하여 메서드 구현을 포함하는 인터페이스를 정의할 수 있다. 인터페이스에서 이미 구현을 했으니 해당 인터페이스를 구현하는 클래스에서는 추가된 메서드의 구현을 추가적으로 할 필요가 없다. 결과적으로 기존 인터페이스를 구현하는 클래스는 자동으로 인터페이스에 추가된 새로운 메서드의 디폴트 메서드를 상속받게 된다. 디폴트 메서드를 활용하면 자바 API의 호환성을 유지하면서 라이브러리를 변경할 수 있다. 기존에는 이미 공개된 라이브러리를 수정할 때 인터페이스에 메서드를 추가하게 되면 해당 인터페이스를 구현하고 있는 클래스에 모두 메서드를 구현해줘야 했지만 디폴트 메서드를 통해 구현하면 그렇게 하지 않아도 된다. 훨씬 더 유연해진 것이다. 이와 같은 방식..
[NoSQL] Intro. NoSQL이란 NoSQL이란?대용량 웹 서비스를 위하여 만들어진 데이터 저장소관계형 데이터 모델을 지양하며 대량의 분산된 데이터를 저장하고 조회하는 데 특화된 저장소스키마 없이 사용 가능하거나 느슨한 스키마를 제공하는 저장소 종류마다 쓰기/읽기 성능 특화, 2차 인덱스 지원, 오토 샤딩 지원 같은 고유한 특징을 가진다. 대량의 데이터를 빠르게 처리하기 위해 메모리에 임시 저장하고 응답하는 등의 방법을 사용한다. 동적인 스케일 아웃을 지원하기도 하며, 가용성을 위하여 데이터 복제 등의 방법으로 관계형 데이터베이스가 제공하지 못하는 성능과 특징을 제공한다. CAP 정리일관성일관성은 동시성 또는 동일성이라고도 하며 다중 클라이언트에서 같은 시간에 조회하는 데이터는 항상 동일한 데이터임을 보증하는 것을 의미한다. 이것은 관계..
[JAVA8] 1. 동작 파라미터화 전달하기 [JAVA 8] 1. 동작을 파라미터로 전달하기 메소드 내부에서 실행되는 동작이 유동적인 경우가 있다. 이러한 경우 오버로딩을 사용하여 해결할 수 있지만, 전달되는 파라미터가 동일한 경우 그럴 수 없다. 때문에 메소드 내부에서 if 문을 통해 해당하는 동작에 따라 실행되도록 해야 한다. 이것에는 실제 수행되어야 하는 비즈니스 로직과 상관없는 코드들을 생성하고, 실행해야 한다는 문제점이 있다. 더욱이 가독성은 지극히 떨어지며 그 메소드는 더이상 한 가지 일만 수행하지 않게 된다. 코드를 살펴보자. private List filter(List list) { List result = new ArrayList(); for (Apple apple : list) { if (apple.getColor().equals..
[DP] 2. 빌더 패턴(Builder Pattern) #2. 빌더 패턴(Builder pattern)인스턴스를 생성할 때, 생성자(Constructor)만을 통해서 생성하는데는 어려움이 있다. 빌더 패턴은 이 문제를 기반으로 고안된 패턴 중 하나이다. 예를 들면, 생성자 인자로 너무 많은 인자가 넘겨지는 경우 어떠한 인자가 어떠한 값을 나타내는지 확인하기 힘들다. 또 어떠한 인스턴스의 경우에는 특정 인자만으로 생성해야 하는 경우가 발생한다. 이럴 경우, 특정 인자에 해당하는 값을 null로 전달해줘야 하는데, 이는 코드의 가독성 측면에서 매우 좋지 않다는 것을 직감적으로 알 수 있다.코드를 통해 확인해보자.public Student(long id, String name, String major, int age, String address) { this.id..
blocking, non-blocking and Async blocking, non-blocking and AsyncBlocking I/O Model일단 I/O작업은 User Level(application)에서 직접 수행할 수 없다. 실제 I/O작업은 Kernel Level(OS)에서 일어나는 과정이다. 따라서 유저 프로세스(applicatioin)는 커널(OS)에게 I/O 작업에 대한 요청을 해야 한다. I/O 작업을 처리하기 위해 User Level에 있던 Application이 시스템 함수를 호출한다.(system call) 이 때 context-switching 이 발생한다. 그리고 Kernel Level에서 해당 I/O 작업이 끝나고 데이터를 반환하게 되면 그 때가 되서야 애플리케이션 단의 스레드에 걸렸던 block이 풀린다. 애플리케이션 관점에서 보..
[JAVA Adv] Blocking I/O, ServerSocket, Socket 그리고 Thread Pool Blocking I/O, ServerSocket, Socket 그리고 Thread Pool성능에 영향을 미치는 결정적인 요인으로서의 I/O에는 크게 두 가지 I/O가 존재한다. 디스크에서 데이터를 읽어오는 I/O와 네트워크 통신에서 발생하는 I/O이다. 이 두 I/O 작업이 처리되는 속도는 CPU의 작업 처리 속도에 비해 매우 느리다. 그렇기 때문에 애플리케이션의 성능은 이 I/O 작업을 어떻게 처리하느냐에 달려있다고 할 수 있다. 그 중 네트워크 통신에 사용하는 Socket을 중심으로 I/O 방식을 알아보자. Socket소켓(Socket)의 정의를 다시 한 번 짚고 가자면, 소켓이란 데이터 송수신을 위한 네트워크 추상화 단위로 IP주소와 포트를 가지고 있으며 양방향 네트워크 통신이 가능한 객체다. 이 ..
[개발] 자바 네트워크 프로그래밍 / 엘리엇 러스티 저 / 강성용 역 / O'REILLY' 자바 네트워크 프로그래밍 / O'REILLY기본적인 네트워크 프로그래밍을 학습하는데 적합한 책이다. 조금 더 심화된 네트워크 프로그래밍 내용을 학습하기에는 이 책은 적합하지 않다. 책의 구성은 다음과 같다. 1장 기본 네트워크 개념 네트워크 / 네트워크 계층 / IP, TCP 그리고 UDP / 인터넷 / 클라이언트/서버 모델 / 인터넷 표준 2장 스트림 출력 스트림 / 입력 스트림 / 필터 스트림 / reader와 writer 3장 스레드 스레드 실행하기 / 스레드에서 데이터 반환하기 / 동기화 / 데드락 / 스레드 스케줄링 / 스레드 풀과 익스큐터 4장 인터넷 주소 InetAddress 클래스 / Inet4Address 클래스와 Inet6Address 클래스 / NetworkInterface 클래스 /..
스타트업 개발 인턴 면접 vs 대기업 개발 인턴 면접 이번에 스타트업과 대기업 한 곳씩 'SW개발 인턴'으로 지원을 했습니다. 그 지원 과정과 면접 후기를 공유합니다. 구직하고 계시는 예비 개발자분들에게 도움이 되었으면 좋겠습니다. (면접에서 물어본 구체적인 내용에 대해서는 말씀드릴 수가 없습니다.) 스타트업 K사 지원 후기서류로 지원서와 포트폴리오가 제출하였고, 운이 좋게 통과하면서 면접 날짜가 잡혔다. 그리고 Coding Assignment가 주어졌다. 자신이 원하는 언어를 사용하여 문제를 해결할 수 있었고 제한 시간(3시간)내에 풀어서 Github주소를 통해 제출하는 방식이었다. 지원한 회사와 관련된 coding assignment가 주어졌다. 평소에 사용해봤던 라이브러리를 사용하여 보다 수월하게 할 수 있었지만 완벽하게 구현하진 못했다. 면접은 오후..