fender
7k
2017-03-18 11:25:23.0 작성 2017-03-18 11:35:23.0 수정됨
19
7848

디자인패턴과 알고리즘


최근 비슷한 내용의 덧글을 자주 쓰게 되어 생각난 김에 간략하게 글로 정리해보게 되었습니다.

자바 언어의 문법에 익숙하고 스프링MVC와 같은 프레임워크를 이용해서 간단한 웹 프로그램을 만들 수 있게 된 수준의 개발자들이 그 다음 단계로 실력을 쌓기 위해 무엇을 해야하는지를 묻는 질문을 주기적으로 보는 듯 합니다.

그리고 그런 질문에 대해 보통 자료구조와 알고리즘을 공부하라는 조언을 하시는 분들이 많습니다.

물론 자료구조나 알고리즘도 공부하면 도움이 되는 주제이니 틀린 답은 아니겠습니다만, 개인적으로는 이는 적어도 자바나 C#과 같은 객체지향 언어를 다루는 개발자들에게 있어서 모범답안이 되긴 어렵다고 생각합니다.

일단 그런 질문을 하는 개발자들의 수준을 대략적으로 일반화해보면 아마도 사용해본 프레임워크의 예제를 조금씩 변형해서 비슷한 프로그램을 찍어낼 수 있는 능력을 갖추었을 것입니다. 하지만 그런 프레임워크가 어떻게 동작하고 왜 그런 모양으로 생겼는지는 이해하지 못할 것이고, 당연히 비슷한 프레임워크 같은 것을 만들 수 있는 능력은 없을 것입니다.

실무에서 필요한 클라우드 서비스나 빌드 도구 사용 방법 등은 좀 더 목적 지향적인 지식이라고 이야기할 수 있다면, 결국 객체지향 언어 개발자에게 있어서 궁극적인 '핵심 기술'은 그런 프레임워크나 라이브러리의 API를 쉽게 파악하고 직접 만들 수 있는 능력을 이야기한다고 해도 크게 틀리지 않을 것이라 생각합니다.

이전에 다른 글에서도 지적했듯이, 국내 자바 기반 SI 환경에서 표준으로 적용하는 설계 방식은 매우 기형적인 모습입니다. 원래 비즈니스 응용프로그램을 만든다면 이를 모델링해서 API로 표현하는 과정이 필수적으로 들어가고, 그렇게 완성된 API 가 회사의 핵심 자산이 되는 것인데, 우리나라의 SI 환경에선 유일한 API는 스프링이나 마이바티스 같은 프레임워크 뿐이고 모든 비즈니스 코드는 그냥 데이터베이스 쿼리를 실행하기 위한 스크립트에 불과한 모습입니다.

제 생각에 이런 기형적 모습은 실무에서 그런 API를 설계할 능력이 있는 개발자가 극소수에 불과하기 때문이라고 봅니다만, 그런 잘못된 관행을 타파하기 위해서라도 객체지향 언어를 객체지향 언어처럼 사용할 수 있는 능력은 보다 강조될 필요가 있어 보입니다.

그리고 객체지향 언어로 좋은 API를 설계하려면, 또한 그 이전에 그렇게 설계된 스프링 프레임워크 등의 API를 이해하려면 결국 디자인 패턴을 공부해야 합니다.

기본적으로 자바나 C#과 같은 언어와 C는 다루는 계층이 다릅니다. 그리고 마찬가지로 디자인 패턴과 알고리즘 또한 비슷하게 적용되는 영역이 다릅니다.

이는 어느 쪽이 더 쉽고 어렵고, 또는 근본적이고 응용적이고 하는 문제가 아니라 그냥 계층이 다른 문제입니다.

