좋은 개발자가 되기

좋은 개발자가 되기

객체지향 설계 5원칙(SOLID)

객체지향 프로그래밍의 5가지 설계 원칙, SOLID SOLID란 객체 지향 프로그래밍을 하면서 지켜야 하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져 있다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open Closed Priciple): 개방 폐쇄 원칙 LSP(Listov Substitution Priciple): 리스코프 치환 원칙 ISP(Interface Segregat..

좋은 개발자가 되기

객체지향의 사실과 오해(7장)

오늘은 객체지향의 사실과 오해 마지막장인 7장의 내용을 정리하였다. 코드와 모델을 밀접하게 연관시키는 것은 코드에 의미를 부여하고 모델을 적절하게 한다.- 에릭 에반스 개념 관점 설계는 도메인 안에 존재하는 개념과 개념들 사이의 관계를 표현 실제 도메인의 규칙과 제약을 최대한 유사하게 반영하는 것이 핵심 명세 관점 사용자의 영역인 도메인을 벗어나 개발자의 영역인 소프트웨어로 초점을 옮김 객체들의 책임에 초점을 맞추어 객체의 인터페이스를 바라보고 객체가 협력을 위해 '무엇'을 할 수 있는가를 생각 -> 명세 관점과 구현 관점을 명확하게 분리 구현 관점 프로그래머에게 가장 익숙한 관점, 실제 작업을 수행하는 코드와 연관 객체들이 책임을 수행하는데 필요로 하는 동작하는 코드 작성 인터페이스를 구현하는데 필요한..

좋은 개발자가 되기

객체지향의 사실과 오해(6장)

오늘은 6장의 내용을 정리하였다. 유일하게 변하지 않는 것은 모든 것이 변한다는 사실뿐이다. - 헤라클레이토스 기능 설계 vs 구조 설계 기능 측면의 설계 제품이 사용자를 위해 무엇을 할 수 있는가에 초점 구조 측면의 설계 제품의 형태가 어떠해야 하는지에 초점 -> 기능과 구조 두 측면이 조화를 이루도록 만들어야 한다. 훌륭한 기능이 훌륭한 소프트웨어를 만드는 충분조건이라면 훌륭한 구조는 훌륭한 소프트웨어를 만들기 위한 필요조건 소프트웨어가 사용자에게 가치 있는 이유는 사용자가 필요로 하는 기능을 제공하기 때문이다. 객체지향 접근방법 변경에 대비하고 변경의 여지를 남겨놓는 가장 좋은 방법은 자주 변경되는 기능이 아닌 안정적인 구조를 중심으로 설계하는 것 안정적인 객체 구조를 바탕으로 시스템 기능을 객체간..

좋은 개발자가 되기

단위테스트? 통합테스트? 런던파 vs 고전파

단위 테스트 vs 통합 테스트 차이 단위 테스트(Unit Test) 단위 테스트(Unit Test)는 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈은 애플리케이션에서 작동하는 하나의 기능 또는 메서드로 이해할 수 있다. 예를 들어 웹 애플리케이션에서 로그인 메서드에 대한 독립적인 테스트가 1개의 단위테스트가 될 수 있다. 즉, 단위 테스트는 애플리케이션을 구성하는 하나의 기능이 올바르게 동작하는지를 독립적으로 테스트하는 것으로, "어떤 기능이 실행되면 어떤 결과가 나온다" 정도로 테스트를 진행한다. 통합 테스트(Integration Test) 통합 테스트(Integration Test)는 모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트이다..

좋은 개발자가 되기

객체지향의 사실과 오해(5장)

의도는 "메시징"이다. 훌륭하고 성장 가능한 시스템을 만들기 위한 핵심은 모듈 내부의 속성과 행동이 어떤가 보다는 모듈이 어떻게 커뮤니케이션하는가에 달려있다. - 앨런 케이 자율적인 책임을 위한 자율적 객체 객체지향 공동체를 구성하는 기본 단위는 '자율적'인 객체로 객체들은 애플리케이션의 기능을 구현하기 위해 협력하고, 협력 과정에서 각자 맡은 바 책임을 다하기 위해 자율적으로 판단하고 행동한다. -> 책임은 협력에 참여하는 의도를 명확하게 설명할 수 있는 수준 안에서 추상적이다. 적절한 책임 -> 자율적인 객체들 -> 유연하고 단순한 협력 가능 객체가 자율적? 객체에게 할당되는 책임의 수준 역시 자율적이어야 함 -> 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체 의미 어떻..

좋은 개발자가 되기

객체지향의 사실과 오해(4장)

오늘은 4장의 내용을 정리하였다. 우리 모두를 합친 것보다 더 현명한 사람은 없다. - 켄 블래차드 객체지향의 설계의 전체적인 품질을 결정하는 것은 개별 객체의 품질이 아니라 여러 객체들이 모여 이뤄내는 협력의 품질이다. 협력 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작 협력은 다수의 요청과 응답으로 구성되며 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성 요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다. 책임 객체가 책임을 가진다. 객체가 어떤 요청에 대해 대답해 줄 수 있거나 적절한 행동을 할 의무가 있는 경우 대상에 대한 요청 -> 그 대상이 요청을 처리할 책임이 있다. 책임의 분류 책임은 객체의 의해 정의되는 응집도 있는 행위의 집합 -> 객체의 책임 : 외부..

좋은 개발자가 되기

객체지향의 사실과 오해(3장)

오늘은 3장의 내용을 정리하였다. 타입과 추상화 지하철 노선도의 추상화 사실적인 정보가 오히려 지하철을 이용하는 승객들로 하여금 노션들을 이해하기 어려움 디자인에서 가장 중요한 것은 얼마나 사실적인 지형 묘사 X -> 역과 역 사이의 연결정보가 얼마나 직관적인가 '정확성'을 버리고 그 '목적'에 집중 꼭 알아야하는 사실만 정확하게 표현하고 몰라도 되는 정보를 무시함으로써 이해하기 쉽고 단순하며 목적이 부합하는 지하철 노선도 추상화 추상화란? 어떤 양상, 세부 사항, 구조를 좀더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복 추상화의 두가지 차원 구체적인 사물들 간의 공통점은 취하고 차이점은 버리는 일반화를 통해, 단순하게 만든다. 중요한 부분을 강조하기 위해 불..

좋은 개발자가 되기

객체지향 생활 체조 원칙

객체지향의 중요성을 알게 되고 이러한 객체지향을 잘 적용하기 위해 중요한 9가지 원칙을 정리하기 위해 글을 작성하였다. 객체지향 생활 체조 원칙 9가지 한 메서드에 오직 한 단계의 들여 쓰기만 한다. else 예약어를 사용하지 않는다. 모든 원시 값과 문자열을 포장한다. 한 줄에 점을 하나만 찍는다. 줄여 쓰지 않는다. 모든 엔티티는 작게 유지한다. 3개 이상의 인스턴스 변수를 가진 클래스를 사용하지 않는다. 일급 컬렉션을 쓴다. getter/setter/프로퍼티를 사용하지 않는다. 1. 한 메서드에 오직 한 단계의 들여 쓰기만 한다. (One level of indentation per method) 아래 예시를 보자. public class Map { public String map() { Strin..

좋은 개발자가 되기

객체지향의 사실과 오해(2장)

오늘은 2장의 내용을 정리하려고 한다. 앞서 진행한 1장과 같은 방법으로 정리할 것이다. 이상한 나라의 객체 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다. - 레베카 워프스브룩 객체지향과 인지능력 소프트웨어 세계는 인간이 인지할 수 있는 다양한 객체들이 모여 이루어져 있다는 믿음으로 시작된다. 객체지향은 현실 세계를 모방하는 것이 아닌 창조하는 일이다. 현실세계와는 다르게 사람의 손길 없이 동작할 수 있다. (스스로 움직이는 자동차, 스스로 불을 껐다 키는 전등) 객체, 그리고 이상한 나라 엘리스는 토끼를 따라가 굴속으로 들어가며 작은 문을 발견한다. 이후 이 ..

좋은 개발자가 되기

객체지향의 사실과 오해 (1장)

이번에 객체지향의 사실과 오해를 읽고, 내용이 너무 좋고 중요하다는 생각이 들었다. 따라서 좋은 동료들과 함께 객체지향의 사실과 오해를 스터디하며 중요한 부분을 복습하기로 하였다. 또한 이를 기록할 예정이다. 오늘의 1장의 내용 중 중요하다고 생각되는 부분을 정리하고 코드로 구현해 보자. 객체지향 프로그래밍이란? 우리는 흔히 현실 세계에 존재하는 사물에 대한 추상화를 객체라고 생각한다. 하지만 객체지향의 목표는 실세계를 모방하는 것이 아니다. 소프트웨어 개발자의 역할은 단순히 실세계를 소프트웨어 안으로 옮겨 담는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 단순히 우리가 이해를 쉽게 하기 위해 이러한 비유를 계속해서 사용하는 것이다. 협력하는 사람들 커피 공화국의 아침 첫 비유는 한 개발자가 일..

javajoha
'좋은 개발자가 되기' 카테고리의 글 목록