반응형

SW 개발 일반 29

디미터 법칙 (Law of Demeter)

소프트웨어 개발에서 결합도를 줄이는 것은 유지보수성과 확장성을 높이는 중요한 원칙입니다. 《Pragmatic Programmer》에서는 이를 설명하기 위해 디커플링(Decoupling)과 디미터의법칙(Law of Demeter, LoD)을 강조합니다. 이번 글에서는 디미터의 법칙이 왜 중요한지, 그리고 이를 지키지 않으면 어떤 문제가 발생하는지 실제 코드와 함께 살펴보겠습니다.디미터의 법칙이란?디미터의 법칙은 객체가 직접 알지 못하는 객체의 메서드를 호출하지 말라는 원칙입니다. 즉, 한 객체의 메서드는 다음 대상에 대해서만 직접적으로 메서드를 호출해야 합니다:자기 자신 (this)메서드의 매개변수로 전달된 객체직접 생성한 객체자기 자신이 소유한 구성 요소 객체이 법칙을 따름으로써 불필요한 결합을 줄이고,..

SW 개발에서 도메인 언어

소프트웨어 개발에서 가장 중요한 요소 중 하나는 도메인 전문가와 개발자 간의 원활한 커뮤니케이션입니다. 이를 위해 도메인 언어(Domain Language)를 활용하면 복잡한 개념을 보다 직관적으로 표현할 수 있습니다. 본 글에서는 도메인 언어의 개념과 그 활용 방법에 대해 살펴보겠습니다.도메인 언어란?도메인 언어는 특정 도메인의 문제를 해결하기 위해 설계된 특수 목적의 언어입니다. 이는 개발자가 비즈니스 로직을 보다 쉽게 표현하고, 유지보수를 간편하게 하며, 비개발자도 이해할 수 있도록 돕는 역할을 합니다.도메인 언어는 크게 두 가지 유형으로 나뉩니다:도메인 특정 언어(Domain-Specific Language, DSL): 특정 도메인에서만 활용되는 맞춤형 언어로, SQL, Regular Expres..

SW 개발 일반 2025.03.13

소프트웨어 개발의 핵심 원칙: 직교성(Orthogonality)

소프트웨어 개발에서의 ‘직교성(Orthogonality)’은 모듈 간의 독립성을 유지하는 중요한 설계 원칙입니다. 이는 시스템을 더욱 유연하고 유지보수하기 쉽게 만들며, 개발 속도를 높이는 효과를 가져옵니다. 이번 글에서는 직교성의 개념, 장점, 그리고 이를 소프트웨어 개발에 적용하는 방법을 살펴보겠습니다.직교성이란 무엇인가?직교성(Orthogonality)은 두 개의 요소가 서로 독립적으로 작용하는 성질을 의미합니다. 예를 들어, 자동차에서 가속 페달과 핸들은 서로 직교적인 요소입니다. 가속 페달을 밟는 것이 핸들의 조향에 영향을 미치지 않으며, 핸들을 돌린다고 해서 속도가 변화하지 않습니다. 이와 같은 원리를 소프트웨어 개발에 적용하면, 모듈 간의 의존성을 최소화하여 한 부분의 변경이 다른 부분에 영..

SW 개발 일반 2025.03.11

삶은 문제해결의 연속이다: SW에서의 시행 착오

과학은 문제에서 시작하며, 문제를 해결하기 위해 시행착오라는 방법을 선택합니다. 20세기 가장 위대한 철학자로 꼽히는 칼 포퍼는 모든 생물이 문제를 해결하기 위해 같은 패턴으로 움직인다고 이야기합니다. 이 글에서는 칼 포퍼의 3단계 모델을 통해 시행착오의 과정을 살펴보고, 아메바와 아인슈타인의 사례를 통해 시행착오가 갖는 의미를 살펴보고, 더 나아가, 소프트웨어 개발 분야에서 시행착오가 어떻게 적용될 수 있는지, 그리고 테스트 코드를 기반으로 코딩하는 것이 왜 효과적인 방법인지 SW 개발자의 관점에서 살짝 말해보려고 합니다.칼 포퍼의 시행착오 3단계 모델칼 포퍼는 시행착오를 통한 학습 과정을 3단계 모델로 정리했습니다.문제: 기대와 다른 결과가 나타나거나, 기존의 해결 방식이 더 이상 작동하지 않을 때 ..

SW 개발 일반 2025.03.09

빈약한 객체 (Anemic Object)

소프트웨어 개발에서 객체는 데이터를 단순히 보관하는 역할이 아니라, 의미 있는 행동을 수행하는 주체가 되어야 합니다. 하지만 많은 코드베이스에서 여전히 속성(getters/setters)만을 노출하는 빈약한 객체(Anemic Object)를 발견할 수 있습니다. 이러한 객체는 절차적 코드 스타일을 유발하고 유지보수를 어렵게 만듭니다. 이번 글에서는 빈약한 객체를 풍부한 객체(Rich Object)로 변환하는 방법을 소개합니다.빈약한 객체의 문제점빈약한 객체는 보통 다음과 같은 특징을 가집니다:데이터만 포함하고 행동이 없음: 속성 값을 설정하고 가져오는 기능만 제공합니다.절차적 코드 유발: 비즈니스 로직이 객체 외부에 존재하면서 코드의 응집도가 떨어집니다.변경에 취약: 객체가 단순한 데이터 보관소로 작동하..