디자인 패턴이 주로 전쟁에서 진형을 짜고 기동을 고민하는 그런 수준의 전술의 문제를 다룬다면 알고리즘은 주로 개별 병사의 사격술이나 백병전 능력 같은 것을 다루는 것입니다. 지휘관도 총은 쏠 줄 알아야겠고 일반 병사도 작전 지휘를 이해할 수는 있어야겠습니다만, 올림픽 사격 선수를 데려온다고 전술의 천재가 되는 것도 아니고 뛰어난 지휘관이 백병전을 하면 일반 병사 열 명 쯤 때려 눕힐 수 있는 것도 아닙니다.

문제는 자바는 전술을 짜기 위해 쓰는 언어이지 사격술을 익히는데 쓰는 언어가 아니라는 점입니다.

데이터 정렬을 한다면, 자바 개발자에게 보다 중요한 것은 Comparator 같은 인터페이스가 있을 때 그것을 어떻게 사용하는지, 그리고 보다 근본적으로 왜 그런 구조가 필요한지 - 즉, 기본적으로 비교 가능하지 않은(Comparable을 구현하지 않는) 객체를 비교할 때 어떻게 구체적인 방법을 외부에 위임하는 설계를 할 수 있는지 개념을 이해하는 것이지 Collections.sort의 소스를 열어보고 구문을 파악하거나 최적의 정렬 알고리즘을 적용하는 그런 것이 아닙니다.

물론 둘 다 알면 좋고 어쩌면 나중에는 어느 정도 양쪽의 지식이 다 필요한지는 모르겠습니다만, 최소한 자바 개발자에게 보다 중요하고 우선적으로 배워야할 내용은 그런 구조적인 단위의 이해입니다.

자료구조의 내부나 최적의 정렬 알고리즘을 모르는 자바 개발자는 비효율적인 자바 프로그램을 만들 수는 있지만, 객체지향이나 디자인패턴을 이해 못하는 자바 개발자는 애초에 제대로된 자바 프로그램 자체를 만들 수 없습니다.

초보 개발자들이 흔히 하는 실수로 '메서드'와 '함수'를 혼동해서 같은 개념처럼 사용하는 경우가 있습니다. 자바 언어의 함수형 언어적 요소는 아직 많지 않으니 양자의 정확한 차이를 아는 것이 어쩌면 크게 중요한 문제는 아닐 수도 있습니다.

하지만 '메서드'를 '함수'라고 부른다는 것은 보통 객체지향적 사고 방식에 익숙하지 않고 모든 것을 그냥 '어떤 기능이 필요하면 어떤 함수를 부르면 된다' 수준으로 이해하고 있다는 반증인 경우가 많습니다.

그런 개발자들에게 프레임워크란 그냥 수 많은 함수의 집합이고, 개발을 잘하는 건 언제 어떤 함수를 써야 하는 지 많이 경험해보고 외우는 것일 뿐입니다. 그런 사고의 틀을 벗어나지 못한다면 영원히 자바 언어를 자바스럽게 사용할 수 없습니다.

그리고 그런 틀을 벗어나는데 직접적인 도움을 주는 것이 디자인 패턴에 대한 공부입니다.

객체지향과 디자인 패턴에 익숙하면 스프링이나 하이버네이트 같은 규모가 큰 프레임워크도 API 만 보면 쉽게 이해할 수 있고, 필요할 때 어느 부분을 어떻게 확장해서 써야하는지 바로 알 수 있습니다. 또 필요하면 그런 구조를 직접 만들어 보는 것도 가능합니다.

만일 자바 문법과 객체지향의 기본 개념에 익숙하다면 다음 단계로 공부해야할 근본적인 지식은 바로 그런 내용이라고 생각합니다.

알고리즘도 잘 아는 자바 개발자는 훌륭하지만, 알고리즘은 아는 데 자바를 자바처럼 못쓰는 자바 개발자는 쓸모가 없습니다.

디자인 패턴을 언제 어떤 식으로 공부해야 좋은가에 대해선 여러 의견이 있을 수 있겠습니다만, 적어도 막 초보 수준을 벗어난 자바 개발자라면 디자인 패턴을 다음 단계의 궁극적인 공부 목표로 삼는 것이 알고리즘이나 운영체제의 이해 등을 목표로 하는 것보단 더 바람직한 접근이라고 생각합니다.

