본문 바로가기

Develop/Design25

깔끔한 코드를 구현하기 위한 설계 규칙 네 가지 하이.. 코드를 짜는 것보다 더 중요한 것이 있다. 바로 설계다. 우리는 항상 깔끔한 코드를 짤 생각은 하지만 그전에 설계를 제대로 하는 것을 잊곤 한다. 오늘은 착실하게 따르기만 하면 우수한 설계가 나오는 간단한 네 가지 규칙을 소개하고자 한다. 이규칙을 지키면 앞으로 여러분은 코드 구조와 설계를 파악하기 쉬워질 것이고, SRP 나 DIP 같은 원칙을 적용하기도 쉬워질 것이고, 네가지 규칙이 우수한 설계의 창발성을 촉진할 것이다. 1. 모든 테스트를 실행하라. 2. 중복을 없애라. 3. 의도를 표현하라. 4. 클래스와 메서드 수를 최소로 줄여라, 단 실용적 관점에서 타협하라 하나씩 제대로 알아보자. 1. 모든 테스트를 실행하라. 위의 순서는 중요한 순서대로 나열한 것이다. 즉 모든 테스트를 실행하는 게.. 2022. 1. 13.
[Design Pattern] Template Method Pattern 오늘은 간단하게 Template Method Pattern 에 대해 정리해두려 한다. 템플릿 메서드 패턴은 Spring Framework 같은 프레임워크 환경에서 자주 활용되는 패턴이고, 실무코드에서도 중복인 코드를 줄이기 위해 자주 사용되는 패턴이니 잘 정리해두면 좋다. Template Method Pattern이란 ? 템플린 메서드 패턴은 알고리즘의 구조를 상위클래스의 메서드에 정의하고 하위클래스에서 자신에 맞게 세부 알고리즘을 정의하도록하는 패턴이다. 구현하려하는 알고리즘에 일정한 단계가 있을 것이고 , 세부적인 단계들 중에 조금씩 구현내용이 다른 경우 사용하면 된다. 작성 방법은 다음과 같다. 알고리즘의 여러단계를 각 메서드로 선언하고, 그 알고리즘을 수행할 템플릿 메서드를 만들어준다. 하위 클래.. 2022. 1. 12.
결합도와 응집도 이야기 OOP를 다루는 개발자라면 혹은 컴퓨터 공학을 전공하는 사람이라면 누구나 이런 얘기를 들어본 적이 있을 것이다. "결합도는 낮추고, 응집도는 높여야 유지보수하기 쉬운 좋은 프로그램이 된다" 개발자로 산지 거의 5년이라는 시간이 지났지만, 저 말을 제대로 이해하고 있는지도 의문이었다. 그래도 최근에 '클린코드' 라는 책을 정독하면서 나름대로 잘 이해하게 된 것 같아, 내용을 좀 정리해보려고한다. 결합도 (Coupling) 결합도는 다른 모듈간의 의존도를 의미한다. 아래그림을 보자. 파란색 사각형이 프로그램의 모듈이라고 생각해보자. 보통 프로그램은 하나의 모듈이 아닌 여러개의 모듈로 이루어져있다. 결합도는 각각의 모듈간의 영향을 주는 즉 의존도를 의미한다. 응집도 (Cohesion) 응집도는 하나의 모듈 내.. 2022. 1. 9.
객체지향 SOLID 원칙 - SRP, OCP, LSP, ISP, DIP 오늘은 간단하게 객체지향 SOLID 5대 원칙에 대해 정리해두려고한다. 1.SRP (Single Responsibility Principle) - 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. SRP 원칙은 클래스가 하나의 기능만을 가지며, 어떤 변화에 의해 클래스를 변경해야하는 이유는 오직하나 뿐이어야한다는 원칙이다. SRP에서는 책임자체가 분명해지기 때문에, 변경에 의한 연쇄 작용에서 자유로워 질 수가 있다. SRP를 잘 적용한다면 가독성과 유지보수가 좋아지기 때문에 실무에서 사용하기는 쉽진 않겠지만, 항상 생각하면서 프로그램을 짜면 코드의 품질은 올라갈 것이다. 예를 간단하게 보여주도록 하겠다. 아래 코드를 보자. public class Person { public static void .. 2021. 12. 25.
[Design Pattern] Adapter 패턴 하이.. 요즘 전에 했던 프로젝트를 복기해보면서 어떤 기술을 썼는지 하나씩 정리해 가고 있다. 오늘은 전에 회사에서 간편로그인 시스템을 구축할때 썼던 패턴이었던 Adapter 패턴에 대해 정리해보려한다. 개발 당시 이런 이슈가 있었다. 기존에 사용하던 로그인 서버가 있었고, 내가 구축하던 간편로그인 기능을 해당 서버에 추가해야하는 상황이 발생했다. 그러기 위해서는 기존 로그인 모듈이 있던 클래스를 고쳐야 하는 위험?이 있었는데, 이를 Adapter 패턴으로 잘 풀어 냈다. Adpater 패턴을 이용하면 기존의 클래스를 고치지 않고 필요한 기능은 별도의 Adapter를 구현하여 이용할 수 있다. 이 Adapter 에서는 기존 클래스 기능을 그대로 사용할 수도 있고, 수정해서 사용할 수도 있고 , 새롭게 고.. 2021. 8. 5.
[OOP] 니객망 1탄 - 객체지향 프로그래밍 이란? 하이~ 어렸을 때 부터 나는 농구를 좋아했고, 고향팀인 창원 LG팀을 거의 20년 넘게 응원하고 있다. 창원 LG 감독 중에 강을준이라는 감독이 있었는데 작전 타임때 종종 구수한 사투리로 ...! '니가 갱기를 망치고 있어 ~' 라는 말을 자주 했다. ㅎㅎㅎ 오늘 부터는 그동안 내가 잘못 이해하고 있던 .. 그리고 개념을 안다고 생각했던 객체지향에 대해 완벽하고 꼼꼼하게 포스팅을 해보려한다. 이름하여 ....! '니가 객체지향을 망치고 있어~' 니!! 객!! 망!! 시리즈~~ 대부분의 회사에서 프로젝트를 할때 설계를 하고 설계문서를 바탕으로 코딩을 할 것이다. 대표적으로 사용하는 설계방식이 바로 객체지향 설계인듯 하다. 그 만큼 이 개념을 확실히 잘 알고 사용하는게 좋을 듯한데, 개인적인 바램으로는 직접.. 2020. 2. 18.
[OOP] 객체 지향 설계를 해야 하는 이유 내가 컴퓨터 공학을 전공으로 선택한 후, 처음으로 흥미를 느낀 영역은 객체 지향 프로그래밍 (OOP) 이었다. 심지어 휴학을 하고 한 학기 동안 객체지향만 공부한 적도 있었다. (그렇다고 잘하는 건 아니다 ㅜ_ㅜ) 요즘 회사에서 객체지향언어의 대표적인 언어인 자바를 많이 쓰고 있는데, 문득 이런 생각이 들었다. "내가 만약 책임자 직급이 되면 소스코드를 개발하고 수정하는 것을 넘어 설계까지 해야하는 때가 오지 않을까?" 그래서 오늘부터라도 그 순간을 위해 조금씩이나마 객체지향 설계에 대해 공부를 하려고 한다. 오늘 포스팅하는 내용은 정말 객체지향에 대해 아주 미미한 나의 지식을 끄적인 것이니 가볍게 읽고 넘어가 주면 좋겠다. 객체지향 설계의 핵심 예전에 한 회사 면접에 가니 면접관님이 이렇게 질문을 하셨.. 2020. 2. 9.