분류 전체보기 (308) 썸네일형 리스트형 11 합성과 유연한 설계 10장은 상속에 대해 이야기를 하였다면 11장에서는 합성에 대해 이야기를 하였습니다. 그리고 10장에서 이야기한 상속과 마찬가지로 합성을 잘 쓰고 있는 저에게 있어 생각하지 못하고 있던 장단점들에 대해 이야기를 하고 있었습니다. 그러면서 부가적으로 일급 컬렉션에 대해 떠올릴 수 있었습니다. 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용한다. ... 합성에서 두 객체 사이의 의존성은 런타임에 해결된다. ... 합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다. 따라서 합성을 이용하면 포함된 객체의 내부 구현이 변경되더라도 영향을 최소화할 수 있기 때문에 변경에 더 안정적인 코드를 얻을 수 있게 된다. ... [코드 재사용을 위해서는] 객체 합.. 10 상속과 코드 재사용 저는 코드를 작성할때 상속이 가능한지, 재사용이 가능한지, 중복은 없는지를 중요하게 여기곤 합니다. 하지만 상속과 재사용 그리고 중복을 피하고자 하는 명확한 이유는 없이 그저 유지보수하기 쉽도록 하는 것이 전부였습니다. 그런 저에게 있어 해당 장은 상속은 어떠한 점에서 좋으며 어떤 점을 조심해야 하는지 알려주는 장이였습니다. 재사용 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법이다. ... 새로운 클래스의 인스턴스 안에 기존 클래스의 인스턴스를 포함시키는 방법으로 흔히 합성이라고 부른다. 상속과 합성을 왜 사용하며 사용하였을 경우 어떤 이점이 있는지를 알려주는 대목이였습니다. 01 상속과 중복 코드 DRY 원칙 중복 코드가 가지는 가장 큰 문제.. 09 유연한 설계 8장에서는 응집도와 결합도의 개념에 대해 이야기를 하고 중요한 이유, 즉 원론적인 이유에 대해 말하였습니다. 9장에서는 이러한 응집도와 결합도를 좋은 설계로 이끄는 방법들에 대해 이야기하고 패턴이나 원칙들을 위주로 이야기하였습니다. 01 개방-폐쇄 원칙(Open-Closed Principle, OCP) 소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다. ... - 확장에 대해 열여 있다: 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. - 수정에 대해 닫혀 있다: 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 이전 포스팅에서 이야기한 개.. 08 의존성 관리하기 이번 장에서는 의존성을 위주로 이야기를 풀어나갔다 생각합니다. 특히 저는 Spring을 공부하면 의존성에 대해 어깨너머로 배우고 또 느낀것이 있었기에 유독 흥미가 갔던 장이였던것 같습니다. 객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는데 있다. 01 의존성 이해하기 변경과 의존성 실행시점: 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다. 구현 시점: 의존 대상 객체가 변경될 경우 의존하는 객체도 함꼐 변경된다. ... 어떤 객체가 예정된 작업을 정상적으로 수행하기 위해 다른 객체를 필요로 하는 경우 두 객체 사이에 의존성이 존재한다고 말한다. 의존성은 방향성을 가지며 항상 단방향이다. ... 의존성은 변경.. [JPA] Reason: Validation failed for query for method public abstract 에러가 날 때 JPQL로 신나게 두들기다 다음과 같은 오류가 났습니다... 그리고 이는 문제의 코드 입니다. @Query(value = "select r from Report r " + "where ST_Dwithin(r.location, :point, :radius, false) = true") List findReportsWithinRadius(@Param("point") Point point, @Param("radius") double radius); 구글링을 해보니 nativeQuery = true 조건을 걸어주면 된다고 합니다... @Query(value = "select r from Report r " + "where ST_Dwithin(r.location, :point, :radius, false) = t.. [JPA] PostgreSQL을 사용하는 환경에서 Point 타입 사용하기 프로젝트를 진행하면서 반경검색을 해야할 일이 있었습니다. 그리고 기존에 사용하고 있던 MySQL로는 부정확하며 로직을 수행하는 시간 역시 PostgreSQL에 비해 떨어졌습니다. 아래는 당시 저의 생각을 작성해 이슈로 올린 링크입니다. https://github.com/GDSC-KNU/3rd-sc-ex1-CitySavior-Backend/issues/5 [FEAT] 신고조회 기능 구현 · Issue #5 · GDSC-KNU/3rd-sc-ex1-CitySavior-Backend Description 📝 단일 신고 조회 기능 DB로 부터 단순 조회입니다. 지도에서 신고현황 조회 기능 요청 파라미터로부터 인근에 존재하는 신고 정보를 반환하는 기능입니다. DB변경 파라미터로 넘어오 github.com 그렇기에 .. [SpringBoot] Enum에 대한 사용자 정의 어노테이션 만들기 프로젝트를 진행하며 컨트롤러에 들어오는 값에 대해 검증을 하는 로직을 작성해야 하는 상황이 발생했습니다... 원래대로라면 @Valid와 Bean Validation으로 슥슥 검증을 하였겠지만 컨트롤러로 들어오는 요청에는 Enum이 존재하였습니다. 그리고 Enum에 대한 검증은 물론 Enum은 자동으로 매핑되지도 않았습니다.... 저는 고민을 하다 다음과 같이 로직을 작성하기로 마음먹었습니다. 컨트롤러로 들어오는 Enum을 문자열로 매핑시켜 받습니다. 이때 이 문자열에 대해 사용자 정의 어노테이션을 정의해 검증을 합니다. 만약 검증에 성공한다면 DTO안에 있는 값을 Enum으로 매핑시켜 로직을 수행합니다. 이제 이 포스팅의 주제이기도 한 사용자 정의 어노테이션을 만들어 보도록 하겠습니다. 먼저 필요한 것은.. 07 객체 분해 이전 장까지는 객체지향이 무엇인지 또 어떻게 해야 객체지향적으로 설계를 할 수 있을지에 대해 이야기를 했다면 '7장 객체분해'에서는 객체지향의 본질에 대해 설명하는 챕터였습니다. 7장을 읽기 이전까지는 객체간의 의미있는 협력을 하게끔 유도 하는 것 == 객체지향이라 생각을 하였습니다. 그러나 7장에서는 '데이터 추상화'를 한 것이라 언급을 하며 객체지향이 탄생하기 까지 어떤 일들이 있었는지 이야기를 하며 이야기를 이끌어 나갔습니다. 이처럼 불필요한 정보를 제거하고 현재의 문제 해결에 필요한 정보를 제거하고 현재의 문제 해결에 필요한 핵심만 남기는 작업을 추상화라고 한다. ... 큰 문제를 해결 가능한 작은 문제로 나누는 작업을 분해라고 부른다. 객체지향을 이야기하기 이전 객체지향이 주로 다루는 '추상화'.. 06 메시지와 인터페이스 https://goto-pangyo.tistory.com/230 05 책임과 메시지 4장에 이어 5장에서는 설계에 도움이 될 법한 실질적인 조언을 해주고 있습니다. 저자는 '메시지'의 역할 및 중요성을 이야기하고 이를 설계와 코드에 어떻게 녹이며, 인터페이스의 역할에 대해 goto-pangyo.tistory.com 이미 비슷한 내용으로 포스팅을 했었습니다. 그러나 오브젝트에서 언급하는 메시지는 조금더 구체적이고 또 실제 개발을 할 때 도움이 되는 내용들이였다는 느낌을 받았습니다. 추가로 "6장 메시지와 인터페이스"는 좋은 내용들이 풍부하지만 "객체지향의 사실과 오해"에서 다루었던 내용은 간략하게 설명하거나 건너뛰며 글을 작성하고자 합니다. 훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향.. 05 책임과 메시지 4장에 이어 5장에서는 설계에 도움이 될 법한 실질적인 조언을 해주고 있습니다. 저자는 '메시지'의 역할 및 중요성을 이야기하고 이를 설계와 코드에 어떻게 녹이며, 인터페이스의 역할에 대해 이야기를 합니다. 또한 책을 읽으며 5장에서는 중요하다고 느낀 부분이 너무 많다고 느꼈습니다. 자율적인 책임 설계의 품질을 좌우하는 책임 적절한 책임이 자율적인 객체를 낳고, 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다. 따라서 참여하는 객체가 얼마나 자율적인지가 전체 애플리케이션의 품질을 결정한다. ... 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 이 문장은 5장 전체를 관통한다 보아도 무방합니다. 후술한 문장및 저의 생각은 이 문장에서 크게 벗어나지 않습니다. 객체지.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 31 다음