리뷰

“설계가 뭐라고 생각 하십니까?🏛” POCU 개체지향 프로그래밍 및 설계 OOP(COMP2500) 후기

Ja_Hwang 2022. 8. 21. 22:08

막강한 캡슐화!!

 설계란 무엇일까요?

여러분은 프로그램 설계가 뭐라고 생각하시나요? 제 생각에는요... 음...

 

 

이번 COMP2500을 수강하고 설계에 대해 생각해 보다 좋은 비유인 것 같아 가져와 봤습니다.🤣

그럼

개체지향 프로그래밍 및 설계 COMP2500

후기를 시작하겠습니다.

 


 

 이런분들은 수강에 주의해주세요!

수강을 고민하시는 분들에게 도움이 되고자 수강 전 몇 가지 참고 사항을 말씀드리겠습니다.

 

  • 프로그래밍을 처음 배우시는 분
    • 이 과목의 선수과목으로는 COMP1500이 있습니다. 만약 프로그래밍 언어 때문에 이 과목으로 입문하시려는 분은 아무래도 개체지향 및 설계 과목이기 때문에 주의해 주셔야 할 듯합니다. 개인적인 추천은 comp1500 부터 순서대로 따라가는 게 가장 좋은 것 같습니다. 다른 과목 후기가 궁금하시다면 아래 후기들을 참고해 주세요.
 

"가장 필요하지만 가장 몰랐던..." POCU 소프트웨어 공학용 수학(COMP1000) 후기

COMP1000 소프트웨어 공학용 수학  소개 저는 202105 [COMP1500] 실무 프로그래밍 입문(이하 COMP1500)을 시작으로 현재 [COMP1000] 소프트웨어 공학용 수학 (이하 COMP1000)까지 수강한 학생입니다. 이 후기는.

ja-hwang.tistory.com

 

"마법은 없다💫" POCU C 언매니지드 프로그래밍(COMP 2200) 후기

소개 "프로그래밍 입문(COMP1500)" 부터 이번 "언매니지드 프로그래밍(COMP 2200)" 까지 총 3과목을 진행 하면서 가장 많이 배웠고 재밌었던 과목이다. 이전 과목들은 생략하더라도 이 과목 만큼은 필

ja-hwang.tistory.com

 

  • Java 언어가 배우고 싶으신 분
    • COMP2500에서는 자바의 문법에 대해서는 1주 만에 거의 전부 나갑니다. 그만큼 선수과목에서 배웠던 언어들과 어떤 부분이 다른지 정도만 확인한다고 생각하시면 됩니다.

 

  • 굉장히 불친절
    • 소제목이 어그로가 끌릴 거라 생각되는데요.😅 여기서 말하는 불친절은 POCU가 지향하는 교육 방향을 말합니다. 오해가 있기 전에 더 자세히 말씀드리면 POCU에서는 학생이 어떤 질문을 했을 때 수강생들과의 대화를 통해 답을 찾거나, 조교 혹은 직원분들이 답을 주실 때에도 최대한 스스로 답을 찾을 수 있도록 유도하는 방식입니다. 게임의 자유도가 높을수록 불친절하게 느껴지죠? POCU는 그런 자유도 높은 게임과 유사하다고 생각합니다. 배운 내용으로 스스로 이런저런 테스트를 해보고 찾아가는 방식을 지향하기 때문에 이런 방식에 익숙하지 않으신 분은 어렵게 느껴지실 수도 있을 것 같습니다.

 


 

 강의 내용에 관하여

 

개체 vs 객체 (Object-Oriented-Programming)

  • 개체
    • "어떤 종의 개체 수가 급증했다."
  • 객체
    • 철학: 의사나 행위가 미치는 대상.
    • 언어: 문장 내에서 동사의 행위가 미치는 대상.
  • 이미 널리 쓰이는 단어와 달리 POCU에서는 "개체지향" 이라는 단어를 사용하는데요. 포프님의 어떤 영상에서 OOP를 직역하면 물체 중심 프로그래밍이라고 할 수 있을 것 같다고 말씀하신 적이 있습니다. 그렇기 때문에 번역을 개체로 하는게 좀 더 올바르고 사실 "개체" "객체" 별로 차이가 안나기 때문에 슬쩍 발음해도 대화하는데 무리가 없다고 하셨습니다. 나중에 업계에서 어떤 사람이 "개체"라고 발음한다면 POCU 출신을 예상해 볼 수 있겠네요.😊

 

개체지향은 주관적

  • 개체지향은 사람이 물체를 보는 방식으로 프로그래밍 하는 프로그래밍 패러다임 중 하나입니다. 물체의 상태와 동작을 합쳐 클래스로 만들고 그 클래스를 통해 개체를 만들어 개체들끼리의 상호작용을 통해 프로그램이 작동하는 방식입니다. 
  • 위에서 말한 것처럼 개체지향의 "사람이 물체를 보는 방식" 개개인이 물체를 보는 방식은 다 다르기 때문에 개체지향은 주관적일 수밖에 없습니다.

 

순수 개체지향!

 

객관안 ON

  • 어떤 주관적인 내용에 대해서 배우면 어떤 내용이 다수설이고 소수설에는 어떤 주장이 있고 그 주장들이 왜 나왔는지에 대해도 배울 수 있었습니다.
  • 어떤 내용이 주류인지 왜 배울까요?
    • 사실 어떤 OOP에 관한 내용을 봐도 이렇게 업계에서의 다수설과 소수설에 관한 내용은 얘기하지 않습니다.
    • 위에서 말씀드렸다시피 OOP 주관적이기 때문에 여러 의견들이 있습니다. 그런 여러 의견들 중 올바른 내용만을 배웠을 때 다른 주장들에 내 주장이 흔들릴 수 있습니다. 소수설에 주장이 왜 등장했고 어떤 내용으로 그런 주장을 하는지에 대해 알려주고 그 주장에 대해 논리적으로 반박해주기 때문에 주관성이 강한 분야에서 많은 사람들이 동의하는 그나마 객관적인 기준을 가질 수 있었습니다. 대부분 우리가 배울 수 있는 내용은 다수설에 관한 내용이었지만 소수설에서도 괜찮은 내용은 순화해서 가져와 사용하는 것도 있었습니다.

 

