- 다양한 주제에 대해 자유롭게 글을 작성하는 게시판입니다.
Date 24/01/30 22:42:20
Name   kaestro
Link #1   https://kaestro.github.io/
Subject   의존성 역전 패턴을 활용한 소프트웨어 설계 개선(1~3)
면접관께서 기술 블로그라도 써보라 하셨는데 생각보다 써보니까 재밌긴 한데 제가 혼자 쓰면 남한테 피드백 받을 방법이 없어서... 혹시나 싶어 부끄럽지만 글 올려봅니다.

뭐 이후 분량을 업로드할지는 모르겠다만

가능하면 하루에 30분씩 글 쓰는 습관을 만들려고 노력하는 중인데 아직은 할만하네요

읽고서 이 부분은 설명이 이상하다거나 하는 부분이 있어서 이야기해주시면 많은 도움이 될 것 같습니다.

원래 마크다운으로 작성한거 떼다 붙인거라 보기 좀 불편하긴 하네요

---
목차

1. 서론
2. 의존성 역전 패턴 소개
    * 의존성 역전 패턴의 정의
    * 모듈의 수준이란
    * 모듈간 의존이란
    * 추상화를 통한 의존이란
3. 기존 설계의 문제점 분석
4. 의존성 역전 패턴의 적용
5. 효과 및 장점
6. 실제 사례
7. 결론

서론

좋은 사람이 되려면 가장 중요한 것은 무엇일까? 우선은 좋다는 것의 기준이 무엇인부터 잡아야 할 것이다. 기준이 있어야만 행동, 존재, 특징 등은 옳고 그름과 같은 평가를 받을 수 있다. 이는 소프트웨어 역시 마찬가지다.

그렇다면 좋은 개발자란 무엇일까? 여러 기준이 있을 수 있겠지만 단순하게 개발자를 소프트웨어를 만드는 사람이라 이야기할 때 좋은 소프트웨어를 만드는 사람이라 할 수 있을 것이다. 그렇다면 좋은 소프트웨어를 만든다는 것의 기준은 무엇으로 삼을 수 있을까?

소프트웨어의 개념이 창시된 이래 많은 시간이 지나 수많은 '좋은 개발' 기준들이 대두했고, 요 근래 핫한 것에 '결합도', 그리고 '유연성'이 있다. 여기서 소프트웨어의 유연성은 시스템이 변경에 얼마나 잘 대응하는지, 좀 더 자세하게는 새로운 기능을 추가하거나 변경, 제거하는 것이 얼마나 용이한가를 말한다. 소프트웨어의 결합도는 이와 반대되는 개념으로, 소프트웨어를 구성하는 모듈 간의 상호 의존성이 얼마나 강한가를 의미한다. 결합도가 높다는 것은 한 모듈이 변경될 때 다른 모듈에 얼마나 많은 영향을 미친다는 것을 말한다.

소프트웨어는 하드웨어가 수정 및 업데이트가 힘들었기 때문에 이를 해소하기 위한 필요하에서 새로 창시된 가상의 기계라고 말할 수 있을 것이다. 탄생 시점의 관점에서 봐도 소프트웨어에서 가장 중요한 가치 중 하나로 유연성이 높고 결합도가 낮기를 요구하는 것은 어찌보면 당연할 것이다.

의존성 역전 패턴은 이런 목표를 달성하기 위한 소프트웨어 설계 방법론 중 하나이다. 사전적으로는 상위 수준의 모듈이 하위 수준의 모듈에 직접적으로 의존하지 않고, 둘 사이에 있는 추상화를 통해 의존하는 소프트웨어 설계를 우리는 의존성 역전 패턴이라 부른다.

의존성 역전 패턴 소개

의존성 역전 패턴의 정의

너무 어려운 표현이 많으니 하나하나 단어를 나눠가며 이해해보자. 의존성 역전의 정의를 다시 살펴보면

상위 수준의 모듈이 하위 수준의 모듈에 직접적으로 의존하지 않고, 둘 사이에 있는 추상화를 통해 의존하는 소프트웨어 설계 패턴을 말한다

그럼 이제 우리의 의문은 다음과 같다

* 모듈의 수준은 무엇이고 무엇을 기준으로 상위, 하위를 구분하는가?
* 모듈이 다른 모듈에 의존한다는 것은 무엇을 말하는가?
* 추상화를 통해 의존한다는 것과 직접적으로 의존하는 것의 차이는 무엇인가?

모듈의 수준(Level)이란

모듈은 소프트웨어 개발에서 특정 기능이나 목적을 수행하기 위해 독립적으로 구현된 단위를 말한다. 모듈에는 대표적으로 함수, 클래스, 패키지, 라이브러리 등이 존재한다.


