목록전체 글 (67)
devseop08 님의 블로그
의존성 관리 기법들을 원칙이라는 관점에서 정리한다.1. 개방-폐쇄 원칙개방-폐쇄 원칙: "소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다."키워드는 '확장'과 '수정'확장에 대해 열려 있다: 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다.수정에 대해 닫혀 있다: 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다.개방-폐쇄 원칙에서 유연한 설계란 기존의 코드를 수정하지 않고도 애플리케이션의 동작을 확장할 수 있는 설계라고 말한다.일반적으로 애플리케이션의 동작을 확장하기 위해서 코드를 수정하지 않는 거 아닌가?어떻게 코드를 수정하지 않으면서 새..
1. 구조체구조체, structstd::string myName;int myBirthYear;int myBirthMonth;int myBirthDay;int myHeightInches;int myWeightPounds;자신에 대한 정보를 함수에 전달하려면 각 변수를 개별적으로 전달해야 한다.또한, 다른 사람에 대한 정보를 저장하려면 추가된 사람마다 6개의 변수를 추가로 선언해야 한다.다행히도 C++ 에서는 고유한 사용자 정의 집계 데이터 유형(user-defined aggregate data type)을 생성할 수 있다.집계 데이터 유형(aggregate data type)은 여러 개별 변수를 함께 그룹화하는 데이터 유형이다.가장 단순한 집계 데이터 유형 중 하나는 구조체(struct)다.즉, 구조체(s..
기초 클래스와 파생 클래스객체지향 언어에서 상속은 계층관계를 사용하여 클래스 간의 속성 및 함수를 공유할 수 있도록 지원하는 매우 중요한 개념이다.객체지향 언어에서는 하나의 클래스를 다른 클래스의 속성을 상속받아 정의하는 기능을 제공한다.한 클래스가 다른 클래스의 한 가지 구체적인 예에 해당할 때 이 클래스 간에 'is-a' 관계가 있다고 말한다.상속하는 클래스들의 공통된 특징을 모두 보유하고 있는 클래스를 기초 클래스라고 한다.기초 클래스보다 더 자세한 속성을 갖는 클래스를 파생 클래스라고 한다.파생 클래스는 기초 클래스의 특성을 모두 포함하고 있으며 자신의 고유 특성을 추가로 갖고 있을 수 있다.파생 클래스를 표현할 때 기초 클래스의 특성들을 반복하여 표현할 필요가 없다.상속은 프로그램의 비슷한 특성..
언어의 어떤 기능과 미리 정해진 이름의 함수를 연결해주는 기법을 코틀린에서는 관례라고 부른다.코틀린이 지원하는 여러 관례와 그 관례의 사용법을 살펴본다.언어의 기능을 타입에 의존하는 자바와 달리 코틀린은 관례에 의존한다.기존 자바 클래스가 구현하는 인터페이스는 이미 고정돼 있고 코틀린 쪽에서 자바 클래스가 새로운 인터페이스를 구현하게 만들 수는 없다.확장 함수 메커니즘을 이용하면, 기존 클래스에 새로운 메서드를 추가할 수 있다.따라서 기존 자바 클래스에 대해 확장 함수를 구현하면서 관례에 따라 이름 붙이면 기존 자바 코드를 바꾸지 않아도 새로운 기능을 쉽게 부여할 수 있다.9.1 산술 연산자를 오버로딩해서 임의의 클래스에 대한 연산을 더 편리하게 만들기코틀린에서 관례를 사용하는 가장 단순한 예는 산술 연..
고차 함수: 람다를 파라미터 반환값으로 사용10.1. 다른 함수를 인자로 받거나 반환하는 함수 정의: 고차 함수고차 함수는 다른 함수를 인자로 받거나 함수를 반환하는 함수다.코틀린에서는 람다나 함수 참조를 사용해 함수를 값으로 표현할 수 있다.고차 함수를 사용하는 법에 더해 이제는 고차 함수를 정의하는 방법을 살펴본다.고차 함수를 정의하려면 함수 타입을 먼저 알아야 한다.10.1.1 함수 타입은 람다의 파라미터 타입과 반환 타입을 지정한다.람다를 인자로 받는 함수를 정의하려면 먼저 람다 파라미터의 타입을 어떻게 선언할 수 있는지 알아야 한다. (코틀린 타입 중 함수 타입이라는 것이 있고, 이 함수 타입을 어떻게 선언할 수 있는지 알아야 한다. )파라미터 타입을 정의하기 전에 더 단순한 경우로 람다를 로컬..
프로그래밍 언어의 주요 목표는 메시지를 명확하고, 안정적인 방식으로 전달하는 것무엇보다 의도가 명확하게 전달돼야 한다.개발팀과 도메인 전문가가 공유하고 이해할 수 있는 코드는 생산성과 직결도메인 전용 언어로 애플리케이션의 비즈니스 로직을 표현함으로 이 문제를 해결 가능DSL은 범용이 아니라 특정 도메인을 대상으로 만들어진 특수 프로그래밍 언어다.Maven, Gradle, Ant => 빌드 과정을 표현하는 DSLHTML은 웹 페이지 구조를 정의하도록 특화된 언어SQL 언어같은 종류의 DSL을 외부적이라 하는데, 이는 데이터베이스가 텍스트로 구현된 SQL 표현식을 파싱하고 평가하는 API를 제공하는 것이 일반적이기 때문이다.menu.stream() .filter(d -> d.getCalories() 위..
1. 의존성 이해하기변경과 의존성어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재의존성은 실행 시점과 구현 시점에 서로 다른 의미를 갖는다.실행 시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다.구현 시점: 의존 대상 객체에 변경이 발생할 경우 의존하는 객체도 함께 변경된다.public class PeriodCondition implements DiscountCondition { private DayOfWeek dayOfWeek; private LocalTime startTime; private LocalTime endTime; public boolean isSatisfiedBy(Screening ..
람다 표현식을 이용해 가독성과 유연성을 높이기 위한 코드 리팩터링람다 표현식으로 전략, 템플릿 메서드, 옵저버, 팩토리 등의 객체지향 디자인 패턴을 어떻게 간소화 시킬지람다 표현식과 스트림 API를 사용하는 코드를 테스트하고 디버깅하는 방법9.1 가독성과 유연성을 개선하는 리팩터링9.1.1 코드 가독성 개선람다, 메서드 참조, 스트림을 황용해서 코드 가동성 개선 예제 3가지익명 클래스를 람다 표현식으로 리팩터링람다 표현식을 메서드 참조로 리팩터링명령형 데이터 처리를 스트림으로 리팩터링9.1.2 익명 클래스를 람다 표현식으로 리팩터링익명 클래스는 코드를 장황하게 만들고 쉽게 에러를 일으킨다.람다 표현식으로 간결하고 가독성이 좋은 코드를 만들 수 있다.Runnable r1 = new Runnable() { ..