강의를 하다 보면 개발자들에게 종종 듣는 질문 중의 하나는 "객체 지향적으로 프로그래밍하기 좋은 방법은 뭘까요?"라는 질문을 듣는다.
이런 질문에 대해 지금까지의 내 경험을 바탕으로 정리한 내용이다. 아래 내용은 객체 지향 프로그래밍 연습 뿐만 아니라 단위 테스트, 리팩토링 연습을 하는 것에 더 적합할 수도 있겠다. 어차피 이 부분들이 모두 연결되는 부분이 많기 때문이다.
웹 프로그래밍은 객체 지향 프로그래밍을 연습하거나 단위 테스트, 리팩토링을 연습하기 좋은 코드는 아니라 생각한다. 특히 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
tdd-practice 저는 TDD 연습하면서 위와 같은 방법으로 했는데요. 아직 진행중이긴 하지만, TDD에 익숙해지면서 객체지향을 고민하게 되는 것 같습니다.(4번과 6번 과정에서..) 근데 제일 중요한건 마지막 과정 8번이라고 생각하는데요. 코드를 보면 아시겠지만(TDD 문제) 인터넷에서 쉽게 구할 수 있는 문제(KATA) 위주로 연습을 했습니다. 하지만 비슷한 문제를 찾아 비교보는것 보다는 오프라인에서 여럿이서 같은 문제를 고민하고 비교해보는것이 더 좋은 방법인것 같아요. 그럴 수 없는 상황이라 비슷한 문제를 찾아서 비교해보는 방법으로했던거구요. 제가 연습한 방법을 공유드리는거지 연습 결과 실력 향상에 대한 공유는 아직 이른것 같네요.ㅎㅎ
이 글이 너무 간략한 버전이라 효과적으로 TDD, 리팩토링, OOP를 연습하는 방법은? 글에 좀 더 구체적으로 정리해 봤다.
안녕하세요. 해당 글에서 언급하신 객체지향 생활체조에서 말하는 일급 콜렉션이 무엇을 의미하는지 검색해봐도 나오지 않아서 문의드려봅니다...
안녕하세요 본문에서 볼링 게임 점수판(단, UI는 콘솔) 체스 게임(단, UI는 콘솔) 지뢰 찾기 게임(단, UI는 콘솔) UI는 콘솔로 하라고 하셨는데 꼭 그렇게 해야 할 이유가 있나요? 스윙 기반의 GUI 게임을 만들면서 OOP 연습하려고 하는데 궁금합니다.
@에투 GUI로 해도 괜찮습니다. 단, 구현할 때 UI 관련된 부분과 비지니스 로직을 구현하는 부분을 철저히 분리해서 구현한다면 콘솔 UI로 연습할 때와 똑같이 연습할 수 있습니다.
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.