def greet(name):
    """
    주어진 이름에 대한 인사말을 출력하는 함수

    Parameters:
        name (str): 인사말을 전달할 대상의 이름

    Returns:
        str: 인사말 문자열
    """
    return f"Hello, {name}!"


한 개의 프로그램을 구성하는 데는 여러 가지 기능이 필요하고, 이들을 각각 모듈을 통해 만들어내는 데 성공했다 가정하자. 그런데 소프트웨어는 지속적인 유지 및 보수를 필요로 하기 때문에 단순히 이들을 늘어놓아서는 효율적으로 관리할 수 없다. 이 때문에 수준, 혹은 Level의 개념이 등장한다.

일반적으로 높은 레벨부터 낮은 레벨까지의 모듈의 수준을 분류하면 다음과 같다.

1. 프레임워크 수준
2. 라이브러리 수준
3. 패키지 수준
4. 소스 코드 수준

즉 각 단계가 얼마나 큰 범위를 다루는지를 통해 수준 혹은 레벨이 다르다 말하는 것이다. 또한 고수준의 모듈일수록 저수준 모듈에 비해 높은 수준의 추상화를, 저수준 모듈일수록 기능의 구현에 집중하게 된다.

비유를 통해 살펴보자. 당신은 지금 거대한 도서관의 사서이다. 이 도서관에는 수백만 권의 책이 가득하다. 당신은 새로운 책을 구입하고, 낡고 열람하지 않는 책은 폐기하며, 사람들이 책을 찾기 쉽도록 배치하고, 반납과 대출을 관장하는 등의 일을 하게 될 것이다. 그리고 이런 일을 하기 위해서는 효과적으로 책들이 구조화돼있어야 한다.

이 때 도서관이 책들을 각각 주제나 카테고리로 분류한 뒤, 카테고리 내에서 작은 분류로 나눠서 정리돼있다 하자. 예를 들어 문학으로 책을 분류했다면, 그 다음에는 소설이나 시 등으로 추가적인 분류가 가능할 것이다.

소프트웨어도 도서관이 책을 분류해서 구조화하는 것과 마찬가지로 모듈을 구조화하게 된다. 각각의 소스 코드를 패키지 단위로, 패키지들을 라이브러리 단위로, 라이브러리들을 프레임워크 단위로 분류하는 것이 소프트웨어의 구조화인 것이다.

모듈간 의존이란

이런 모듈간 맺을 수 있는 관계들 중 의존은 한 모듈의 정의 또는 동작이 다른 모듈에 종속되는 것을 말한다. 자동차를 예로 들어 생각해보자. 자동차는 여러 부품으로 구성돼있지만 성능을 결정하는 가장 중요한 역할을 하는 것은 바퀴와 엔진이라 할 수 있다. 엔진이 사용하는 연료가 무엇인지와 같은 엔진의 특징에 자동차라는 최상위 모듈은 동작이나 설계에서 크게 영향 받을 수 밖에 없다. 이 때 소프트웨어적인 관점에서 우리는 자동차라는 상위 모듈이 엔진이라는 하위 모듈에 의존한다고 표현할 수 있다.

추상화를 통한 의존 vs 직접 의존

그렇다면 추상화를 통한 의존이란 무엇인가? 마찬가지로 자동차를 가지고 설명을 해보겠다. 자동차란 무엇인지 추상적으로 표현하면 '엔진을 통해 얻은 동력'을 '바퀴에 전달해 회전시켜' 이동하는 물체라고 할 수 있을 것이다. 여기서 엔진에서 가장 핵심적인 기능을 동력이라는 추상적인 개념만 남기고, 바퀴는 동력을 전달받아 회전한다는 개념만 남긴 뒤에 자동차를 설명하는 것이 이제 상위 모듈이 하위 모듈의 추상화를 통해 의존하는 방식이다.

이에 반면 직접적인 의존은 100마력의 8기통 가솔린 엔진이 장착된, 반지름 50cm의 바퀴를 네 개 장착한 자동차를 우리가 정의했다고 하자. 이제 차이점이 보이는가? 추상화를 통한 의존을 통해 정의한 자동차는 이후에도 동일한 기능을 유지하면서도 세세한 부분들에 추가적인 업그레이드나 조정이 가능하지만, 직접적인 의존을 통해 정의한 자동차는 해당 제약 때문에 변화할 수 있는 여지가 좁아지게 된다. 이것이 추상화를 통한 의존의 힘인 것이다!

결론

