오키도이키오디
2017-02-05 04:11:28
16
8437

알고리즘 및 자료구조의 필요성에 대해서 질문합니다.


안녕하세용! :-) 

저는 웹 애플리케이션 쪽으로 종사하고자 합니다.


보통 알고리즘 및 자료구조가 효율적인 코드를 위해 중요하고 필요하다고 하시잖아요.

그러기 위해서 처음엔 스택, 큐 등으로 기본적인 사고력을 기르라고 하시는데 솔직히 잘 와닫질 않습니다.


제가 스프링 MVC로 기본적인 crud 만 공부하면서 추가적으로 서브쿼리, 조인 등 select 문을 바꿔도 무언가 기계적으로 만드는 듯한 느낌이 들어서요.

논리적인 부분이 전혀 없고 기계처럼 MVC 흐름만 이해하고 만드는 것 같아 속히 코더가 되가는 느낌입니다...


스택, 큐, 트리, 퀵 정렬 등의 수많은 것들을 이해하면서 실질적으로 어떤 부분이 어떻게 쓰이는지 궁금합니다.

논리적인 사고력을 길렀다고 치면, 기른 사고력을 풀어낼 수 있는 그러한 것이요.


모두가 중요하다고 하는것에 무지한 것이 부끄럽지만.. 왜 중요한 것인지 본질을 깨닫지 못해 질문 드립니당 ㅠ_ㅠ 답변 부탁드립니다!

