Review
KOSTA 교육 7일차(객체지향 , 생성자, 배열)
Tigger
2020. 6. 20. 21:22
18.11.6(화)
배운 내용
- 객체지향(OOP)
- 생성자(Constructor)
- 배열(Array)
오늘은 어제에 이어 객체지향에 대해 조금 더 파고드는 시간이었다. 대표적인 예제인 ‘전화번호부'를 만들어보며 객체지향을 이해해보자.
예제로 들어가기 전 다시 한 번 객체지향과 생성자의 개념을 복습하고 시작하면 좋을 것 같다.
1. 객체지향(OOP)
객체지향은?
서로간의 상호작용을 하는 현상이며 ‘상태’와 ‘행동’으로 구분되어진다.
- 객체지향은 ‘확장성’이 있다.
- 시대의 흐름으로 인하여 객체지향언어의 필요성을 느껴 발전하였다.
- 서로간의 상호작용하는 객체들로 이루어진 프로그램이다.
객체지향의 특징
- 객체를 만들기 위해선 class가 필요하다.
- class는 객체의 모양을 갖추고 있어야 한다.
- class는 객체를 무제한 생성할 수 있다.
- new 연산자를 통하여 객체를 생성한다.
2.생성자(Constructor)
생성자는?
- new 연산자를 호출하였을 때 자동으로 생성하는 것
- 객체를 초기화 하는데 사용한다.
- 객체를 생성할 수 있는 가이드라인이 된다.
생성자의 특징
- 생성자는 return, void를 사용하지 않는다.
- 생성자는 자신의 class이름과 반드시 동일해야한다.
- public class이름(){}; 을 사용하여 default 오류를 항상 대비한다.
3. 객체 내 배열
객체 내 배열은?
객체 메소드 내에 배열을 생성하는 것을 말한다.
- Bank 클래스를 보면 생성자를 생성한 것을 알 수 있다.
- 여기서 Main메소드로 에서 생성자를 배열을 생성할 수 있는데 생성 방법은 다음과 같다
- 생성된 class 이름 arr[] = { new 생성할 클래스 이름 ( 파라미터 값1, 파라미터 값2 … )};
- 이렇게 생성된 배열은 for문을 사용하여 출력해준다.
- Main클래스에서는 객체를 출력하여 출력하는 역할을 한다. 객체는 class로 선언하였고 while(true)문으로 참 거짓을 판별한다.
- 출력할 요소들을 선언하고 switch문을 이용하여 각 요소별 메소드를 호출시킨다.
- 마지막 6번은 종료를 위하여 return 값을 준다.
- PhoneInfo 클래스에선 생성자에 선언될 파라미터 값을 선정한다.
- 이 변수는 클래스의 주제에 해당되는 변수들을 선정한다.
예를들어 현재 예제의 전화번호부 같은 경우 (이름, 전화번호, 생년월일)로 정하였기 때문에 이 세가지의 변수가 필요한 것이다. - 오류를 막기 위해 default 생성을 해준다.
- 해당 변수의 생성자를 생성한다. 이 생성자는 나중에 출력 할 때 사용된다.
- 이 생성자들을 출력해주기 위하여 새로운 show메소드를 사용하여 출력을 해준다.
- 먼저 PhoneInfo클래스에 대한 배열을 선언한다. 그래야 배열을 Manager 클래스에서도 사용이 가능하다.
- 추가 메소드를 선언하고 입력받을 값을 선언한 후에 배열에 count++를 선언하고 추가 된 인원 수 만큼 배열에 추가될 수 있도록 new로 새로운 연산자를 선언한다.
예시에 대한 이해가 쉽게 count의 값은 3이라고 가정을 하겠다. - 전체 출력 메소드를 선언하고 i가 0, i가 count보다 작을 때 배열의 주소값에 할당된 값을 실행한다. 총 3명을 실행했으니 출력도 마찬가지로 3명이 나와야 하므로 i는 0, 1, 2세 주소값이 출력된다.
- 검색 메소드를 선언하고 검색할 이름을 입력한다.
여기서 index값을 선언하는데 -1로 선언한다. 이유는 i와 쉽게 구별시키기 위해 음수로 선정하는 것이다. for문을 사용하여 i가 count-1보다 작거나 같을 때 만약 이름이 동일하다면 index는 i가 된다. 즉, 동일한 값이 된다는 뜻이다. 만족이 된다면 break로 빠져나온다.
이 때 없는 경우도 생각해야 하는데 if문을 사용하여 -1이 아닐 경우 존재하지 않는다고 출력하고 출력이 안된다면 있다는 것으로 show()메소드를 배열index로 출력한다. - 변경 메소드를 선언하고 변경할 이름을 입력한다.
검색과 동일하게 index를 선언하고 for문을 이용하여 이름이 동일하다면 번호를 바꿀 수 있도록 선언한다. 입력하면 배열을 이용하여 입력값이 적용되게 하고 break로 끝낸다. 대상이 없는 경우는 검색과 동일하며 대상이 있다면 수정 완료를 출력한다. - 삭제 메소드를 선언하고 삭제할 이름을 입력한다.
동일하게 index를 선언하고 for문을 사용하여 이름이 동일한지 확인한다.
만약 동일하면 break로 반복을 끝내고 if문으로 index값이 -1이 아니라면 for문을 이용하여 i와 값을 동일하게 하고 count 3보다 작을 때 만약 i가 10이 아니라면 arr[i]에 arr[i+1]를 스왑한다.
그리고 arr[count-1] 주소값이 삭제된 값이 되므로 null을 선언하여 빈 공간임을 선언하고 count 증감을 통해 빠지면 하나씩 줄어들게 선언한다.
오늘 교육 간 느낀 점
하루종일 답답하고 이해가 안가는 하루였다. 처음부터 예제를 풀이했는데 전날 복습을 열심히 했음에도 불구하고 오랜 숙달이 되지 않아서인지 다시 새로운 느낌이 들었다. 더군다나 비전공자가 제일 힘들어한다던 배열을 함께 적용해서인지 이해는 배로 힘들었다.
하지만 예제 하나를 분석하고 풀이해보면서 객체지향과 배열의 관계가 어떻게 이루어져있는지, 어떤 작용을 하는지 알아내면서 또 하나의 지식을 얻었다.
하지만 이론과 분석만 한다고 코딩을 할 수 있는 것은 아니다. 생각한 것을 구현하고, 풀이하면서 직접 코딩 해봐야만 확실히 자기 것이 되었다고 할 수 있다.
사실 코딩을 할 수 있는 절대적인 시간이 많이 부족하지만 남은 자투리시간, 수업 외 시간에 더 노력해서 조금이라도 더 나은 내가 되기 위해 도전할 것이다.