그렇다면 이제 눈치 좋은 독자는 이제 이해할 수 있을 것이다. 그렇다 의존성 역전은 최상위 레벨의 모듈인 인터페이스에 하위 모듈을 의존하는 방식을 통해서 기존에 구현 과정에 높아진 결합성을 낮추고 유연성을 높이자는 패턴인 것이다.



0


    본문 중간에서 최상위 모듈의 예로 프레임워크를 들고 있으며 결론에서 인터페이스가 최상위 레벨의 모듈이라고 하셨습니다.
    인터페이스가 제가 알고 있는 것이 아닌 다른 개념에 대한 지칭인 듯 한데 어떤 것을 의미하는지요?
    kaestro
    오 감사합니다. 이런 질문이 진짜 필요했거든요!
    글을 읽어보니 확실히 문제될 표현이고 제가 이해했다고 생각한 것이 잘못됐단걸 알겠습니다.

    의존성 주입을 설명하다가 추상화를 설명하는 과정에서 제가 잘못된 이야기를 한 게 맞고, 인터페이스가 아니라 프레임워크를 말하려한게 맞는 것 같습니다.

    의존성 주입은 상위 모듈에서 하위 모듈의 구현을 통해 동작하는게 아니라, 프레임워크 수준의 최상위단에서 의존성을 주입하기 위한 모듈이 별개로 존재하고 이를 받아서 쓴다고 이야기하는게 더 맞을 것 같다는 생각이 드네요.

    아마 제가 올... 더 보기
    오 감사합니다. 이런 질문이 진짜 필요했거든요!
    글을 읽어보니 확실히 문제될 표현이고 제가 이해했다고 생각한 것이 잘못됐단걸 알겠습니다.

    의존성 주입을 설명하다가 추상화를 설명하는 과정에서 제가 잘못된 이야기를 한 게 맞고, 인터페이스가 아니라 프레임워크를 말하려한게 맞는 것 같습니다.

    의존성 주입은 상위 모듈에서 하위 모듈의 구현을 통해 동작하는게 아니라, 프레임워크 수준의 최상위단에서 의존성을 주입하기 위한 모듈이 별개로 존재하고 이를 받아서 쓴다고 이야기하는게 더 맞을 것 같다는 생각이 드네요.

    아마 제가 올바르게 이해하지 못한 부분이 있어서 설명이 잘 못 하고 있는 부분이 있는 것 같은데 제 방금 설명에서도 이상한 부분이 있으려나요?

    이야기 해주시면 제가 이해했다고 착각한 부분을 바로잡고 혹시나 제 글을 읽게 되는 분들이 오해하게 되는 참사를 막을 수 있을 것 같습니다
    듣보잡
    너무 모든 것을 글과 설명으로 전달하려는 느낌이 듭니다. 의존석 역전 패턴이 잘 지켜진 예시 코드와 잘 안 지켜진 예시 코드를 아주 간단한 버전으로 만들어서 보여 주시면 굳이 설명이 자세하지 않아도 이해가 쉬울 것 같읍니다. 제가 컴공 전공인데도 불구하고 이쪽은 문외한이라 [의존석 역전 패턴이 잘 지켜진 예시 코드]라는 표현이 제대로 쓴 게 맞는지 모르겠는데 감안해서 참고해 주시면 좋겠읍니다.
    kaestro
    말씀하신 부분은 이제 여기 뒷부분부터 작성하기 시작하려했는데 많이들 말씀해주시네요
    참고하겠습니다 감사합니다
    kaestro
    혹시 질문 하나 가능할까요?

    제가 이런 식으로 글을 쓰게 된 것은 아무래도 보통 이런 내용에 대한 설명을 찾으면 정의하고 말씀하신대로 코드들의 사례를 통해 보여주는 경우들이 많은데 그것을 읽고 장단점에 대한 이해가 잘 되지 않았던 경향이 강했기 때문입니다. 그래서 일단 비유를 통해 겉핥기를 해보는게 낫지 않을까? 싶었거든요

    듣보잡님께서 생각하시기에 이런 개념을 새로 익힐 때 그냥 좋은 코드와 안 좋은 코드의 예시들을 여럿 보는 쪽이 더 낫다 생각하시나요? 그러면 이를 나중에 내가 이걸 보고 공부했다는 걸 남에게 어필 혹은... 더 보기
    혹시 질문 하나 가능할까요?

    제가 이런 식으로 글을 쓰게 된 것은 아무래도 보통 이런 내용에 대한 설명을 찾으면 정의하고 말씀하신대로 코드들의 사례를 통해 보여주는 경우들이 많은데 그것을 읽고 장단점에 대한 이해가 잘 되지 않았던 경향이 강했기 때문입니다. 그래서 일단 비유를 통해 겉핥기를 해보는게 낫지 않을까? 싶었거든요

    듣보잡님께서 생각하시기에 이런 개념을 새로 익힐 때 그냥 좋은 코드와 안 좋은 코드의 예시들을 여럿 보는 쪽이 더 낫다 생각하시나요? 그러면 이를 나중에 내가 이걸 보고 공부했다는 걸 남에게 어필 혹은 이런 걸 이해했다는걸 전달하려면 어떤 형식의 글이 더 좋을거라고 생각하세요? 예시 코드들을 쭉 나열하는 것이 선행하는 쪽이 더 나을까요?

    써놓고 보니 질문이 하나가 아니군요
    듣보잡
    질문이 좀 어렵긴 한데 순수하게 제가 개념 이해하기 가장 좋은 형태는 예제 코드 보여 주고 어떤 부분은 이래서 좋고 어떤 부분은 이런 문제가 있어서 좋지 않다 설명해 주는 방식입니다. 예시가 많을 필요는 없고, 적절한 예시와 설명이 조합된 형태가 어느 한 쪽만 나열하는 것보다는 낫다고 생각합니다.
    rooke96
    뭐라고 말씀을 드려야할까 모르겠습니다만, 제가 면접관이라면 해당 블로그는 그렇게 와닿지 않을거라고 생각합니다. 기술적인 내용은 없고.. 그냥 두리뭉실한 설명 뿐이거든요.

    의존성 역전 패턴을 어떤 식으로 구성하는지, 그게 개발에 어떤 이익/불이익이 있는 지, 간단한 샘플 코드 정도가 필요할 것 같습니다. 추가로 기존의 스프링이 어떤 식으로 의존성 역전을 사용하고 있는 지에 대한 분석이 필요할 거구요.

    여기까지는 딱 서두에 해당하고 본론이 없는 글이라고 생각됩니다.
    kaestro
    네 정확하게 서두까지 작성하고 이제 본론 작성하려고 했던거긴 합니다. 다들 똑같이 생각하시네요ㅋㅋ
    별개로 제가 작성하려했던 부분들보다 더 자세하게 어떤 부분들이 있으면 좋겠는지 이야기해주셔서 참고가 많이 됐습니다. 감사합니다
    kaestro
    사실 그리고 이런 이야기를 블로그에다가만 작성하면 들을 수가 없어서 혹시나 봐주시는 분이 계실까 한거라서요
    읽고 드시는 생각은 뭐든지 환영이고, 댓글이 없어도 이런 글을 끝까지 읽어주신 것만해도 감사할 따름입니다. 눈 버리시진 않았을까 걱정이군요
    다음 편도 기대됩니다
    Nest.js 프레임워크에서는 의존성역전을 도입했는데, 실제로는 이걸 그대로 사용할 경우 모듈 설계를 빈번하게 바꾸는 과정이 함께하지 않으면 서큘러 디펜던시의 늪에 빠질때가 있습니다. 그래서 어떤 회사는 typescript의 특징과 다이내믹 의존성 주입 기법을 활용해서 런타임에는 존재하지 않는 인터페이스를 이용한 의존성 관계도를 그리는데, 이렇게 보면 좀 더 디커플링된 모듈을 지킬 수 있습니다. 이런 방식을 생각해보면 코드를 분리하고 참조하는 행위가 사실은 소프트웨어를 구사하는 사람을 위한 것이고, 컴퓨터의 입장에선 알바아니고 서로 참조가 가능한 일종의 포인터만 잘 있으면 그만임 이라는 것을 느끼게 됩니다. 그렇게 생각하면 소프트웨어의 디자인이라는 것은 결국 사람의 인지능력과 맞닿아있다는 생각이 들어 흥미롭습니다.
    1
    kaestro
    흑흑 고인물이 뉴비 이탈 막으려고 억지 칭찬해주는 훈훈한 장면이라니
    말씀하신 부분들을 고려해서 후편 작성하도록해보겠습니다, 따뜻한 격려 감사드립니다
    다만 이걸 쓰는데도 3일이 걸린 것을 감안하면 과연 이거 하나 완성되는데 며칠이 걸릴지는 미지수입니다
    느긋하게 하세용~~~
    kaestro
    느긋하게 딱 하루 30분씩만 작성하려고 시간 잡아뒀습니다
    근데 또 막상 쓰다보면 신나서 오버나긴 하더군요ㅋㅋ
    공기반술이반
    "소프트웨어의 디자인이라는 것은 결국 사람의 인지능력과 맞닿아있다"

    이 표현이 참 크네요...

    코드리뷰 부터 클린코드까지....

    누구에게는 명확한 코드가 누구에게는 뭐야 이게 일수도 있고
    그게 컨텍스트인지 실력인지 지능인지...까지....

    사실 그래서 좋은회사에서 컨벤션이 잘 정의된 걸 경험해보는게 중요한것 같은데....

    코딱지만한 개발팀만 전전해오다보니 항상 막막하기도 하고..
    T.Robin
    작정하고 쓴소리좀 드리겠습니다.

    내용이 어딘가의 책을 베껴쓴 것처럼 느껴집니다. 글의 호흡도 길거니와, 뭐랄까...... [무지한 너희들에게 이러이러한 최신 기법을 가르쳐줄께]라는 느낌이 굉장히 강하게 들어요. 교조적이랄까요. 읽으면서 거부감이 크게 들었습니다.

    제가 북마크를 걸어놓은 테크 블로그의 경우 정해진 주제에 대해 자신의 [생각]이 중심이 되었습니다. 하다못해 특정한 기술이나 테크닉 등을 소개할때도 관련된 자신의 경험담을 나누거나 또는 자신이 직접 작성한 예제 코드를 놓고 [난 ... 더 보기
    작정하고 쓴소리좀 드리겠습니다.

    내용이 어딘가의 책을 베껴쓴 것처럼 느껴집니다. 글의 호흡도 길거니와, 뭐랄까...... [무지한 너희들에게 이러이러한 최신 기법을 가르쳐줄께]라는 느낌이 굉장히 강하게 들어요. 교조적이랄까요. 읽으면서 거부감이 크게 들었습니다.

    제가 북마크를 걸어놓은 테크 블로그의 경우 정해진 주제에 대해 자신의 [생각]이 중심이 되었습니다. 하다못해 특정한 기술이나 테크닉 등을 소개할때도 관련된 자신의 경험담을 나누거나 또는 자신이 직접 작성한 예제 코드를 놓고 [난 이걸 이렇게 쓰면 좋을 것 같아]라는 식으로 이야기하는 경우가 많았습니다. 이를테면 이런 느낌으로:
    https://blog.tartanllama.xyz/guaranteed-copy-elision/

    일단, 가능하면 '내 생각은 이렇다' 부분이 많이 추가되었으면 좋겠습니다.
    kaestro
    이런 이야기도 되게 감사하죠. 링크도 읽어보겠습니다 소중한 의견 감사합니다
    그런데 가능한 안 베껴쓰려고 이런 요약을 안 하려한건데 왜 다른 사람의 것을 제껴썼다는 생각이 드는 걸까요? 말씀하신 경험담의 문제일까요?
    요즘 책들 읽기 시작한지 얼마 안돼서 읽은 책들의 생각이 생각하지도 못한 사이에 많이 들어가있는것인가? 그것까진 잘 모르겠네요 저는 쓸때 제 생각들이라 생각하면서 썼어서 어느 부분들이 생각처럼 느껴지지 않는가가 좀 어렵습니다
    교조적이라고 느껴질만한 건 제 말투부터가 그런 느낌이 강하게 작성된 모양인데 이거는 음...... 더 보기
    이런 이야기도 되게 감사하죠. 링크도 읽어보겠습니다 소중한 의견 감사합니다
    그런데 가능한 안 베껴쓰려고 이런 요약을 안 하려한건데 왜 다른 사람의 것을 제껴썼다는 생각이 드는 걸까요? 말씀하신 경험담의 문제일까요?
    요즘 책들 읽기 시작한지 얼마 안돼서 읽은 책들의 생각이 생각하지도 못한 사이에 많이 들어가있는것인가? 그것까진 잘 모르겠네요 저는 쓸때 제 생각들이라 생각하면서 썼어서 어느 부분들이 생각처럼 느껴지지 않는가가 좀 어렵습니다
    교조적이라고 느껴질만한 건 제 말투부터가 그런 느낌이 강하게 작성된 모양인데 이거는 음... 사실 굉장히 도움이 많이 되는 말씀인데 유쾌하지 않은 사람이 유쾌해보이려다가 모자란 글이 나온것도 같고? 당장에는 제 글솜씨 문제 같아서 개선하려 노력은 하겠다만 어떻게 해야할지 잘 모르겠네요. 어떤 부분들이 다른 표현으로 사용하먄 좋겠다는 제안이 헉시 있으시면 많이 도움이 될 것 같습니다

    제 생각이 모자란 근본적인 이유는 아무래도 제가 경험이 미천해서 실제 경험한 것보다는 간접 경헌을 이것저것 얽다가 생긴 문제 같기도 하고 글쓰기는 참 어렵네요

    좋은 의견 감사드립니다. 많은 도움이 됐어요!
    듣보잡
    정말 글을 쓰심에 있어서 피드백을 원하시는 것 같아서, 지극히 제 개인적인 기준으로 거슬리는 부분 말씀드려 봅니다.

    추상화를 통한 의존 vs 직접 의존

    그렇다면 추상화를 통한 의존이란 무엇인가? 마찬가지로 자동차를 가지고 설명을 해보겠다. 자동차란 무엇인지 추상적으로 표현하면 '엔진을 통해 얻은 동력'을 '바퀴에 전달해 회전시켜' 이동하는 물체라고 할 수 있을 것이다. 여기서 엔진에서 가장 핵심적인 기능을 동력이라는 추상적인 개념만 남기고, 바퀴는 동력을 전달받아 회전한다는 개념만 남긴 뒤에 자동차를 설명하는 것이 이제 ... 더 보기
    정말 글을 쓰심에 있어서 피드백을 원하시는 것 같아서, 지극히 제 개인적인 기준으로 거슬리는 부분 말씀드려 봅니다.

    추상화를 통한 의존 vs 직접 의존

    그렇다면 추상화를 통한 의존이란 무엇인가? 마찬가지로 자동차를 가지고 설명을 해보겠다. 자동차란 무엇인지 추상적으로 표현하면 '엔진을 통해 얻은 동력'을 '바퀴에 전달해 회전시켜' 이동하는 물체라고 할 수 있을 것이다. 여기서 엔진에서 가장 핵심적인 기능을 동력이라는 추상적인 개념만 남기고, 바퀴는 동력을 전달받아 회전한다는 개념만 남긴 뒤에 자동차를 설명하는 것이 이제 상위 모듈이 하위 모듈의 추상화를 통해 의존하는 방식이다.

    이에 반면 직접적인 의존은 100마력의 8기통 가솔린 엔진이 장착된, 반지름 50cm의 바퀴를 네 개 장착한 자동차를 우리가 정의했다고 하자. [이제 차이점이 보이는가?] 추상화를 통한 의존을 통해 정의한 자동차는 이후에도 동일한 기능을 유지하면서도 세세한 부분들에 추가적인 업그레이드나 조정이 가능하지만, 직접적인 의존을 통해 정의한 자동차는 해당 제약 때문에 변화할 수 있는 여지가 좁아지게 된다. 이것이 추상화를 통한 의존의 힘인 것이다!

    결론

    [그렇다면 이제 눈치 좋은 독자는 이제 이해할 수 있을 것이다.] 그렇다 의존성 역전은 최상위 레벨의 모듈인 인터페이스에 하위 모듈을 의존하는 방식을 통해서 기존에 구현 과정에 높아진 결합성을 낮추고 유연성을 높이자는 패턴인 것이다.

    죄송스럽지만 개인적으로 딱 글 읽기 싫어지는 말투가 보여서 말씀드렸읍니다. 저는 글쓰기에도 문외한이니 지적이 적절한지에 대해서는 스스로 판단이 안 되네요...
    kaestro
    확실히 제가 다시 봐도 굉장히 건방지네요. 이게 아마 딱 책 한 권만 읽은 사람이 제일 위험하다는 이야기려나요ㅋㅋ
    짚어주시니까 더 명확하게 와닿아서 굉장히 부끄럽고 꼭 고쳐야겠단 생각이 듭니다.
    이 밖에도 불쾌하신 부분들이 있으면 말씀해주세요!
    kaestro
    지금 들은 생각인데, 혹시 제가 사용한 비유인 자동차를 의사코드로 작성하기만 했어도 아쉬운 부분이 많이 덜했을까요?
    개인적으로 예제코드중 제일 지겨운게 자동차랑 회원ㅋㅋㅋㅋㅋㅋㅋㅋ물론 그만큼 직관적인 예제가 없기에 많이 쓰이는거지만요
    저는 테크블로그를 안쓰는데(못쓰는데) 쓰다보면 이쪽 분야의 글 쓰기는 결국 두괄식으로 딱딱 할말 하고, 코드 먼저 보여주고 내 주장 넣고, 장단점중에 난 이게 좋더라. 이러면서 중간중간 글과 코드를 마치 사진-글 삽입하는 기사처럼 써야하더라고요. 그런게 너무 까다로웠음.. 나는 내 문장으로 풀어내고 싶은데 읽는사람들은 아 됐고! 코드! 하는 사람들이 이 분야에 많아서.. 물론 읽는 입장에서도 기술아티클 읽을때는 저도 일단 코드 블럭부터 보고 설명을 보긴합니다 ㅋㅋㅋ.. 여튼 기술과 관련된 글을 잘 쓴다 라는건 그런 느낌이 있어서 저는 안쓰게 됐어요. 잘 못하겠음..
    1
    kaestro
    말씀을 들으니 제가 경험이 미천하다는 밑바닥이 드러났다는 생각이 들어서 더 부끄럽긴 하네요 ㅋㅋ
    아마 제가 이 글을 자신있게 쓸 수 있었던 데는 이제 그렇게 많은 글을 읽지 않았으니 자동차라니 너무 쿨한 비유잖아!라고 생각했던 거고 이제 많이 읽으신 분은 또 자동차야? 어디서 베꼈냐?라는 생각이 드셨겠네요ㅋㅋ
    재밌네요, 감사합니다
    ㅋㅋㅋㅋ아뇨 베꼈냐라는 생각은 전혀 없었고 그 뭐야 전통적으로 OOP나 코드 디자인과 관련된 예시로 제일 많이 쓰이는 전통의 강자라서...ㅋㅋ 그리고 전 엔지니어링은 베끼는게 장점이라고 생각합니다. 이 판에 오리지널리티라는건 별로 중요하지않음..
    T.Robin
    현재의 글은 특정 지식을 주입식으로 밀어넣는 듯한 인상을 크게 받았습니다. 본 건에 한정한다면, 자동차를 의사코드로 작성할 때 [본인이 생각을 전개하신 과정을 순서대로 설명]하는 식으로 구성했다면, 그건 내 생각을 공유하는 것이므로, 거부감도 덜하고, 흡입력도 좋을 것 같습니다.

    이를테면, 자동차를 의사코드로 작성한다고 하면, framework / library / package / source code 수준을 어떻게 정의할 것인지를 말하고, framework 수준에서는 무엇이 필요하고, framework A에서는 library a, b가 필요할 것이고....... 이런 식으로 전개한다면 읽는 사람도 화자가 어떤 방식으로 생각을 전개하는지 따라가기가 쉬우리라 봅니다.
    2
    kaestro
    제가 생각을 전개한 과정은 글 순서를 말씀하시는거고, 거기에서 사용한 비유들을 코드로 작성해두면 이란 말씀이실까요?
    T.Robin
    예. 그렇게 작성하시면 구조가 좋은 쪽으로 많이 달라질 것 같습니다.
    kaestro
    네 그 부분 신경써서 수정해보도록 하겠습니다. 지난 번에도 그렇고 많이 도움 받네요
    항상 감사드립니다
    번역서 어투네요 ㅎㅎ

    저는 존댓말로 써보시면 어떨까 싶습니다.
    존댓말로는 문어체를 쓸 수 없기 때문에 자연스럽게 구어체가 된다고 생각하거든요.
    구어체가 평소에 대화할 때 사용하는 그 사람의 원래 캐릭터에 가까운 표현이라고 생각해서 더 낫다고 생각하고요.

    같은 이유로 기술서 번역하는 출판사에 원문이 구어체니까 반말로 쓰지 말고 존댓말로 쓰면 어떻겠냐는 의견을 드린적이 있는데,
    진짜로 다음책은 존댓말로 나오더군요. 굉장히 번거롭고 도전적인 요청이었을텐데 들어주어서 고맙단 생각이 들었었고...

    그 다음 책 부터는 다... 더 보기
    번역서 어투네요 ㅎㅎ

    저는 존댓말로 써보시면 어떨까 싶습니다.
    존댓말로는 문어체를 쓸 수 없기 때문에 자연스럽게 구어체가 된다고 생각하거든요.
    구어체가 평소에 대화할 때 사용하는 그 사람의 원래 캐릭터에 가까운 표현이라고 생각해서 더 낫다고 생각하고요.

    같은 이유로 기술서 번역하는 출판사에 원문이 구어체니까 반말로 쓰지 말고 존댓말로 쓰면 어떻겠냐는 의견을 드린적이 있는데,
    진짜로 다음책은 존댓말로 나오더군요. 굉장히 번거롭고 도전적인 요청이었을텐데 들어주어서 고맙단 생각이 들었었고...

    그 다음 책 부터는 다시 반말로 돌아가더라고요.
    이유가 뭔지는 모르지만 왠지 안하는데는 다 이유가 있는, 그 이유를 경험하는 시행착오를 시켜드린 것 같아서 미안했었습니다 ㅎㅎ
    kaestro
    제가 요즘 읽은 책이 한국 사람이 쓴 책이 없어서 그런걸까요? 왜 제 머리속에서 나온 글이 번역서 어투가 돼서 나온 것일지 이해가 안되는군요

    아예 다른 주제로 글쓰기를 하고 며칠 묵힌 다음에 다시 좀 객관적인 시선에서 읽어보고 다시 피드백 받은 부분 신경써서 작성해봐야겠습니다.

    그런데 다 제치고 굳이 제가 글을 존대말을 안 쓸 이유도 없는 것 같으니, 굉장히 도움이 되는 피드백입니다 감사합니다ㅋㅋ
    뉴클레오타이드
    저는 코딩은 1도 모르지만 마지막 결론 부분에서 번역투가 강하게 보이긴 하네요 ㅋㅋㅋ 요즘 영미권 비문학 서적에서 많이 쓰는, 독자에게 반말로 말을 거는 투! 평소 이런 글 많이 읽으셔서 그런듯?
    kaestro
    네 요즘 그런 글 많이 읽습니다ㅋㅋㅋㅋ
    매일같이 읽고 있으니 그런 느낌이 안 날 수가 없겠군요
    그런데 이건 진짜 개선하기 힘든데 난감하네요
    목록
    번호 제목 이름 날짜 조회 추천
    15289 IT/컴퓨터클로드 3.7에게 소설을 맡겨보았다 - 물망초의 기억 유하 25/03/01 631 3
    15236 IT/컴퓨터결국 구입해버린 저지연코덱 지원 헤드셋 8 야얌 25/01/27 892 0
    15210 IT/컴퓨터금융인증서와 공동인증서 4 달씨 25/01/15 2546 0
    15188 IT/컴퓨터인공지능 시대, 우리에게 필요한 것은 "말빨" 4 T.Robin 25/01/05 1100 7
    15157 IT/컴퓨터AI가 점점 무서워지고 있습니다. 7 제그리드 24/12/26 1211 0
    15125 IT/컴퓨터모니터 대신 메타 퀘스트3 VR 써보기(업데이트) 10 바쿠 24/12/12 1652 5
    15081 IT/컴퓨터분류를 잘하면 중간은 간다..? 닭장군 24/12/01 927 5
    15032 IT/컴퓨터추천 버튼을 누르면 어떻게 되나 13 토비 24/11/08 1306 35
    15010 IT/컴퓨터[마감] 애플원(아이클라우드 + 애플뮤직+...) + 아이클라우드 2TB 파티원 모집 중! (6/6) 20 아란 24/10/30 1344 0
    14885 IT/컴퓨터도시의 심연 (서울 싱크홀 모티브의 창작소설) 1 타는저녁놀 24/09/01 1056 1
    14871 IT/컴퓨터호텔방 카드키의 사실상 표준인 mifare에서 하드웨어적 백도어 발견 7 보리건빵 24/08/27 1679 0
    14867 IT/컴퓨터카드사 스크래핑을 해볼까? 3 삼성그룹 24/08/26 1536 5
    14769 IT/컴퓨터독한 랜섬웨어에 걸렸습니다 5 블리츠 24/07/02 1692 0
    14737 IT/컴퓨터애플의 쓸대없는 고집에서 시작된 아이패드 계산기 업데이트 8 Leeka 24/06/11 2482 0
    14734 IT/컴퓨터인공지능과 개발자 12 제그리드 24/06/10 1991 5
    14680 IT/컴퓨터Life hack : 내가 사용하는 도구들 2 Jargon 24/05/14 1877 5
    14676 IT/컴퓨터BING AI 에서 노래도 만들어주네요.. 3 soulless 24/05/14 1277 0
    14670 IT/컴퓨터인체공학을 염두에 둔 내 pc용 책상 세팅(1) 23 kaestro 24/05/12 1692 2
    14622 IT/컴퓨터5년후 2029년의 애플과 구글 3 아침커피 24/04/25 1776 1
    14614 IT/컴퓨터re: 제로부터 시작하는 기술 블로그(1) 2 kaestro 24/04/22 1515 1
    14473 IT/컴퓨터유부남의 몰래 [PC처분]-판매완료 17 방사능홍차 24/02/20 3404 0
    14442 IT/컴퓨터천원돌파 의존성 역전 17 kaestro 24/02/08 4115 1
    14422 IT/컴퓨터의존성 역전 패턴을 활용한 소프트웨어 설계 개선(1~3) 30 kaestro 24/01/30 2545 0
    14383 IT/컴퓨터구글에 암호를 모두 저장하는 습관 36 매뉴물있뉴 24/01/05 3502 1
    14259 IT/컴퓨터잠시 마법세계 다녀오겠습니다?? 1 큐리스 23/11/06 2781 1
    목록

    + : 최근 2시간내에 달린 댓글
    + : 최근 4시간내에 달린 댓글

    댓글
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기
    회원정보 보기
    닫기