0
3
  • 답변 16

  • 돈까스
    2k
    2017-02-05 04:30:18

    지하철 노선도만 알고 있으면 지하철만 타야되죠.

    근데 버스 노선도 알고 있으면 지하철 타다가 버스도 환승할 수 있습니다.

    그런거라고 생각하시면 되죠.

    매일 지하철만 탔다면, 다른 길도 찾아서 가보면 좋겠죠.


    0
  • fender
    14k
    2017-02-05 07:44:04 작성 2017-02-05 07:48:41 수정됨

    잔 자료 구조별 어떤 특성이 있는 지를 아는 정도는 꼭 알아야 한다고 생각합니다. 다만 자바 개발자라면 굳이 내부 구현을 알 필요까지는 없고, 어떤 상황에서 어떤 자료 유형을 쓰는 것이 최적인지를 아는 정도로 충분한 것 같습니다.

    그리고 자료구조를 공부한다면 그냥 자바 컬렉션 API를 마스터하겠다는 생각으로 보는 것이 좋다고 봅니다. 더 고급 내용을 알고 싶다면 굳이 내부 구현을 파기보다는 차라리 커먼스 컬렉션스나 구아바 프로젝트 등에서 제공하나 추가적인 자료 구조나 개념들을 익히고 람다식 등 자료구조를 효과적으로 활용하는 방법을 익히는 게 나아 보입니다.

    반면 알고리즘은 개인적으로는 그렇게 중요하다고 보지 않습니다. 알고리즘이나 디자인패턴이나 모두 흔히 접하는 문제들에 대한 일반적인 해법이라는 성격이 있는데, 전자가 좀 더 코드에 가깝고 후자는 좀 더 큰 구조에 가까운 정도의 차이입니다.

    자바 개발자라면 일단 스프링 같은 다른 프레임워크의 구조를 이해할 수 있고, 나아가서 그런 구조를 스스로 설계할 수 있는 것이 특정 메서드를 내부적으로 어떻게 구현하는 지보다는 훨씬 중요한 문제입니다.

    따라서 보다 큰 단위에 적용되는 디자인패턴이 훨씬 더 도움이 되는 내용이라고 생각합니다.

    알고리즘은 특정 문제에 접했을 때 그런 문제는 어떤 알고리즘으로 푸는 것이 적합한지 검색해서 적용해볼 수 있는 정도면 충분하다고 봅니다.

    자바 같은 고수준의 객체지향 언어를 잘하기 위해서는 퀵소트를 어떻게 구현하는 지는 몰라도 되지만 Comparator의 의미와 사용 방법을 알고, 나아가서 비슷한 문제가 있을 때 그런 식의 인터페이스를 통해 풀어낼 수 있는 설계 능력이 반드시 필요합니다.

    1
  • Taetrees
    546
    2017-02-05 09:07:06

    수학문제를 푼다고 했을 때

    그 문제를 풀 수 있는 공식이 중요하다고 생각하나요?

    아니면 그 공식의 증명과 풀이 방법이 중요하다고 생각하나요?

    제 경우는 전자보다 후자라고 봅니다.

    물론 둘다 중요하지만 그 공식을 잘 이용하고 변형하거나 응용하기 위해서는

    풀이 방법이 대한 이해가 필요하다 보거든요.

    알고리즘을 공부한다는 것이 이와 비슷하다고 생각해요.


    우리가 일반적으로 말하는 프로젝트를 솔루션이라고 부르죠.

    제 생각으로 이리 부르는 이유는 어떤 문제에 대한 해법이라는 의미에서 그렇게 부리는 것 같고

    해법에 대한 증명과 풀이방법을 기술하는 사람들이 프로그래머라고 생각합니다.

    가끔은 잘못된 답을 낸다거나 풀이방법에 허점이 있다거나 한다면 고쳐야하고

    더 나은 방법이 있다면 그 방법으로 바꾸거나 하는 등의 처리를 하면서요.


    즉, 프로그래머라면 문제에 대한 해법을 찾을 수 있어야하고 더 나은 방법을 판단할 수 있어야한다고 생각합니다. 그에 필요한 것이 알고리즘이라 불리는 것들을 풀어보면서 그 생각과 개념들을 익혀가는 것 아닐까 싶습니다.

    다만 위의 fender님께서 말씀하신 것처럼 자바 개발자가 직접 공식을 만들고 계산을 할 일이 잘 없죠.

    왜냐하면 이미 계산기가 나와있고 유명 수학자가 만든 공식을 틀처럼 가져다가 쓰기만 하면 되니까요.

    그러니 우리는 어떤 공식이 있는지 알고 사용하기만 하면 된다라고 말할 수도 있지만 글쓴이님의 갈증은 결국 깊이가 없다는 것에서 나오는 것 같고 제가 보기에 깊이를 얻기 위해서는 이런 공식이 있다는 것을 아는 것에 그치는 것이 아니라 풀이방법에 대한 고찰은 필요하다고 봅니다.


    하루 또는 한주에 한문제가 되더라도 직접 풀어본다면 정신적인 성숙은 일어난다고 생각하고 이러한 것들이 쌓여서 말씀하신 논리력이 길러지는 것 아닐까 합니다.


    사실 제가 보는 개발자의 능력차이는 문제를 빨리 푸느냐보다 얼마나 더 발생가능한 문제가 적고 더 제대로 풀었냐인 것 같거든요. 물론 사람마다 이 '제대로'의 개념이 다르기 때문에 의견이 나뉠 수 있긴합니다.

    제 생각에 더 제대로 풀기 위해서 더 나은 논리력이 필요하고 이것을 기르기 위해서는 알고리즘이 필요하다는 입장입니다.

    그렇지만 우리가 수학을 배울 때 왜 공식 위주로 암기했는지를 생각해본다면 우리는 늘 시간에 쫓기고 있었다는 점을 아실겁니다.

    이런 시간에 대한 부분을 고려하자면 이미 배울 것은 넘쳐나기 때문에 API를 익혀 익숙해지고 활용하는 측면에서만 해도 시간이 빠듯하다 느껴지니 이런 깊이에 대해서 소홀해지는 것 같습니다.

    그런데 학생이 아닌 지금은 그렇게 시간에 쫓겨야 할까요?

    0
  • fender
    14k
    2017-02-05 09:25:06 작성 2017-02-05 09:30:09 수정됨

    Taetrees // 제 생각에는 원리를 택하냐 응용을 택하냐의 문제가 아니라 어느 분야의 원리에 집중하냐의 문제가 아닐까 싶습니다.

    API를 사용하는 것은 응용이지만 그런 API를 만드는 것은 설계에 대한 원리를 이해해야 가능한 것인데, 과연 알고리즘 지식이 예컨대 디자인 패턴에 비해 얼마나 그런 종류의 원리를 배우는 데 도움이 되는가의 문제인 것 같습니다.

    응용보단 원리가 중요하고 특히나 학생 때는 당장 써먹을 수 있는 지식을 얕고 넓게 알기 보단 하나를 알아도 깊이 있게 배워야 한다는 말씀에는 전적으로 공감합니다.

    다만 저는 객체지향적 고수준 언어를 다루는 개발자가 알아야하는 원리나 기본은 C언어 개발자가 알아야하는 내용과 다르고, 그건 쉽고 어렵거나 깊이가 있고 없는 문제가 아니라 그냥 분야가 다른 것이라는 이야기가 하고 싶었을 뿐입니다.

    0
  • 전재형
    4k
    2017-02-05 09:29:03

    주기적으로 나타나는 문제인데..

    저는 필요하다고 생각하는 입장입니다.


    http://okky.kr/article/340883

    http://okky.kr/article/327762

    1
  •  (づ。◕ ܫ ◕。)づ
    4k
    2017-02-05 09:51:33

    질문이 필요성이라고 하셨으니 필요합니다.


    예를 들어, 순차리스트와 연결리스트가 있을 때 단순히 순차적으로 입력해서 반환해주는 상황인데 연결리스트를 사용한다면 굳이 왜?... 라고 하겟죠


    순차적으로 입력후 반환하기 전에 순서를 바꿔야할 로직이 있다면 연결리스트를 적용해야한다는 것이 좋다라는 것을 알고 있다면 되는 거죠




    결국 상황에 맞게 적용하기 위해서는 이해가 필요하겟죠? 


    0
  • fender
    14k
    2017-02-05 10:03:55 작성 2017-02-05 10:08:36 수정됨

    극단적으로 말하면, 정렬 알고리즘이 무엇이 있고 각각 어떻게 짜는 지 몰라도 객체지향만 제대로 알면 스프링 같은 프레임워크도 만들 수 있습니다.

    반대로 알고리즘 경시대회에서 입상할 수준으로 알고리즘을 빠삭하게 알아도 객체지향 공부를 제대로 안했다면 프레임워크를 만들기는 커녕 기존 프레임워크의 API 문서도 이해하기 어렵습니다.

    자바스크립트 문법이 자바에서 왔다고 리액트나 앵귤러를 배우려면 자바를 먼저 공부하라고 하는 사람은 없듯이, 요즘 세상에 자바를 제대로 배우고 싶다면 알고리즘부터 배우라고 이야기할 필요는 없다고 봅니다.

    C 개발자가 팩토리 패턴이 뭔지 모른다고 실력이 없다고 비판하는 게 말이 안된다면, 자바 개발자가 자료구조를 바닥부터 구현하지 못한다고 실력없다고 말하는 것도 말이 안되는 것 같습니다.

    물론 알아서 나쁜 지식이야 없겠고, 알고리즘도 알면 언젠가는 도움이 될 때가 있는 건 사실입니다. 하지만 자바 개발자에게 그건 '알면 좋은' 종류의 지식이라면 객체 지향 패러다임이나 디자인 패턴은 '모르면 안되는' 종류의 지식입니다.

    그래서 전 자바 개발자라면 알고리즘 공부를 얼마나 하건, 최소한 그 보다는 객체지향 패러다임이나 디자인 패턴에 대한 기초를 쌓는 것을 우선해야 한다고 생각합니다.

    제가 이 문제에 대해 다소 강하게 주장을 내세우는 이유는, 특히 우리나라의 경우 자바 개발자의 수에 비해 최소한의 기본 소양을 갖춘 개발자는 극소수에 불과하다고 생각하기 때문입니다.

    단적으로 시장에서 '중급'이라고 이야기를 듣는 경력 개발자 중에 다른 사람이 개발한 라이브러리의 API를 보고 구조를 파악하고 스스로 그런 API를 설계할 수 있는 개발자는 거의 없는 것 같습니다. (예를들어 실무에서 추상 클래스를 몇 번이나 써보셨나요?)

    이렇듯 대부분의 실무 환경에서 자바 개발자로서 기본 소양을 기르는 걸 기대할 수 없다면 결국 개인이 짬짬이 시간을 내서 기초를 쌓을 수 밖에 없는데, 그 시간을 객체지향이나 디자인 패턴 대신 알고리즘 공부 같은 저수준 지식을 배우는데 소비한다면 큰 낭비라고 보기 때문입니다.

    디자인 패턴 같은 건 실무에서도 안쓰고 학원에서도 안가르치니 관심 갖는 분들이 적은 반면, 좀 더 체계적인 지식에 목마른 비전공자 분들이 막연하게 전공자들이 배우는 것이 더 근본적인 지식일 것이라고 생각하고 저수준 공부에 먼저 관심을 두는 현상을 흔히 보게 되어 안타까운 마음이 들더군요.

    C언어 개발자에게 포인터를 이해하는 것은 필수적인 기본 소양이고, 객체지향이나 분산 환경의 아키텍처는 알면 좋은 교양 수준의 지식입니다.

    반대로 자바 개발자라면 객체지향에 대한 이해가 기본 소양이고, 자료 구조를 바닥부터 구현하는 능력이나 알고리즘 지식은 교양 수준의 내용이 될 것입니다.

    컬렉션 API를 보고 'Collection'과 'List'의 관계를 이해하지 못한다면 'ArrayList' 소스 코드를 읽어보는 게 무슨 의미가 있고, 'Comparable'의 의미를 모르는 상황에서 'Collections.sort' 내부에서 무슨 알고리즘을 쓰는 지 알아서 무엇에 쓸까요?

    응용 이전에 기초를 쌓고 원리를 이해하는 것이 중요하다는 점에선 이견이 없지만, 자기 분야의 기초 대신 남의 분야의 기초를 먼저 보는 것은 시간 낭비일 뿐입니다.

    1
  •  (づ。◕ ܫ ◕。)づ
    4k
    2017-02-05 10:24:06

    저는 웹 애플리케이션 쪽으로 종사하고자 합니다.

    라는 부분에서 학생이거나 취업을 준비하는 분이겟네요


    http://okky.kr/article/373177 이런 사고를 가진 인재를 원하는 회사가 있는 반면에

    (저 문제들을 맞추는게 중요한게 아니라 시간복잡도와 공간복잡도를 고민하는가를 보는거죠)


    IT에 대한 전반적인 이해를 우선시 하는 회사가 있어요 

    (알고리즘에 빠삭한 제 친구들도 IT 전체에 대해서 물어보면 대답을 못하더라구요)


    저도 같은 취업준비생이지만 알고리즘보다는 IT 인프라에 대해 공부하고 있습니다... 

    0
  • 전재형
    4k
    2017-02-05 10:28:41

    fender 님의 의견에 대체로 동의합니다만. 자료구조나 알고리즘 원리에 대한 공부가 중급 개발자한테 필수 소양이 아니며, 효용이 적다는 의견에는 동의하기 힘든 것같아요.


    제가 오랜 시간 이 분야에 일한 다른 분들만큼 경험이 있는 것은 아니지만.

    최근 이런 경우도 있었죠

    나이가 55살 이셨던 선배 개발자분이 저한테 일종의 트리구조에 대한 구현 방법을 묻습니다.

    이분은 끝내 해당 문제를 해결하지 못하셨어요.


    그리고 지금 웹을 하는 지금 저한테도 이런 자료구조나 알고리즘 응용 구현이

    한번씩 보여지는 것같네요.


    어제 게시판에 다음 문제가 풀만한 문제인지 물어보셨던 분이 계셨었어요

    http://okky.kr/article/302445

    반대로 이런 문제에 익숙하지 않으신 분께서 더 복잡한 문제를 푸는데

    걸리는 시간은 일주일 이주일을 훨씬 더 많이 소모하게 되지 않을까요?

    (제가 처음 알고리즘을 공부할때 어떤 문제 하나를 놓고 한달씩 

    고민했던 적이 있었던것같네요. 지금은 해당 문제 푸는데 십분, 이십분이면

    되겠지만요)


    반대로 패턴을 모른다고 하면, 패턴을 사용해서 이쁜 코딩을 못짤뿐이지

    어떤 API나 라이브러리를 이용해서 실무코딩을 하는 것에 대하여

    하루이상 사용법을 탐구하는데 시간이 사용될 가능성은

    오히려 더 적지 않을까요?


    0
  • fender
    14k
    2017-02-05 10:53:38 작성 2017-02-05 11:15:26 수정됨

    전재형 // 네, 말씀하신 예제들은 저도 동의를 합니다. 아무리 자바 개발자라도 자료 구조를 직접 만들어야할 때도 있고, 링크하신 문제 같은 알고리즘 수준의 고민을 하는 경우를 겪는 건 사실입니다.

    다만 자바 개발자에게 그런 지식이 예컨대 스프링 API를 보고 구조를 파악할 수 있는 능력보다 더 근본적이고 중요한 것인가하는 질문에 대한 답에서 저와 전재형님의 시각 차이가 있는 것 같습니다.

    말씀대로 디자인 패턴을 모르더라도 스프링MVC 틀에 맞춰서 페이지를 찍어내는 식의 코딩이 불가능한 건 아닐 겁니다. 하지만 같은 논리라면 정렬 알고리즘을 몰라도 'Collections.sort()' 예제 코드를 검색해서 붙여넣기 할 수는 있지 않을까요?

    결국 문제는 알고리즘이든 디자인 패턴이든 원리도 모르고 남이 짠 소스를 조금씩 수정해서 어떻게든 돌아가게만 만드는 수준에서 스스로 고민해서 무언가 결과물을 만들어내는 단계로 나아가기 위해서 필요한 지식이라고 생각합니다.

    하지만 자신의 분야에서 무언가 만들어 낸다는 것이 벽돌로 집을 쌓는 것인지 아니면 보다 단단한 벽돌을 구워 내는 것인지를 구분하는 것은 중요하다고 봅니다.

    자바에서 무언가를 만든다면 결국 객체지향적인 설계를 한다는 것이고, 또 스스로 무언가를 만들기 전에 일단 남이 만든 결과물부터 보고 이해할 수 있어야 할 것인데, 객체지향 패러다임이나 디자인패턴에 대한 기초 지식 없이는 어느 쪽도 제대로 할 수 없습니다.

    전, 자바 개발자가 자신이 사용하는 라이브러리의 API를 완벽히 이해하지 못하고 그런 API를 설계할 수 없는 단계라면 가끔씩 접하게 되는 저수준 분야의 기초를 쌓는게 당장 급한 문제가 아니라고 생각할 뿐입니다.

    그리고 개인적으로 저수준에 익숙한 개발자가 고수준 언어를 처음 사용할 때 상당한 어려움을 겪는 것을 꽤 자주 경험하기도 했습니다.

    예컨대 모든 것을 구문이나 함수 수준에서 이해하고 클래스나 계층 구조와 같은 큰 그림을 보려 하지 않는다 거나, 세세한 마이크로 최적화에 집착하고 어떤 라이브러리를 이해하기 위해서 구조를 보는 대신 자꾸 소스를 열어보려고 하거나, 그런 식으로 소스 수준의 파악이 안되면 신뢰하지 않고 자신만의 구현을 새로 만들어 쓰려고 한다던지 그런 식의 모습을 흔히 접할 수 있더군요.

    저수준의 공부가 무조건 해가 된다고 할 수야 없겠습니다만, 최소한 자바 개발자가 클래스나 계층 구조의 큰 단위로 사고하는 데도 아직 익숙하지 않는다면, 적어도 그런 쪽의 연습보다 구문 단위로 시각을 좁혀야하는 종류의 연습을 우선하거나 더 많은 시간을 할애할 이유는 없는 것 같습니다.

    그래서 자바 언어를 주력으로 삼는 개발자라면 우선 객체지향 패러다임부터 능숙하게 익히고 시간이 남으면 디자인 패턴을 공부하거나, 웹 분야를 한다면 서블릿 스펙을 정독해 본다던지 하는 종류의 공부가 더 기초를 쌓는데 도움이 되는 내용이 아닌가 싶습니다.

    자료구조의 내부를 뜯어보거나 알고리즘 경진대회에 나오는 부류의 문제를 푸는 건 그런 기초를 배운 다음에 흥미가 있고 시간이 남는다면 시작해도 늦지 않는 것이 아닌가 생각합니다.

    0
  • byeworld
    2k
    2017-02-05 11:16:41 작성 2017-02-05 19:03:26 수정됨

    자세하게 쓸까 하고 생각을 하면서 여러번 자세히 읽고, 설명을 하려 했지만, 

    쓰다 고치고 하다보니 설명을 하는 것이 불필요해 보입니다. 


    위의 논쟁도 불필요해 보이구요..

    (추가) 어떤 분은 자료구조를 넘어 개발 패러다임과 관련된 관점이 핵심처럼 여겨지고, 

    어떤 분은 소프트웨어 공학에서 아키텍처 설계 관점이 주된 관점으로 보입니다. 

    (당연히 자료구조를 넘어 훨씬 더 높은 수준의 논의이기 때문입니다.) 

    자료구조가 왜 필요한지 묻는 글에서

    어느 방향이 더 나은 것이냐 논하는 것으로 보여 불필요하게 여겨집니다.

    필요성을 물으시면서 왜 중요한지 모르신다고 하셨는데요.. 

    => 알아야만 하실껀가요? 이유를 모르면 안할실껀가요?



    1. 쉬운 책으로 그냥 하십시오.

    전공자들도 대학교 2학년 1학기에 왜 중요한지 모르고 배웁니다. 

    그리고 다른것들까지 배우고나니, 졸업하고 생각해보니

    '그건 필수다.'하는 것이 '자료구조'입니다.

    (글쓰신 분께서 본인 전공 대학교 2학년들 아는 것도 모르는 사람이랑 같이 일한다고 생각해보십시오.)

    학교마다 커리가 요구하는 수준도 다른것 같습니다.  

    카이스트 다니던 고등학교 친구는 AVL, 234, B , B+ 넘어서 R/B 까지 알더군요.

    저는 AVL이나 234까지 배운 것으로 기억합니다.

    (솔직히 부끄러웠습니다. 저는 그 앞쪽에서 배운 것들도 잘 몰랐거든요.. 작은 위안은 그들이 배우는 책으로 우리도 배운다는 것이었습니다.)

    - 책은 Horowitz(이석호역) 기준입니다.


    2. 검색하십시오. 

    정보가 넘치는 시대입니다. 검색은 기본이죠.

    위 본문에 문의하신 내용 전부 나옵니다.

    제가 작성하던 것보다도 간결하고 자세한 것이 많이 있습니다. 

    심지어 '자료구조'만 검색해도 나옵니다. 

    그 정도 검색도 안하신다면 굳이 설명을 드려야 할까 싶습니다. 

    본문 쓸 시간에 검색창에 '자료구조' 네글자만 입력해 봤어도 

    안 올렸을 내용도 있습니다. (이부분에서 안타까웠습니다. '이런 설명을 하는 것이 맞을까?'하는 생각이 들기 시작하더군요.. )


    추. 위에서 말씀하신 '자료구조와 알고리즘'은 전공에서는 '자료구조론'입니다.

    0
  • Taetrees
    546
    2017-02-05 15:06:41

    fender // 전적으로 동의합니다.

    결국 우리들이 하는 말은

    "문제 해결을 위해서 어떤 것이 필요하고

    부족한 시간에 무엇부터 배우는 것이 효율적인 것인가"

    라고 하는 질문에 대답하고 있는 상황인 것 같네요.


    기존의 벽돌로 집을 짓지 못하는 사람에게

    단단한 벽돌을 굽는 법부터 배우라고 하는 것은

    아닌 것이겠죠.

    설계도를 읽고 집의 구조를 파악하고 지을 수 있는 사람이 된 후에

    재료들의 품질을 고려하는 것이 맞겠죠.


    다만 제 경우에는 알고리즘과 디자인 패턴이 동떨어진 개념이라고 생각하지 않습니다.

    멀리가기 위해서는 결국 둘 다 제대로 알아야하는 부분이라 생각하고

    이런 디자인 패턴들도 결국 어떤 문제를 해결하기 위해서 나온

    하나의 알고리즘이라고 생각하는 입장에서

    알고리즘을 단순히 경진대회 문제 풀기식으로만 생각되는 부분은 개인적으로 아쉽게 보고 있습니다.

    그렇지만 이러한 문제 풀기로도 논리적 사고력은 늘어난다고는 보고

    이러한 논리력은 결국 다른 개념을 배우는 기초가 된다고 생각합니다.

    하지만 전체적인 기초가 부족하고 시간이 부족하다는 조건이라면

    fender님 말씀처럼 객체지향 패러다임등의

    설계와 철학, 구조적인 부분부터 하라고 말하고 싶네요.

    0
  • sldpal
    126
    2017-02-05 15:55:06

    전에 프로젝트에서 문서 버전별보관 및 변경점 표시 마치 svn버전비교 하는 기능의뢰가 나와서 생각한게 lcs 알고리즘 응용 이었는데 혹시 알고리즘 몰라도된다면 위부분 lcs말고 쉽게해결할방법 있을까요? 있다면 한수배우고싶습니다

    0
  • fender
    14k
    2017-02-05 16:08:24 작성 2017-02-05 16:38:19 수정됨

    sldpal // '어떤 기능 구현을 위해선 반드시 특정 알고리즘을 알아야 한다' -> '그러니 개발을 하려면 무조건 알고리즘 공부는 필수이다' 이렇게 따지자면 객체지향 몰라도 제대로 파악할 수 있는 자바 프레임워크나 라이브러리는 거의 없습니다.

    그럼 반대로 질문하면 자바 개발자가 자신이 사용하는 라이브러리의 구조도 제대로 파악 못하는 건 괜찮은 걸까요?

    알아서 도움 안되는 지식은 없긴 합니다, 시간은 한정적이고 분야는 갈수록 세분화되는 마당에 결국 자기 분야에서 보다 중요하고 보다 우선시 되는 것이 어떤 종류의 지식인지가 문제일 따름일 겁니다.

    문제는 결국 공부할 시간이 한정적이라면, 예컨대 LCS 알고리즘을 모르는 웹 개발자가 될 것이냐, 서블릿 스펙 한 번 안읽어본 웹 개발자가 될 것이냐를 고르는 것입니다.

    그리고 제 주장은 본인의 분야가 자바 개발이라 객체지향을 제대로 이해 못하는 것보단 알고리즘을 모르는 편이 더 낫다는 것이고, 객체 지향을 잘아는 개발자가 알고리즘을 공부하는 거나 알고리즘을 공부한 개발자가 객체지향을 공부하는 거나 시간이 들기는 마찬가지라는 것입니다.

    0
  • 오키도이키오디
    2017-02-05 16:30:58

    당연히 자료구조가 무엇인지 검색해보고 질문을 올렸습니다만.... 책보며 검색해가며 스프링 aop나 인터셉터 등을 적용하면서도 실질적으로 스프링 기술방법만 취득한다는 생각이 들어 okky에서 좀 더 경험이 많으신 분들의 견해가 궁금하여 새벽에 성급하게 올렸습니다.  소중히 내려주신 답변 하나하나 곰곰히 생각해가며 읽어보겠습니다. 감사합니다.

    0
  • frost73
    70
    2017-02-05 19:06:07

    학습의 순서는 자료구조 > 객체지향 > 프레임워크

    실제 프로젝트에서 요구되는 우선순위는  그 역순입니다.

    당장 업무화면 개발해야하는데 MVC 패턴 모르면 곤란하지만 퀵소트 못한다고 뭐라고 할 사람 없습니다.

    단 알고리즘까지는 아니더라고 필요한 요소에 적절한 자료구조를 쓸 수 있는 역량은 필수이고,

    자료구조를 포함한 Core Java에 강할수록 개발자 연차가 올라갈수록 그렇지 않은 개발자와 역량차이가 많이 나게 됩니다.

    그리고 자바의 Collection 프레임웍을 공부하다 보면 결국 자료구조의 구현자체가 객체지향 및 디자인 패턴 그 자체이므로 굳이 구분하기도 힘들지 싶습니다.

    고급개발자로 성장하기 위해선 자료구조 및 객체지향은 필수적인 항목들입니다. 다만 성능위주의 알고리즘에 대한 학습은 우선순위에서 밀린다고 봅니다. 모던 개발의 패러다임 역시 성능보다는 개발생산성 및 유지보수를 위한 재활용성에 있기 때문입니다.


    1
  • 로그인을 하시면 답변을 등록할 수 있습니다.