soya
20
2021-11-01 19:57:03 작성 2021-11-01 19:59:16 수정됨
5
239

객체지향, 함수형 프로그래밍에 대해서 질문드립니다.


안녕하세요, 소프트웨어공학과 3학년 학생입니다.

진로를 고민하던 중 swift 개발에 관심이 생겨 공부중입니다.

그런데, iOS 개발은 객체지향으로 해야한다, swift는 함수형 프로그래밍을 지향하는 언어다 하는 이야기들이 있어서, 이것들이 의미하는 바가 무엇인지 궁금합니다.

객체지향에 대해서는 어느정도 배운 것이 있지만, 객체지향으로 코드를 잘 다룰 수 있냐 하면 그건 아니구, 함수형 프로그래밍에 대해서는 "함수를 이용하는것?" 이라는 느낌만 가지고 있습니다.

알고리즘 문제들을 푸는 것은 거의 명령형으로 풀다보니 객체지향이나 함수형 프로그래밍에는 도움이 되지 않는것 같구요.

객체지향? 함수형? 어떻게 공부하면 좋을지, 혹시 좋은 예시 코드들을 어디서 볼 수 있을지에 대해 아시는 고수님들이 계시다면 가련한 이 학생에게 도움을 주시면 감사하겠습니다.ㅠㅠ

0
  • 답변 5

  • fender
    25k
    2021-11-01 20:27:27

    객체지향이든 함수형이든 프로그래밍에서 가장 어려운 주제가 패러다임에 대한 것이라고 생각하기 때문에, 이는 쉽게 단 시간에 익힐 수 있는 내용은 아닌 것 같습니다.

    기본적으로 소프트웨어를 만드는 것은 구현하려는 대상을 추상화, 일반화하고 이를 재사용 가능한 단위로 만들어 이러한 조각을 이어 붙여서 보다 큰 구조를 쌓아 올리는 과정입니다.

    패러다임은 그 쌓는 단위가 무엇인지(예를들어 클래스인지 함수인지)와 어떻게 쌓아 올리는지(예 - GOF 디자인 패턴, 함수 합성)에 대한 답을 제시하는 이론이라고 생각하시면 됩니다.

    학습하는 방법은 아무래도 인터넷에서 다양한 입문 교재 등을 보고 많이 설계 연습을 해보는 것 이상으로는 딱히 좋은 수가 떠오르지 않습니다.

  • siva6
    5k
    2021-11-01 23:53:18

    지금까지 경험으로는 객체지향 방식이 접근하기가 쉽습니다.

    '객체지향의 사실과 오해' 라는 책으로 시작해는게 좋을 것 같습니다.
    (객체지향을 오해?하고 있는 분들을 위한 책이기는 합니다.)

  • termy
    178
    2021-11-02 00:21:27
  • 드루이드
    177
    2021-11-02 00:24:43 작성 2021-11-02 00:27:48 수정됨

    저같은 경우 OOP를 꽤 오랫동안 사용하다 요 몇년간 Functional Programming에 관심이 생겨 어떻게 하면 둘을 잘 융합할 수 있을까에 관심이 많이 생겼습니다. 최근엔 이직 준비중이라 알고리즘 문제들을 100% pure functional한 방법으로 풀려고 시도하고 있는데 생각보다 어렵네요 😂. 이게 명령식(절차식)에 익숙해져서 그런것인지 아니면 망치를 드니 다 못으로 보여서 그런지 아직 분간이 안갑니다. 이부분은 두 패러다임이 어느정도 경지에 이르러야 말할 수 있을 거 같네요. 그리고 실제 코딩인터뷰에서 이런식으로 구현한다면 큰 모험이 될수 있고요.

    OOP는 나와 있는 자료도 많아서 공부를 시작하시는데 큰 어려움은 없을것이라 생각듭니다. 저의 경우 Functional Programming에 관심이 생기게 된 계기가 OOP에서 추구하는 Best Practice 들을 따라하다보니 어느새 Functional Programming에 가까운 방법으로 개발을 하고 있다는 사실을 깨닫고 부터 입니다. 

    OOP책은 다른분이 추천해 주셨고 함수형 프로그래밍을 배우시고 싶으시면 Haskell 입문서나 Functional Programming in Scala 를 추천합니다. 만약 .net 환경에도 익숙하시다면 Concurrency in .NET 도 추천드립니다. 이책은 제목과는 달리 함수형 프로그래밍의 많은 부분들을 담고 있습니다. 아참 그리고 Coursera 에 있는 Functional Programming in Scala 코스도 추천합니다.


  • soya
    20
    2021-11-02 17:58:00

    fender님 말씀에서 패러다임이라는 말이 꽂히네요. 어떤 방식으로 프로그래밍을 할지에 대한 철학과 비슷한 개념이라는 생각이 듭니다. 프로그램을 만들때 어떤 방식이 적합할지, 재사용성이나 협업의 편의에 측면에서 고민해보면서 날잡고 여러 분들이 말씀해주신 책들을 훑어봐야겠네요.  답변해주신 모든 분들 정말 감사드립니다. 많은 도움이 되었습니다.

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