일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring
- 테스트주도개발
- 스터디
- Thymeleaf
- 아키텍처
- 이펙티브코틀린
- 클린아키텍처
- Java
- 계층형아키텍처
- 헥사고날아키텍처
- template
- 객체지향의사실과오해
- 유지보수
- 코틀린
- 책스터디
- 테스트
- DDD
- 함수형프로그래밍
- Kotlin
- 개발방법론
- 추상화 설계
- Boot Legacy 차이점
- 개발서적
- FP
- 도메인 주도 개발 시작하기
- 조영호
- GrokkingFunctionalProgramming
- web
- TDD
- 만들면서배우는클린아키텍처
- Today
- Total
목록책 스터디 (77)
김동형수 개발기
4장 추상화 설계추상화는 프로그래밍 세계에서 가장 중요한 개념 중 하나 컴퓨터 과학에서 추상화는 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말한다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지 결정해야 한다. 프로그래밍에서 추상화 추상화를 설계한다는 것은 단순하게 모듈 또는 라이브러리로 분리한다는 의미가 아니다. 함수를 정의할 때는 그 구현을 함수 시그니처 뒤에 숨기게 되는데, 이것이 바로 추상화다. 강력한 프로그래밍 언어들이 당연히 갖고 있는 기능 중 하나는 공통 패턴에 이름을 붙여서 추상화를 만드는 기능이다. 예를 들어 함수, 델리게이트, 클래스 등이 대표적인 예다. 추상화와 자동차 운전자는 자동차를 조종하는 인터페이스(핸들과 패달 등)를 사..
3장 재사용성 누군가가 이러한 것을 한 번 만들어 놓으면, 필요한 때 이를 활용할 수 있는 것이다. 이것이 바로 프로그래밍 언어의 핵심 특징이라고 할 수 있는 재사용성이다. 장기적으로 코드를 개선하는 데 도움이 되는 여러 가지 방법을 설명 아이템 19: knowledge를 반복하여 사용하지 말라 프로젝트에서 이미 있던 코드를 복사해서 붙여놓고 있다면, 무언가가 잘못된 것이다. knowledge를 크게 두 가지 뽑는다면, 1. 로직 2. 공통 알고리즘 비즈니스 로직은 시간이 지나면서 계혹해서 변하지만, 공통 알고리즘은 한 번 정의된 이후에는 크게 변하지 않는다. 프로그래밍에서 유일하게 유지되는 것은 '변화한다는 속성' 기술뿐만 아니라 언어도 빠른 속도로 변화한다. 변화는 우리가 예상하지 못한 곳에서 일어난..
2장 가독성코틀린은 간결성을 목표로 설계된 프로그래밍 언어가 아니라, 가독성을 좋게 하는 데 목표를 두고 설계된 프로그래밍 언어아이템 11: 가독성을 목표로 설계하라프로그래밍은 쓰기보다 읽기가 중요하다는 의미, 따라서 항상 가독성을 생각하면서 코드를 작성해야 한다. 가독성이란 코드를 읽고 얼마나 빠르게 이해할 수 있는지를 의미한다. 사용 빈도가 적은 관용구는 코드를 복잡하게 만든다. 관용구들을 한 문장 내부에 조합해서 사용한다면 복잡성은 훨씬 더 빠르게 증가한다. 익숙하지 않은 구조를 사용하면, 잘못된 동작을 코드로 보면서 확인하기 어렵다. '인지 부하'를 줄이는 방향으로 코드를 작성 가변 프로퍼티는 쓰레드와 관련된 문제를 발생시킬 수 있으므로, 스마트 캐스팅이 불가능하다. 일반적으로 안전 호출 let을..
1장 안정성코틀린을 선택하는 이유는 안정성이다. 코틀린은 다양한 설계를 통해 잠재적인 오류를 줄여 준다. 크래시가 적으면 사용자와 개발자 모두에게 좋고, 상당한 비즈니스 가치를 제공한다. 이번 장의 기본 목적은 오류가 덜 발생하는 코드를 만드는 것이다.아이템1: 가변성을 제한하라읽고 쓸 수 있는 프로퍼티는 var 또는 mutable 객체를 사용하면 상태를 가질 수 있다. 가변성을 가지는 상태를 사용할 때 단점프로그램을 이해하고 디버그하기 힘들어진다.가변성이 있으면, 코드의 실행을 추론하기 어려워진다.멀티스레드 프로그래밍일 때는 적절한 동기화가 필요하다.테스트하기 어렵다.상태 변경이 일어날 때, 이러한 변경을 다른 부분에 알려야 하는 경우가 있다.가변성은 생각보다 단점이 많아서 이를 완전하게 제한하는 프로..
30장 데이터베이스는 세부사항이다. 아키텍처 관점에서 볼 때 데이터베이스는 엔티티가 아니다. 데이터베이스는 세부사항이라서 아키텍처의 구성요소 수준으로 끌어올릴 수 없다. 뛰어난 아키텍트라면 저수준의 메커니즘이 시스템 아키텍처를 오염시키는 일을 용납하지 않는다. 관계형 데이터베이스 데이터가 테이블 구조를 가진다는 사실은 오직 아키텍처의 외부 원에 위치한 최하위 수준의 유틸리티 함수만 알아야 한다. 데이터베이스 시스템은 왜 이렇게 널리 사용되는가? 우위를 차지할 수 있단 이유는 무엇일까? 한마디로 답하자면, 바로 '디스크'때문이다. 디스크 때문에 피해갈 수 없는 시간 지연이라는 점을 완화하기 위해, 색인, 캐시, 쿼리 계획 최적화가 필요해졌다. 하나는 파일 시스템이었고, 다른 하나는 관계형 데이터베이스 관리..
25장 계층과 경계움퍼스 사냥 게임소스 코드 의존성을 적절히 관리하면, UI 컴포넌트가 어떤 언어를 사용하더라도 게임 규칙을 재사용할 수 있다. 세부사항을 알지 않기를 바란다. 클린아키텍처?변경의 축에 의해 정의되는 아키텍처 경계가 잠재되어 있을 수도 있다. 해당 경계를 가로지르는, 그래서 언어를 통신 메커니즘으로부터 격리하려는 API를 생성해야 할 수도 있다. 흐름 횡단하기시스템이 복잡해질수록 컴포넌트 구조는 더 많은 흐름으로 분리될 것이다. 흐름 분리하기상단의 단일 컴포넌트에서 서로 만단다고 생각할 수도 있다. 현실은 훨씬 복잡하다. GameRules 컴포넌트 보다 더 높은 수준에는 또 다른 정책 집합이 존재한다. 저수준메커니즘과 관련된 정책에서는 이러한 고수준 정책에게 사건이 발생했음을 알린다. 고..
20장 업무 규칙 애플리케이션을 업무 규칙과 플러그인으로 구분하려면 업무 규칙이 실제로 무엇인지 잘 이해해야만 한다. 업무 규칙은 사업적으로 수익을 얻거나 비용을 줄일 수 있는 규칙 또는 절차다. 핵심 업무 규칙 - 사업 자체에 핵심적, 보통 데이터를 요구 이에 필요한 데이터를 핵심 업무 데이터라 한다. 핵심 규칙과 핵심 데이터는 본질적으로 결합되어 있기 때문에 객체로 만들 좋은 후보가 된다. 이러한 유형을 객체 엔티티 엔티티 엔티티는 컴퓨터 시스템 내부의 객체로서, 핵심 업무 데이터를 기반으로 동작하는 일련의 조그만 핵심 업무 규칙을 구체화한다. 엔티티는 데이터베이스, 사용자 인터페이스, 서드파티 프레임워크에 대한 고려사항들로 인해 오염되어서는 절대 안 된다. 유스케이스 유스케이스는 자동화된 시스템이 ..
15장 아키텍처란? 소프트웨어 시스템의 아키텍처란 시스테을 구축했던 사람이만들어낸 시스템의 형태다. 그 모양은 시스템을 컴포넌트로 분할하는 방법, 분할된 컴포넌트를 배치하는 방법, 컴포넌트가 의사소통하는 방식에 따라 정해진다. 시스템 아키텍처는 시스템의 동작 여부와는 거의 관련이 없다. 아키텍처의 궁극적인 목표는 시스템의 수명과 관련된 비용은 최소화하고, 프로그래머의 생산성은 최대화 개발 팀이 작다면 모노리틱 시스템을 개발 개발 초기에는 아키텍처 고나련 제약들이 오히려 방해가 된다고 여길 가능성이 높다. 배포 소프트웨어 시스템이 사용될 수 있으려면 반드시 배포할 수 있어야 한다. 아키텍처는 시스템을 단 한 번에 쉽게 배포할 수 있도록 만드는 데 그 목표를 두어야 한다. 운영 운영에서 겪는 대다수의 어려움..