분류 전체보기

서문 길을 찾는 두 가지 방법 지나가는 사람에게 물어보는 방법 기능적이고 해결책 지향적인 접근법이다. 일반적이지도, 재사용 가능하지도 않다. 지도에 표시된 길을 따라가는 방법 구조적이고 문제 지향적인 접근법이다. 현재의 목적뿐만 아니라 다양한 목적을 위해 재사용될 수 있다. (집으로 가려고 할 때 등) 지도를 사용하는 사람들의 요구사항은 계속 바뀐다. 따라서 기능이 아니라 구조를 기반으로 해야 변경에 안정적이다. 지형은 거의 변하지 않기 때문에 과거의 지도는 현재에도 여전히 유용하게 사용될 수 있다. 기능 설계 대 구조 설계 소프트웨어 제품의 설계 또한 기능 설계와 구조 설계로 구분된다. 기능 설계 제품이 사용자를 위해 무엇을 할 수 있는지에 초점을 둔다. 구조 설계 제품의 형태가 어떠해야 하는지에 초점..
서문 참가자와 다른 사람의 이야기를 하는 과정에서의 실험 > 다른 사람의 소리는 녹음된 것이었음 다른 사람이 갑자기 발작을 일으킬 경우 자신밖에 없다고 생각했던 참가자는 85%가 심리학자들에게 도움을 요청 그러나 자신 말고도 또 다른 사람이 있다고 생각했던 참가자는 31%만 도움을 요청함 그 이유는 자신이 도움을 요청하지 않아도 된다고 생각했기 때문 - 사건에 대한 목격자가 많으면 많을수록 개인이 느끼는 책임감은 적어진다 - 따라서 객체지향에서도 명확한 책임과 역할을 부여해야만 객체가 자신의 책임이라고 느낄 것이다. 자율적인 책임 4장: 역할, 책임, 협력에서 작성하였듯이 적절한 책임을 적절한 객체에게 할당하는 것부터 실행되어야 한다. 또한 객체는 자신에게 부여된 책임을 충분히 자율적으로 수행할 수 있어..
다소 늦은 프리코스 2주 차 후기를 올립니다! 현재 진행 중인 미션이 꽤 걸리는지라 이제야 올리게 됐네요 🥲 이번 미션은 학교 선배 분께 리뷰를 받으며 미리 해 본 자동차 경주 미션이었습니다. 그렇기에 1주 차 때처럼 핵심 로직은 쉽게 이해되었었습니다. JUnit5에 대해 깊게 파보게 됨 (ParameterResolutionException) 이번 미션에서는 요구사항으로 테스트를 해 보라는 것이 아예 요구사항에 정의되어 있었습니다. 그래서 우아한 테크코스의 단위 테스트 테코톡 영상을 보며 제대로 테스트를 익혀보고 싶었고, 이 과정에서 @ParameterizedTest를 쓰면 같은 테스트이면서 다른 입력값을 검증할 경우를 축약할 수 있음을 배웠습니다. 그런데 우연히 @Test와 @ParameterizedT..
· ☕️ Java
우아한 테크코스 2주 차 프리코스 미션을 하면서 JDK17의 특징을 살릴 수 있는 레코드 (record)에 대해 접해볼 수 있었습니다. 사용하면서 느낀 점은, 기존에 작성했던 DTO를 쉽게 대체할 수 있겠다는 생각이었습니다. (DTO가 무엇인지를 보시려면 이 글을 참고해주세요!) 기존의 DTO 먼저, 기존에 사용했던 DTO 코드의 예시를 보겠습니다. public class CarResponse { private final String name; private final int position; private CarResponse(final String name, final int position) { this.name = name; this.position = position; } public stati..
서론 우아한 테크코스 프리코스 미션을 하면서 테스트 코드를 작성하던 도중, 테스트 코드를 다음과 같이 작성했었습니다. (최종 코드는 검증 로직을 다르게 했기 때문에 지금은 이 테스트 코드가 아예 있지 않습니다.) @Test @ParameterizedTest @ValueSource(strings = {"崔はлن", "?-bob"}) void 한글과_알파벳_숫자를_제외한_모든_문자는_안된다(final String value) { // given & when Throwable exception = Assertions.assertThrows(IllegalArgumentException.class, () -> { Name name = Name.from(value); }); // then assertThat(exc..
서문 전통적인 경제학 > 인간은 이기적이며 합리적인 행동을 한다. 실제 실험 결과 > 인간은 이기적이며 합리적인 행동을 하지만, 다른 사람들과의 관계를 맺는 과정 속에서 인간은 본연의 특성을 배제하고 자신의 이익을 최소화하는 불합리한 선택을 한다. 즉 중요한 것은 인간 본연의 특성이 아니라 인간이 처한 환경 (타인과의 협력)이다. 객체지향의 세계에서도 협력이 객체의 행동 방식을 결정한다. 중요한 것은 객체들 간에 이뤄지는 협력이다. 협력 실제 상황에서의 협력은 다음과 같다. - 협력은 한 사람이 다른 사람에게 요청할 때 발생하게 된다. - 요청을 받은 사람은 자신의 방식으로 응답하게 된다. - 이때 요청을 받은 사람은 자신 말고도 다른 사람을 필요로 할 수도 있다. 그때는 그 사람에게도 새로운 요청이 전..
서문 시간이 지나도 사람들이 지하철을 문제없이 다닐 수 있는 이유는 직관적인 지하철 노선도가 있기 때문이다. 해리 벡 (Harry Beck)은 지하철을 이용하는 승객의 목적을 정확히 파악했다. (하나의 역에서 다른 역으로 이동하는 것) 해리 벡의 가장 위대한 업적은 지하철 노선을 추상화한 것이다. 추상화를 통한 복잡성 극복 현실에 있는 것들과 상호작용하기 위해서는 현실을 먼저 이해해야 하지만, 현실은 복잡한 것투성이다. 따라서 인간은 본능적으로 현실을 분해하고 단순화하는 전략을 따른다. 해리 벡의 지하철 노선도처럼 진정한 의미에서의 추상화는 현실에서 출발하되, 불필요한 부분을 도려가면서 사물의 놀라운 본질을 드러나게 하는 과정이다. 또한, 목적에 부합하여야 한다. 현상은 복잡하다. 법칙은 단순하다. 버릴..
서문 아기들의 막대기 실험 > 두 개의 막대기를 하나인 것처럼 보이도록 실험 사람은 태어난 지 얼마 안 된 시기부터 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지한다. 객체지향과 인지 능력 인간은 세상을 독립적으로 식별 가능한 객체의 집합으로 바라보기 때문에, 객체지향 또한 이해하기 쉬운 패러다임이다. 객체지향은 인간의 기본적인 인지 능력에 기반을 두고 있기 때문이다. 인간은 구체적인 것을 넘어서서 추상적인 것 까지도 객체로 인식할 수 있다. 오늘의 주문 내역과 어제의 주문 내역을 쉽게 구분할 수 있다. 인간은 최대한 더 단순한 객체들로 주변을 분해함으로써 세상을 이해하려고 노력한다. 따라서 객체는 인간이 분명하게 인지하고 구별할 수 있는 물리적, 개념적 경계를 지닌 것이다. 그러나 1..
· ☕️ Java
서론 원시값 포장은 객체지향 생활체조로 유명한 소트웍스 앤솔러지에도 기록되어 있는 내용입니다. 원시값 포장을 하면 더욱 객체지향적으로 설계할 수 있다는데, 왜 그런 것일까요? 먼저 원시값 포장을 하기 전의 코드를 보겠습니다. public class Car { // 상수 등 기타 필드 private final String name; private Car(final String name) { this.name = name; } // 정적 팩터리 메서드 등 기타 다른 메서드들 public boolean isNameEqualTo(final String name) { return name.equals(this.name); } public String getName() { return this.name; } } 예..
DTO와 VO의 혼용 사례와 원인 구글링을 해 보면 사람들이 DTO와 VO를 혼용하여 쓰는 경우가 많습니다. 원인 core J2EE Patterns 책의 1판에서는 데이터 전달용 객체를 VO로 정의했지만, 2판부터는 혼동의 여지 때문에 TO로 재정의하였기 때문으로 추측됩니다. 그리고 현재 데이터 전달용 객체의 정의는 D를 붙여 DTO로 정의하고 있습니다. 혼동의 여지가 있어 수정한 정의가 오히려 혼동을 초래했습니다. 이름이 다른 만큼 구별해 보겠습니다. 결론 먼저!! DTO는 데이터 전달용이며, VO는 값 표현용입니다. DTO란? 정의 Data Transfer Object 데이터를 전달하기 위해 사용하는 객체 (계층 간 데이터를 전달)입니다. 데이터를 담아서 전달하는 바구니입니다. 특성 오직 getter..
dev_writer
'분류 전체보기' 카테고리의 글 목록 (4 Page)