목록전체 글 (67)
devseop08 님의 블로그
중첩 클래스와 중첩 인터페이스객체지향 프로그래밍에서 클래스들은 서로 긴밀한 관계를 맺고 상호작용어떤 클래스는 여러 클래스와 관계를 맺지만 어떤 클래스는 특정 클래스와 관계를 맺는다.클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나,클래스가 특정 클래스와 관계를 맺을 경우에는 해당 클래스 내부에 특정 클래스를 선언하는 것이 좋다중첩 클래스중첩 클래스란 클래스 내부에 선언한 클래스를 말한다.중첩 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있고, 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있는 장점이 있다.class ClassName { class NestedClassName { }}중첩 클래스의 분류중첩 클래스는 클래스 내부에 ..
C++에는 두 가지 종류의 상수가 있다. 리터럴과 심볼릭이 그것이다.리터럴 상수기본 자료형의 값을 직접 표현한 것을 리터럴이라고 한다. 리터럴은 그 값을 프로그램에서 바꿀 수 없으므로 상수에 해당한다.리터럴은 코드에 직접 삽입한 값이다. 이 값은 변경할 수 없으므로 '상수'다.정수형 리터럴의 표현실수형 리터럴의 표현숫자 리터럴 접미사매직 넘버int value = variable * 30위 코드에서 30과 같은 숫자를 매직 넘버라고 한다.매직 넘버란 컨텍스트가 없는 코드 중간에서 하드 코딩된 리터럴(일반적으로 숫자)을 말한다.매직 넘버를 사용하는 것은 나쁜 습관: 매직 넘버가 무엇에 사용되는지에 대한 컨텍스트가 없고 나중에 값을 바꿔야 할 경우 문제 발생심볼릭 상수매직 넘버를 사용하는 대신 심볼릭 상수를 ..
데이터를 어떤 조건 함수에 따라 걸러내거나, 데이터를 그룹화하여 나누거나, 컬렉션 아이템을 다른 것으로 변환하는 등의 일반적인 컬렉션 접근 패턴을 표준 라이브러리 함수와 람다를 조합해 표현할 수 있다.함수형 스타일로 컬레션 다루기와 컬렉션 연산을 지연시켜 수행하기 위한 시퀀스를 알아보자코틀린에서 컬렉션 연산을 즉시 실행하는 방법과 지연 실행하는 방법을 비교6.1 컬렉션에 대한 함수형 API6.1.1 원소 제거와 변환 : filter(추출)와 map(변환)data class Person(val name:STring, val age:Int)filter함수는 컬렉션을 순회하면서 주어진 람다가 true를 반환하는 원소들만 모은다fun main(){ val people = listOf(Person("Alic..
8.1 컬렉션 팩토리자바 9에서는 작은 컬렉션 객체를 쉽게 만들 수 있는 몇 가지 방법을 제공한다.왜 이와 같은 기능이 필요한 지 살펴보고 새 팩토리 메서드를 사용하는 방법을 알아본다.자바에서 적은 요소의 리스트를 만드는 일반적인 방법List friends = new ArrayList();friends.add("Raphael");friends.add("Olivia");friends.add("Thibaut");Arrays.asList() 팩토리 메서드 이용List friends = Arrays.asList("Raphael", "Olivia", "Thibaut");고정 크기의 리스트를 만들었으므로 요소를 갱신할 수는 있지만 새 요소를 추가하거나 요소를 삭제할 순 없다.요소를 추가하거나 삭제하려 하면 Unsu..
실제적 문제 해결을 위해 인간이 사용하는 기억 저장소는 장기 기억이 아닌 단기 기억문제 해결을 위해 필요한 정보들을 먼저 단기 기억 안으로 불러들여야 하는데 단기 기억은 시간적 공간적 제약을 갖는다문제 해결에 필요한 요소의 수가 단기 기억의 용량을 초과하는 순간 문제 해결 능력 급감이런 현상을 인지 과부화라고 한다.인지 과부화를 방지하기 위해선 단기 기억 안에 보관할 정보의 양을 조절해야 한다.한 번에 다뤄야 하는 정보의 수를 줄이기 위해 불필요한 정보를 제거하고 현재 문제 해결에 필요한 핵심만 남기는 작업을 추상화라고 한다.일반적인 추상화 방법은 한 번에 다뤄야 하는 문제의 크기를 줄이는 것큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 한다.분해의 목적은 큰 문제를 인지 과부화의 부담없이 ..
스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 알아보자스트림을 이용하면 순차 스트림을 병렬 스트림으로 자연스럽게 바꿀 수 있는데 이것이 어떻게 가능한 것인지와 포크/조인 프레임워크와 내부적인 병렬 스트림 처리는 어떤 관계가 있는지 살펴보자여러 청크를 병렬로 처리하기 전에 우선 병렬 스트림의 요소를 여러 청크로 분할하는 방법에 관해 알아보자7.1 병렬 스트림7.1.1 순차 스트림을 병렬 스트림으로 변환하기컬렉션에 parallelStream 메서드를 호출하면 병렬 스트림이 생성된다.병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림을 말한다.병렬 스트림을 이용하면 모든 멀티코어 프로세서가 각각의 청크를 처리하도록 할당할 수 있다.순차 리듀..
유연하고 재사용 가능한 퍼블릭 인터페이스를 만드는 데 도움이 되는 설계 원칙과 기법을 익히고 적용해봐야 한다.1. 협력과 메시지클라이언트-서버 모델두 객체 사이의 협력 관계를 설명하기 위해 사용하는 전통적인 메타포, 클라이언트-서버 모델협력 안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다.협력은 클라이언트가 서버의 서비스를 요청하는 단방향 상호 작용객체는 협력에 참여하는 동안 클라이언트와 서버의 역할을 동시에 수행협력의 관점에서 객체는 두 가지 종류의 메시지 집합으로 구성하나는 객체가 수신하는 메시지의 집합다른 하나는 외부의 객체에게 전송하는 메시지의 집합협력과 관련된 다양한 용어의 의미와 차이점을 이해해야 한다.메시지와 메시지 전송메시지는 객체들이 협력하기 위해 사..
책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다.GRASP 패턴은 책임 할당의 어려움을 해결하기 위한 답을 제시해 줄 것이다.객체에 책임을 할당하는 기본적인 원리를 살펴보자1. 책임 주도 설계를 향해데이터보다 행동을 먼저 결정하라너무 이른 시기에 데이터에 초점을 맞추면 캡슐화가 약화되어 낮은 응집도와 높은 결합도를 가진 객체들로 넘쳐나 변경에 취약한 설계를 얻게 된다.객체의 데이터에서 행동으로 무게 중심을 옮기기 위한 기법이 필요하다.객체를 설계하기 위한 질문의 순서를 바꿔야 한다."이 객체가 수행해야 하는 책임은 무엇인가"를 결정한 후에 "이 책임을 수행하는 데 필요한 데이터는 무엇인가"를 결정책임을 먼저 결정한 후 객체의 ..