소프트웨어 엔트로피 (Software Entropy)

1. 소프트웨어 엔트로피란?소프트웨어 엔트로피(Software Entropy)는 시간이 지남에 따라 소프트웨어 시스템이 점점 더 복잡해지고 유지보수가 어려워지는 현상을 의미합니다. 이는 소프트웨어가 방치될 경우 무질서해지고 붕괴할 가능성이 높아진다는 점을 강조합니다. 《실용주의 프로그래머(The Pragmatic Programmer)》에서 소개된 깨진 창(Broken Windows) 이론과 밀접한 관련이 있습니다. 즉, 하나의 작은 문제가 해결되지 않고 방치되면 점점 더 많은 문제가 발생하고, 결국 시스템 전체가 무너질 수 있습니다. 2. 소프트웨어 엔트로피의 원인1) 일관성 없는 코드와 나쁜 설계프로젝트가 진행될수록 코드의 일관성이 깨지고 유지보수가 어려워질 수 있습니다.빠른 기능 추가에 집중하면서 설..

애자일과 AI 도입의 유사점

회사에서 애자일(Agile) 방법론을 도입할 때 범했던 가장 큰 실수 중 하나는 조직 전체가 아닌, 특정 팀(주로 SW 개발팀)에만 적용했던 것이다. 애자일을 통해 빠른 피드백과 유연한 개발 프로세스를 구현하고자 하지만, 정작 기존의 회사 시스템은 그대로 유지한 채 SW 개발팀만 애자일을 따르게 한다. 문제는, 애자일이 단순한 개발 방식이 아니라 조직 문화와 프로세스 전반을 바꿔야 효과를 볼 수 있는 철학이라는 점이다. 조직 전체가 이를 받아들일 준비가 되어 있지 않다면, 애자일을 적용해도 큰 효과를 보기 어렵다. 이와 유사한 문제가 AI 도입에서도 반복되고 있다. AI는 단순한 기술 도입이 아니라, 기업의 업무 방식과 의사 결정 구조 전반에 걸쳐 영향을 미치는 변화다. 하지만 AI 도입을 임원들의 단편..

SW 개발 일반 2025.03.06

본능에 의존하는 개발: Programming by Coincidence

프로그래밍에서 본능적인 직관은 때때로 강력한 도구가 될 수 있지만, 그것만을 의존하면 큰 문제를 초래할 수 있습니다. 이는 실용주의 프로그래머에서 언급된 '우연에 의존하는 프로그래밍(Programming by Coincidence)'과 같은 개념으로, 코드가 동작하는 이유를 정확히 이해하지 못한 채 그저 운 좋게 동작하는 것처럼 보이는 방식을 의미합니다. 본능적으로 코드를 작성할 때는 빠르게 개발할 수 있다는 장점이 있지만, 예상치 못한 버그가 발생했을 때 원인을 찾기 어렵고, 코드의 유지보수성이 떨어지는 문제가 있습니다. 따라서 본능을 활용하되, 이를 체계적으로 보완하는 방식이 필요합니다. 본능에 의존하는 프로그래밍의 문제점개발하고 있던 웹 애플리케이션에서 심각한 성능 문제가 발생했습니다. 특정 페이지..

SW 개발 일반 2025.02.26

SW 개발의 기본: 추상화

소프트웨어 개발에서 추상화(Abstraction)는 핵심적인 개념입니다.   하지만 "추상화를 잘해야 한다"는 조언만으로는 실제 코드에서 어떻게 적용해야 할지 감이 오지 않는 경우가 많습니다. 오랜 시간 개발을 하며 느낀 점은, 추상화는 단순히 코드를 깔끔하게 만드는 것이 아니라 SW의 정체성을 유지할 수 있는 이름을 부여하는 것입니다. 다만 이런 설명도 어렵죠.  그렇다면, 어떻게 하면 좋은 추상화를 할 수 있을까요? 그리고 반대로, 불필요한 추상화를 피하려면 어떻게 해야 할까요?추상화를 잘하라는 말이 모호한 이유처음에는 "추상화를 잘해야 한다"는 말을 자주 했습니다. 하지만 개발자마다 이해하는 방식이 달라 결과물이 천차만별이었습니다.어떤 개발자는 너무 낮은 수준에서 추상화를 적용했습니다.예를 들어, ..

SW 개발 일반 2025.02.22

Cross-cutting 문제

앱을 개발하다 보면 앱 개발에 몰입하여 앱의 범위를 넘어서는 문제를 지각하지 못하는 경우가 있습니다. 시각을 조금만 넓게 가져가면 서로 다른 앱 간에 유사한 문제를 해결하려고 하는 경우가 보입니다. 이러한 문제를 Cross-cutting Concern(횡단 관심사)라고 합니다. 멋있는 단어입니다. 근사하지만 결국 중복에 관한 문제입니다. 횡단으로 중복이 발생했다는 것입니다.  이러한 문제를 효과적으로 관리하지 못하면 유지보수성이 떨어지고 개발 생산성이 저하될 수 있습니다. 특히, 앱 개발에서는 동일한 기능이 여러 곳에서 중복 구현되는 경우가 많아 이런 문제를 해결하는 것이 더욱 중요합니다. 결과적으로 플랫폼이 이런 부분을 담당해야 하고 플랫폼이 이 부분을 흡수하는 만큼 앱 개발자는 할 일이 줄어 앱 개발..

반응형