객체 지향 프로그래밍 연습하기 좋은 방법은?

2016-12-16 17:54

강의를 하다 보면 개발자들에게 종종 듣는 질문 중의 하나는 "객체 지향적으로 프로그래밍하기 좋은 방법은 뭘까요?"라는 질문을 듣는다.

이런 질문에 대해 지금까지의 내 경험을 바탕으로 정리한 내용이다. 아래 내용은 객체 지향 프로그래밍 연습 뿐만 아니라 단위 테스트, 리팩토링 연습을 하는 것에 더 적합할 수도 있겠다. 어차피 이 부분들이 모두 연결되는 부분이 많기 때문이다.

웹 프로그래밍은 객체 지향 프로그래밍을 연습하거나 단위 테스트, 리팩토링을 연습하기 좋은 코드는 아니라 생각한다. 특히 UI와 DB까지 연동하고 있으며, 초반 로직이 복잡하지 않다보니 객체 지향의 맛을 느끼기 힘들다. 이 같은 이유 때문에 다음과 같은 특성을 가지는 프로그램을 구현하면서 연습할 것을 추천한다.

객체 지향 연습을 위한 좋은 프로그램은?

  • 요구사항이 명확한 프로그래밍
  • 약간은 복잡한 로직이 있는 프로그래밍
  • DB 연동이 없도록 연습
  • 특별히 UI에 대한 고려는 하지 않도록 연습

객체 지향 연습을 위한 좋은 예

  • 이번 실습과 같은 HTTP 웹 서버
  • 프레임워크 또는 라이브러리 구현해 보기
  • 볼링 게임 점수판(단, UI는 콘솔)
  • 체스 게임(단, UI는 콘솔)
  • 지뢰 찾기 게임(단, UI는 콘솔)

내가 생각하는 가장 좋은 연습 방법

  • 서로 코드 리뷰해 줄 스터디 그룹(2, 3명이어도 충분)을 만든다.
  • 앞의 추천 애플리케이션 중의 하나를 각자 구현하고, 상호 코드 리뷰한다.
  • 테스트 코드를 만든다. 테스트하기 쉬운 코드를 구현하기 위해 노력한다.
  • 다른 사람의 코드에서 힌트를 얻거나, 피드백 받은 내용을 리팩토링한다.
  • 상호 코드 리뷰 => 리팩토링 과정 반복한다.
  • 몇 개월이 지난 후 똑같은 애플리케이션을 다시 한번 구현한다.

객체 지향 프로그래밍을 위한 좀 더 구체적인 실천 방법(객체지향 생활 체조 총정리)

  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  • 규칙 2: else 예약어를 쓰지 않는다.
  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 규칙 4: 한 줄에 점을 하나만 찍는다.
  • 규칙 5: 줄여쓰지 않는다(축약 금지).
  • 규칙 6: 모든 엔티티를 작게 유지한다.
  • 규칙 7: 2개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  • 규칙 8: 일급 콜렉션을 쓴다.
  • 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다.

이외에도 좋은 연습 방법은 많을 듯하다. 자신만의 연습 방법이 있다면 공유해 주면 좋겠다.

0개의 의견 from FB

5개의 의견 from SLiPP

2016-12-19 10:57

tdd-practice 저는 TDD 연습하면서 위와 같은 방법으로 했는데요. 아직 진행중이긴 하지만, TDD에 익숙해지면서 객체지향을 고민하게 되는 것 같습니다.(4번과 6번 과정에서..) 근데 제일 중요한건 마지막 과정 8번이라고 생각하는데요. 코드를 보면 아시겠지만(TDD 문제) 인터넷에서 쉽게 구할 수 있는 문제(KATA) 위주로 연습을 했습니다. 하지만 비슷한 문제를 찾아 비교보는것 보다는 오프라인에서 여럿이서 같은 문제를 고민하고 비교해보는것이 더 좋은 방법인것 같아요. 그럴 수 없는 상황이라 비슷한 문제를 찾아서 비교해보는 방법으로했던거구요. 제가 연습한 방법을 공유드리는거지 연습 결과 실력 향상에 대한 공유는 아직 이른것 같네요.ㅎㅎ

2017-12-03 23:03

안녕하세요. 해당 글에서 언급하신 객체지향 생활체조에서 말하는 일급 콜렉션이 무엇을 의미하는지 검색해봐도 나오지 않아서 문의드려봅니다...

2018-01-08 12:59

안녕하세요 본문에서 볼링 게임 점수판(단, UI는 콘솔) 체스 게임(단, UI는 콘솔) 지뢰 찾기 게임(단, UI는 콘솔) UI는 콘솔로 하라고 하셨는데 꼭 그렇게 해야 할 이유가 있나요? 스윙 기반의 GUI 게임을 만들면서 OOP 연습하려고 하는데 궁금합니다.

2018-01-08 13:38

@에투 GUI로 해도 괜찮습니다. 단, 구현할 때 UI 관련된 부분과 비지니스 로직을 구현하는 부분을 철저히 분리해서 구현한다면 콘솔 UI로 연습할 때와 똑같이 연습할 수 있습니다.

의견 추가하기