객관안 ON

 

필요한 만큼만 추상화

  • 다른 어떤 OOP 강의들의 커리큘럼을 보면 굉장히 이른 시기에 상속, 오버라이딩에 관한 내용이 나옵니다. 상속은 여러 클래스들의 공통되는 부분을 뽑아 부모 클래스로 만들어 추상화를 통해 코드의 재사용성을 높일 수 있습니다. 하지만 상속이 필요 없는 부분도 분명히 있죠. POCU에서는 중간 고사 정도 돼서야 상속에 관한 내용이 나옵니다. 상속 없이 충분히 클래스를 사용해 볼 수 있었고 상속이 필요한 실습/과제를 통해 상속에 장점을 더 잘 느낄 수 있었습니다.

 

추상화

디자인패턴 & SOLID 설계 “정신”

  • OOP에서 빠지지 않는 내용인 디자인 패턴과 SOLID가 있는데요. POCU에서는 이 내용들에 대해 비판적입니다. 아예 안 가르치는 것은 아니지만 SOLID 설계 원칙 같은 경우 굉장히 파격적으로 SOLID 설계 "정신"이라고 부릅니다.
  • 디자인 패턴이란 소프트웨어 설계하는데 생길 수 있는 문제의 해결 방법을 정리해 둔 것입니다. POCU가 디자인 패턴에 비판적인 이유는 그저 패턴 몇 개만 외우면 전문가처럼 설계할 수 있다는 착각을 줄 수 있고, 굳이 필요 없는 곳에 패턴을 적용해 프로그램을 복잡하게 만드는 경우가 빈번하기 때문이라 말합니다.
  • SOLID 설계 정신은 보통 SOLID 설계 원칙이라고 부르는 것을 굉장히 파격적으로 "정신"이라고 부릅니다. 그렇게 부르는 이유는 SOLID 원칙이라고 하는 것이 모든 설계에 적용될 수 없고 지키면 도움이 될 수 있는 정도이기 때문입니다. 
  • COMP2500이 기존의 OOP 강의와 다른 점은 프로그램을 설계하는 데 있어 어떤 스킬 몇 개 사용하는 것 만으로 쉽게 할 수 있는 게 아니라는 것을 분명히 알려줬고 결국 내가 여러 시스템을 직접 만들어 보고 잘 만들어진 시스템은 어떻게 만들었는지 비교해보는 방법이 유일하다고 했습니다. 딱 봐도 쉬워 보이지 않죠? 하지만 이런저런 스킬 알려주는 것보다 어떻게 하면 기본기를 제대로 잡을 수 있고 처음에는 조금 느리더라도 결국에 성장하는 게 어떤 건지 배울 수 있었습니다.

 

바위처럼 단단하게

  • 이 외에도 다형성, 인터페이스(순수 추상 클래스), 예외 처리 방법에 대해서도 배웠고 역시나 이 부분에 대해서도 어떤 소수설이 있는지도 배웠습니다. 이 부분들에서는 더욱 약장수들이 많았습니다.
  • 약장수가 왜 많을까?
    • 소프트웨어 설계가 어렵고 내용이 추상적임 ⇒ 이렇게만 하면 다 됨(silver bullet) ⇒ 넘어 감
    • 이런 달콤한 말들에 하나하나 논리적으로 반박함
  • 사실 딱 어떤 원칙으로 해결하기엔 우리의 문제가 너무 다양합니다. 이런 태도 덕분에 개인적으로 OOP에 관한 내용을 볼 때 비판적인 사고에 도움이 됐습니다.

 


 

 아쉬웠던 점

  • 영상에 잘못된 내용이 있었습니다. 또 그 내용이 중간고사 시험 치는 주에 수강생으로부터 발견되었고 제 기억으로는 3~4문제 정도 그 내용에 관해 문제로 나왔습니다. 다행히 잘못된 내용 때문에 문제를 틀린 학생은 없었던 것 같지만 COMP2500 과목이 나온 지 꽤 시간이 지난 과목임에도 이런 문제가 있었던 점에 조금 의아했습니다.

 

 끝으로

  • 이번 과목 전체를 관통하는 문장은 영상에서도 나오는 “No Silver Bullet.”이라 생각합니다. 결국 설계 능력은 개체지향을 사용하는 올바른 방법과 여러 시도를 통해 성장할 수 있다는 것을 알게 되었습니다. 이 과목을 통해 개체지향의 올바른 사용법을 배울 수 있었고, 설계는 쉽지 않겠지만 여러 경험을 해봐야 한다는 사실을 솔직하게 알려준 POCU에 감사합니다.
  • 저는 COMP1500부터 지금까지 총 4과목을 수강했습니다. 문득 COMP1500에서 언어의 분류 중 개체지향을 배웠던 기억이나 그간 POCU 생활(?)을 통해 많이 성장했다는 생각에 기쁩니다. 저는 다음 과목인 [COMP3200]C++ 언메니지드 프로그래밍을 향해 나아갈 생각입니다. 이 글이 POCU를 선택을 고려하는 분들께 도움이 됐길 바랍니다. 긴 글 읽어 주셔서 감사합니다. 🙂🙏🏻