19
18
  • 댓글 19

  • Soonpyo
    46
    2017-03-18 14:22:43.0

    좋은 글 감사합니다.

    알고리즘 = 사격술, 디자인 패턴 = 전술

    비유가 정말 좋아서 머릿속에 인상깊게 남습니다.

    객체지향에 개념과 디자인패턴을 이해해보고자 공부한다고하면 그에 따른 공부 방법이나 여러가지 개념들이 생각보다 광범위하다고 생각되는데 공부 방법이나 어떤부분부터 시작하면 좋을지 조언을 구하고싶습니다.

    그리고 죄송하지만 그에 따른 잘정리되어있거나 인상깊게본 책이나 자료들 추천받을 수 있을까요?

    0
  • fender
    7k
    2017-03-18 15:37:32.0 작성 2017-03-18 15:49:42.0 수정됨

    Soonpyo //

    저는 기술 관련 책은 보지 않다보니 추천 드리긴 어렵네요. 다만 자바로 디자인 패턴을 설명하는 내용은 무료로 된 PDF 책들이 꽤 있었던 것으로 기억합니다. 아마 'design pattern java pdf' 정도 주제어로 검색해보시면 많이 나오지 않나 싶네요.

    (추가: 검색해서 나온 건데 서문만 읽어 봤지만 괜찮은 내용 같아 소개합니다: http://enos.itcollege.ee/~jpoial/java/naited/Java-Design-Patterns.pdf)

    잠깐 '디자인 패턴 자바'로 검색해보니 결과가 꽤 나오는 걸 보아서는 아마 한글 문서나 번역서도 어렵지 않게 찾을 수 있을 것 같습니다.

    공부 방법에 대해서는 저도 이전에 케누님이 다른 글에 대한 답변으로 남겨주신 내용에 공감하는 편입니다. 즉, 무작정 디자인 패턴을 순서대로 보고 외우거나 하기 보다는 리팩터링으로부터 출발해서 디자인 패턴까지 확장하는 식의 공부가 더 바람직하지 않나 싶습니다.

    예컨대 흔히 보는 개선이 필요한 코드 - 이른바 'code smell' - 중 switch나 if-else를 길게 나열하게 되는 경우가 있는데, 이 것이 왜 문제이고 어떻게 리팩터링을 통해 개선하는 지 좋은지를 고민하다 보면 자연스럽게 이 경우 사용할 수 있는 디자인 패턴까지 공부가 이어지게 될 듯 합니다.

    저는 그냥 디자인 패턴부터 보기는 했는데, 이 부분은 아무래도 사람마다 취향이 다를 것 같아서 딱 잘라서 이게 좋다는 조언은 못드리겠네요.

    2
  • Soonpyo
    46
    2017-03-18 16:23:20.0

    fender // 

    리팩토링에서 디자인패턴으로 자연스럽게 넘어가는것이 저한테 공부방법적으로 좀 더맞는쪽인것같습니다.

    코드를 작성하다보면 제가 작성한코드와 비슷한코드를 구글링해서 많이 비교해보면서 맘에 안들면 다갈아엎고 다시짜기도하면서 개인적인 리팩토링은 많이 하고있지만 일관적인 네이밍규칙이라던지 코딩규약을 지키면서 작성을 하는게 매우 미숙했는데 우선적으로는 그런쪽에 조금 더 시간을 투자할 필요가 있을것같네요.  좋은 자료와 답변감사합니다.

    0
  • jjunss
    17
    2017-03-19 12:40:15.0

    좋은 글 감사합니다. 좋은 개발자가 되는 방향에 대한 구체적인 설명이 있어서, 저에게 도움이 될 것 같습니다.

    좋은 개발자가 되려면 전산기초를 잘 알아야된다고 들었습니다. 그래서 알고리즘이나 자료구조를 공부했는데, 공부를 하게 되더라도 실제 코딩할때 적용이 잘 되지 않는 부분이 많았습니다. 그래서 책을 읽어도 시간이 지나면 금방까먹고 다시 처음부터 봐야하는 일이 저는 많았습니다.(사실 기억력이 좋지 않은 제 탓이지요 ㅎㅎ) 지금 바로 사용가능한 지식부터 배우면 좋을 것 같다는 생각을 어렴풋이 했는데, 말씀해주신 부분이 그 답이 될 수 있을 것 같습니다.

    0
  • 살려주세요
    398
    2017-03-20 14:37:59.0

    좋은글 감사합니다.

    얼마전에 자료구조 책을 구매해서 공부했지만 뒤늦게 디자인 패턴을 먼저 배워야 된다는 것을 알았습니다.

    하지만 책을 구매한게 아깝고해서 디자인패턴을 좀 더 나중에 공부할까 생각을 했지만 이제 확신이 드는군요


    큰 도움 받고 갑니다. 


    0
  • kenu
    34k
    2017-03-20 17:55:17.0

    덕분에 찾아봤습니다. ^^;

    http://stackoverflow.com/questions/155609/difference-between-a-method-and-a-function

    잘 읽었습니다. :)

    0
  • fender
    7k
    2017-03-20 18:45:31.0

    kenu// 네, 찾아주신 링크에 나온 것처럼 메서드는 객체의 동작(behavior)을 나타내는 것이라 독립적인 함수와는 달리 해당 객체라는 맥락에 대한 정보가 필요한데, 이를 서로 혼용한다는 것은 보통 그런 구조에 대한 이해를 못하고 있는 반증인 경우가 많더군요.

    예를들어, '문자를 날짜로 바꾸려면 SimpleDateFormat.format() 함수를 사용하면된다'라는 식으로 이해하는 한, 해당 메서드가 'Format'이라는 추상 유형에 정의된 것이고, 따라서 같은 클래스를 상속하는 'NumberFormat'을 통해 숫자를 표현하는 데도 동일한 방식을 적용할 수 있다는 걸 파악하긴 어려울 것입니다.

    이는 매우 쉬운 예이지만, 아마 많은 초보 개발자들이 API 문서를 보고 계층을 파악하는 습관을 들이기 보단 그냥 그 때 마다 검색해서 '이런 기능은 이런 함수' 하는 식의 단편적 지식을 외우는 탓에 경력이 쌓여도 실력이 제자리를 맴돌게 되는 것이 아닌가 싶기도 합니다.

    0
  • kenu
    34k
    2017-03-21 00:57:52.0

    세상엔 헬로 월드가 뭔지 아는 개발자와 비개발자로 나뉩니다. 

    ^^;

    0
  • 꾸아앙
    304
    2017-03-21 08:36:03.0

    저는 약간 다른생각입니다만...

    자료구조, 알고리즘은 피와 살이된다고 생각합니다

    물론 이걸 자료구조를 구현하고, 소팅 알고리즘을 짜야된다는 뜻이 아닌

    어떤 상황에 어떤 자료구조를 사용할지 선택하고, 어떤 소팅방법을 채택해야하는지에 대한 공부에 대한 얘기입니다.

    어떤 공부를 해야하는지 방향도 잡지못한 초급개발자에게 디자인패턴부터 공부하라고 한다면

    이해도 어려울 뿐더러, 개발을 모르는 기획자들처럼 뭉뚱그려진 설계만 가능할거라 생각됩니다

    디자인패턴은 물론 중요하지만 정말 기본기인, 자료구조와 알고리즘이 선행되어야하지 않을까하는 의견입니다

    0
  • fender
    7k
    2017-03-21 09:35:48.0 작성 2017-03-21 09:45:53.0 수정됨

    꾸아앙// 자바의 핵심 API를 살펴보면 생각보다 자료구조나 알고리즘을 따져야 하는 경우가 많지 않음을 알 수 있습니다.

    만일, 말씀대로 필요한 것이 구현이 아닌 선택의 문제라면 이는 결국 Stack이나 Queue는 무엇을 하는 인터페이스인지 이해하고, 언제 LinkedList를 써야하고 언제 ArrayList를 써야하는지를 결정하는 문제로 귀결됩니다.

    그리고 그 정도의 이해라면 전통적인 자료구조 교재를 볼 필요도 없이 그냥 해당 클래스들의 API 문서의 첫 두 세 단락만 읽어보아도 알 수 있는 내용입니다. 물론 자료구조를 제대로 공부하지 않았다면 'O(n)'이 무엇을 뜻하는지야 모르겠지만 적어도 무작위 접근이 필요할 때는 ArrayList가 더 효율적이라는 것 쯤은 이해할 수 있을 겁니다.

    그리고 이런 지식은 예컨대 "CollectionList는 무엇이 다른가?" 같은 계층 관계의 구조적 이해가 없다면 별 쓸모가 없습니다. 또한, 두 구현체의 계층 관계를 먼저 이해한 개발자라면 설사 두 구현체의 내부 구현을 뜯어보지 않고, 정확하게 왜 무작위 접근시 ArrayList가 효율적인지 이유를 설명할 수 없다 치더라도 하다못해 "ArrayListRandomAccess인터페이스를 구현하기 때문에 무작위 접근에 특화되어있다" 정도의 답은 할 수 있습니다.

    저는 무작위 접근에 ArrayList를 사용하는 것이 낫다는 정도만 이해하고 있다면 그 내부 구현을 이해하고 성능 차이를 수식으로 표현할 수 있는 것보다는 그 클래스가 ListRandomAccess라는 인터페이스를 구현하고 있으며 각각의 인터페이스의 의미가 무엇인지를 설명할 수 있는 것이 보다 중요하고 근본적인 내용이라고 봅니다.

    알고리즘의 경우도 마찬가지입니다. 보통 '알고리즘은 기초이다'라고 말할 때 말씀하신 정렬 알고리즘을 예로 듭니다만, 자바에서 초급 개발자가 정렬 알고리즘을 신경써서 직접 골라야할 일은 거의 없습니다.

    '어떤 정렬 알고리즘을 사용해야 하는지 이해해야 한다'라고 하셨는데, 당장 자바 기본 API에선 개발자가 직접 정렬 알고리즘을 지정할 방법도 (제가 아는 한) 없습니다.

    예컨대 Arrays.sort()의 API문서를 보시면 그냥 해당 클래스의 구현 차원에서 원시유형과 객체 유형에 각각 내부적으로 특정 알고리즘을 사용했음을 알 수 있습니다. 그리고 그 알고리즘은 자바7인가 8에서 한 번 바뀐적도 있습니다만, 정말 정렬 알고리즘의 선택이 대부분 자바 개발자들에게 그렇게 중요한 문제라면 그런식으로 소리소문 없이 구현을 바꾸어 버리는 일은 있을 수 없을 것입니다.

    그런 이유로 자바 개발자라면 정렬에 대해선 선택권도 없고 볼 일도 없는 Arrays.sort() 내부에서 정확하게 무슨 알고리즘을 사용하는 지를 이해하는 것보단 우선 ComparatorComparable 등의 관련 인터페이스의 정확한 의미와 용도를 이해하는 것이 중요하다고 봅니다.

    아마 자바의 기본 API에서 개발자가 직접 알고리즘을 지정해야하는 경우는 암호화의 경우가 거의 유일하지 않나 싶습니다. 제가 모든 API를 외우고 있는 것은 아니지만 자바를 15년 넘게 사용하면서 본 것이 그 것 밖에 없다는 건 시사점이 있지 않을까 싶습니다.

    그나마 암호화를 할 때 SHA-1를 쓰느냐 AES를 쓰느냐 그런 차원의 이야기는 '알고리즘은 기본 소양이다'라고 주장할 때의 의미와도 차이가 큽니다. 일단 암호화 알고리즘은 도메인 지식에 가깝기 때문에 전통적인 프로그래밍 교육 과정에서 기초로 가르치는 내용이 아닙니다.

    사실 그럴 수 밖에 없는 것이, 알고리즘은 기본적으로 구문 단위, 즉 메서드 내부 구현 수준의 패턴을 다루는 것이고 기본적으로 객체지향의 설계는 최소가 메서드 시그네쳐 수준이기에 겹치는 내용이 극히 적습니다.

    보통 '알고리즘을 공부한다'라고 말할 때 흔히 푸는 문제들 - 예컨대 최대 공약수 찾기나 최단거리 찾기 등 - 은 넓게 보아서 논리적 사고 능력을 키우는 데 도움이 되고, 가끔씩 구현 수준에서 응용할 일이 있을지는 모르겠습니다. 다만 그것이 자바 개발자가 객체지향의 기본 개념을 이해하고 다른 사람의 API를 이해하거나 직접 설계하는 게 필요한 지식보다 더 중요한 근본 지식이다라는 주장에 대해선 상당히 회의적으로 생각할 뿐입니다.

    마지막으로, 본문과 덧글에서 이야기했듯이 디자인패턴을 공부해야 한다는 것이 아직 객체지향의 기초도 모르는 개발자들에게 무턱대고 처음부터 팩토리 패턴이니 데코레이터 패턴이니 하는 이름을 외우게 해야 한다는 뜻은 아닙니다.

    그런 패턴을 이해하고 구사하는 것을 궁극적 목표로 삼아, 그에 필요한 객체지향과 리팩터링의 기본 개념들을 차근차근 습득해 나가는 것이 최선의 학습 방법이라는 이야기일 뿐입니다.

    중요한 차이는, 객체지향의 기초와 리팩터링은 디자인 패턴을 이해하기 위한 핵심적인 기초 지식이지만 알고리즘이나 자료구조는 그렇지 않다는 것입니다.

    그리고 디자인 패턴을 기초라도 하지 않는다면 어느 정도 이상 수준의 자바 개발자가 되기 어렵습니다. 당장 위에서 언급한 Listiterator() 같은 메서드도 왜 그런 것이 필요한지를 이해하려면 디자인 패턴을 알아야하고, 국비 지원 학원에서 6개월 속성으로 가르치는 스프링 프레임워크도 API 수준의 이해를 하기 위해선 반드시 디자인 패턴을 알아야 합니다.

    극단적으로 말해, 정렬 알고리즘과 자료 구조를 하나도 모르는 개발자라도 디자인 패턴을 제대로 이해했다면 스프링 프레임워크 같은 걸 직접 설계할 수도 있습니다. 반면에 아무리 온갖 정렬 알고리즘과 자료구조에 통달한 개발자라도 팩토리 패턴 같은 걸 이해하지 못한다면 스프링 프레임워크 같은 걸 만들기는 커녕 API를 이해하기도 어렵습니다.

    그런 관점에서 볼 때 자바 개발자에게 어떤 지식이 더 중요하고 기본이 되는 것인지는 명확하지 않나 생각합니다.

    0
  • 꾸아앙
    304
    2017-03-21 09:56:28.0

    fender

    좋은 말씀 감사합니다

    제가 C/C++을 하는데... 자바에 대한 이해없이 말씀을 드렸던것 같네요

    소팅 알고리즘조차 개발자가 선택할 기회도 없다는건 좀 놀랐습니다...

    그리고 한가지 정정하고싶은건 저도 디자인패턴을 몰라도 된다고 생각하지 않습니다

    디자인패턴을 모르면 날코딩 수준으로밖에 구조를 잡지 못하기때문에

    디자인패턴의 기초라도 아는지 모르는지가 초급자와 중급자의차이라고 생각합니다

    다만 그렇더라도 디자인패턴보다 선행되어야 하는게 자료구조와 알고리즘이라고 생각합니다

    자바만 사용한다면 모르겠지만 C#처럼 다른 객체지향언어도(C++은 논외로 하겠습니다) 나중에가면

    성능문제로 라이브러리들을 커스터마이징을 해야할텐데

    그때가서 자료구조와 알고리즘을 다시 공부하기는 여간 힘든게 아니라고 생각합니다

    웹언어 역시 언제까지나 자바로만 할거라고 생각하지 않습니다..

    그렇기때문에 자료구조와 알고리즘은 미리 준비하는게 맞지 않나 생각됩니다

    0
  • fender
    7k
    2017-03-21 10:25:24.0 작성 2017-03-21 10:25:42.0 수정됨

    꾸아앙// 전 이런 문제가 자바의 특징이라기 보다는 자바와 같은 고수준 객체지향 언어의 특성이 아닌가 생각합니다. 그런면에서 본다면 자바와 동일한 포지션의 C# 역시 비슷하게 적용할 수 있는 이야기일지도 모르겠습니다.

    성능의 경우는, 특히 엔터프라이즈 어플리케이션의 경우 정렬 알고리즘과 같은 저수준에서 병목이 발생하는 경우는 지극히 예외적이기도 합니다.

    물론 아무리 저수준 성능 차이가 무의미하다 쳐도 일부러 수십만 건의 데이터를 LinkedList에 넣고 무작위 접근한다던지 하면야 문제가 되겠지만, 그 정도의 지식은 앞서 말한대로 API 문서를 앞부분만 읽어봐도 습득할 수 있는 것이기에 말씀하신 나중에 배우기 매우 어려운 종류의 내용이라고 하긴 힘들 듯 합니다.


    단지 이 문제는 상당히 주관적인 시각이 반영될 수 밖에 없는 문제이기에, 무조건 제 의견이 꾸아앙님의 의견보다 올바르다고 우길 수 있는 내용은 아닌 것 같습니다.

    그렇기 때문에 어쩌면 이는 각자 여러 의견을 참조해서 자신에 맞는 공부 방향을 설정하면 될 문제인지도 모르겠다는 생각이 듭니다.

    0
  • dkb
    1k
    2017-03-21 11:00:10.0

    저수준에서 병목이 발생하면 돈 주고 좋은거 사면 됩...


    0
  • 꾸아앙
    304
    2017-03-21 11:23:21.0

    fender

    제가 약간 편협한 시각으로 보고있던것 같습니다

    저는 자료구조나 알고리즘을 배우지 않은 개발자를 생각해보지 않았는데

    말씀해주신 내용을 보니 그런 시각이 있을수 있다는것도 알게됐습니다

    좋은글 감사합니다

    많이 배워갑니다 ㅎ

    0
  • 아야나미
    2k
    2017-03-21 16:44:50.0

    딱 본문에 해당하는 개발자가 나구나 하는 생각이 들었습니다.


    자료구조 책 봤고 패턴도(부담없는) 책 봤는데..

    솔직히 제 수준에는 패턴이 좀더 잘 와닿는 느낌이었습니다. 모든 패턴을 외우지는 못했지만 중간 댓글의 예제처럼 예제코드를 리팩토링한 거 보고 놀랐었습니다..


    패턴 다시 공부해야 겠는데..

    의지박약 인가봐요..


    좋은글 감사합니다

    0
  • 비둘기야밥먹장
    82
    2017-03-23 23:11:59.0

    정성껏 써주신글 감사합니다.

    매번 눈팅하며 도움 많이받고 있습니다.

    0
  • nikerun23
    69
    2017-03-25 00:31:17.0

    좋은 말씀 감사합니다.

    디자인 패턴에 대해서 공부해야겠네요 ^^

    0
  • TF_JW
    15
    2017-04-01 17:57:36.0

    감사합니다. 

    MVC 배우고 하면서 배운대로 머리속에 입력이나 했지 

    왜필요한지 그런것에 대해 너무 이해도가 스스로 떨어진다고 생각했었는데

    디자인패턴에 대해 공부해야겠다는 새 목표가 생겼습니다

    0
  • 21panic
    5
    2017-04-05 15:40:49.0

    좋은글 감사합니다! 

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.