※ 객체 지향 프로그래밍
오늘은 숫자 6자리를 랜덤으로 뽑아내는 로또 프로그램을 구현하고, 구현된 코드를 객체지향스럽게? 바꾸는 작업을 해보도록 할 것이다.
잠깐 시작하기 전에 하나!
'객체 지향이란 도대체 무엇일까...알 것 같으면서도 모르겠는데?'
자바 프로그래밍 공부를 시작한지 약 4주차가 되어가는 시점에서 최근 내 자신에게 가장 많이 던지는 질문이다.
사실, 기본기도 덜 다져진 뉴비의 입장에서 저런 고민을 한다는 것이 스스로도 투 머치라는 것을 잘 알고 있다.
하지만, 잘 짜여진 코드 or 객체 지향적인 코드를 보고 있노라면, 왠지모르게 뉴비 시절 부터 습관화해야 할 것 같은 느낌이 드는건 사실이다.
물론, 개인적인 욕심이고...
커뮤니티에서도 자바가 익숙해진 다음에 하나씩 고쳐나가는 것이 객체 지향의 필요성을 인지하는데에도 좋다고 하여, 요즘은 크게 신경쓰고 있지 않다.
(혹시 비슷한 뉴비이면서 같은 고민을 하는 분들이 계시다면, 고민하고 책 찾아서 읽어 볼 시간에, 자바 기본기를 더 하는 것이 좋다고 말씀드리고 싶네요!)
1문제 01 - 6자리의 랜덤한 숫자를 출력하는 로또 프로그램 구현
위 코드를 보면, 크게 3가지 틀로 구성되어 있음을 알 수 있다.
① 로또 번호를 생성하여 배열에 저장하는 부분!
② 생성된 로또 번호를 큰 수가 오른쪽으로 가도록 정렬하는 부분!
③ 로또 번호를 출력하는 부분!
rand.nextInt(n); 의 경우, 이번 로또 프로그램을 하면서 처음 알게 됬는데, 의미는 정수 0에서 n-1까지의 숫자 중 아무거나 랜덤으로 뽑아내는 함수이다.
하지만, 로또의 경우는 최소 값이 1이기 때문에 (0 ~ 44) +1 을 하여, 랜덤으로 뽑아내는 범위를 1 ~ 45로 설정할 수 있었다.
결과 값은 다음과 같이 나올 수 있다.
예) Console : 2 3 13 28 36 44 / 14 25 27 31 39 42 / ...
이제 부터는 위 로또 프로그램 코드를 객체 지향적인 모습으로 변화시키도록 하자!
이 과정에서 같이 진행되면 좋은 과정 두 가지가 있는데, 따로 분류해서 소개한 이유는 아직 내가 뉴비이기 때문에,
코드를 짜는 동안에는 아래 과정을 전혀 고려하지 않기 때문이다 ㅠ
(대신, 코드를 짠 후에 고쳐내려가는 탑다운 방식을 자연스럽게 익히는 계기도 되어 되려 이득인 것 같기도?!)
이번에 같이 진행 될 과정은 캡슐화와 함수화이다.
이를 위해서 다음과 같은 순서로 진행하였다.
① main 함수에는 출력 코드만 남김 → 출력 기능만 담당
② 생성 및 정렬 함수는 신규 클래스(func)로 이동 → 연산 관련 기능만 담당
③ 함수의 이름을 기능에 포커스를 맞추어 동사형으로 변경 → 사람이 이해하기 쉽도록
main 함수에는 switch-case 구문을 추가하여, 각 번호를 입력하면 해당 기능이 실행되도록 하였다.
로또 출력 구문은 case 2에 위치하고 있다.
그럼 바뀐 부분들만 찝어서 확인해보자!
① 기존 main 함수에서 '생성'과 '정렬'을 담당 하던 코드가 기능에 맞게 각각 'generate', 'sort'라는 함수명으로 분류되었다.
② lotto_program_func 클래스에는 실제 로또를 만들어내는 기능적인 코드들만 존재하고,
main 클래스에는 출력 기능을 담당하는 코드만 존재하여,
두 클래스가 서로 상속되지 않으며, main 함수만으로는 변수나 함수의 구현 상태를 알 수 없어 은닉화도 잘 이루어져있다.
③ switch-case 구문의 각 case 번호 역시 사람(필자)이 이해하기 쉬운 명칭으로 기능에 맞게 변경하였다.
간단하게 장점을 정리하고 끝내도록 하겠다.
첫 번째에서 알 수 있는 것은, 함수명이 해당 코드의 기능에 가까운 영단어로 되어 있어, 어떤 기능을 하는지 한 눈에 알기 쉽다는 것!
두 번째는 클래스 간의 침범이 없어, 한 곳의 내용이 수정되어도 다른 곳에 영향을 주지 않기 때문에, 유지 보수가 쉽다는 점이다.
오늘은 간단하면서도, 객체 지향이나 캡슐화 등을 비교적 쉽게 연습해 볼 수 있는 예제를 다루어 보았는데,
이 것 조차도 나에게는 쉽지 않았던 것이 현실 ㅠ
연습만이 살길이다!
"백문이 불여일타" 이 말이 진리인듯?
이 블로그는 개인이 혼자 공부해가며 내용을 정리하는 용도로 활용되고 있습니다.
잘못된 지식이나 이론을 게시하지 않도록 주의하고 있습니다.
'Java > Java 실전 코딩!' 카테고리의 다른 글
4. 자바 프로그래밍 구조화 - 상수형 변수의 활용 (0) | 2020.03.11 |
---|---|
3. 반복문 활용 - 짝수의 합 구하기 (0) | 2020.03.04 |
2. 반복문 활용 - 짝수/홀수 구하기 (0) | 2020.03.01 |
1. 변수 선언 (0) | 2020.02.29 |