자바지향프로그래밍 실습자료

1주 객체와 클래스

 

프로젝트 이름은 분반에 따라 “java2홍길동”혹은 “java3홍길동”으로 지으시오홍길동은 자신의 이름입니다.

매주 패키지를 새로 만들고 그 안에서 작업을 합니다.

1주에는 프로젝트 아래에 week1 패키지를 만들고 그 아래에서 작업을 합니다.

 

 

1. 강의자료의 NameCatTest 클래스에는 main 메소드만 들어 있습니다. 이렇게 main 메소드만을 위한 클래스를 두면 이해는 쉽지만 쓸데 없이 클래스 수가 많아지기도 합니다. 이를 피하기 위해서 main 메소드를 이미 있는 다른 클래스 속에 집어 넣어도 됩니다. NameCat 클래스에 NameCatTest 클래스의 main 메소드를 복사해 넣으시오. 이제 main 메소드를 갖게 된 NameCat 클래스를 실행해 보시오. (NameCat 클래스 위에서 마우스 오른쪽 버튼 클릭 --> Run As ... --> Java application.)

 

 

2. 이래 지시에 따라 프로그램을 작성하시오.

 

Human이라는 클래스를 작성하시오. 이 클래스는 String 타입 필드 name int 타입 필드 age를 갖도록 하시오. 이 필드들은 모두 private으로 선언하시오. 또 아래와 같은 다섯 개의 메소드를 갖도록 하시오.

 

// name을 설정하는 메소드

public  void  setName(String n)

// name을 반환하는 메소드

public  String  getName()

// age를 설정하는 메소드

public void setAge(int i)

// age를 반환하는 메소드

public int getAge()

// Human 객체의 정보를 문자열로 반환하는 메소드

// 반환하는 문자열 형식 - Human[name=홍길동, age=19]

public String toString()

 

그리고 추가적으로 main 메소드를 작성하시오. main에서는 두 개의 Human 인스턴스들을 만들고 각 인스턴스에게 적당한 이름과 나이를 설정하도록 지시한 후, 다시 각 인스턴스에게 toString 메소드를 호출하여 그 반환된 값들을 화면에 출력합니다.

 

 

 

 

3. TV를 조정하는 리모콘을 흉내내는 Remocon 클래스를 작성하시오. Remocon은 채널 조정과 음량 조정 기능만 있습니다. 채널은 0번부터 3번까지 있고 3번 채널에 있을 때 채널을 올리면 0번 채널로 바뀝니다. 0번 채널에 있을 때 채널을 내리면 3번 채널로 갑니다. 음량은 0에서 3까지 조정할 수 있습니다. 음량이 3일 때 음량을 더 올리려고 시도해도 3 상태가 그대로 유지됩니다. 음량이 0일 때 음량을 더 내리려고 해도 0 상태가 유지됩니다.

 

, Remocon 클래스를 테스트하는 RemoconTest 클래스를 작성하고 이 곳에 main 메소드를 두어 아래와 같이 작동하도록 하시오.

 

Remocon 클래스 뼈대는 아래와 같습니다. 이 클래스의 인스턴스들을 만들면 각 인스턴스는 각자의 volume, channel 메모리를 가지고 각자의 음량과 채널을 이 메모리에 기억합니다. Remocon 인스턴스에는 아래 그림에 있는 다섯 개의 메소드를 호출할 수 있습니다. 이 클래스에서 음량, 채널의 최대값은 final, 즉 상수로 선언되어 있습니다.

 

 

채널이나 음량을 변경한 후, 새 상태를 화면에 보여주기 위해서는, 채널이나 음량을 변경하는 네 개의 메소드(volumeUP, volumeDown, channelUp, channelDown)를 호출한 후 display 메소드를 호출해야 합니다.

 

 

RemoconTest 클래스의 main 메소드는 아래와 같이 구현할 수 있습니다.

 

 

 

위 프로그램을 작성할 때 주석을 위에 있는 그대로 입력할 필요는 없지만 현재 주석이 있는 모든 위치에 현재와 비슷한 정도의 상세함을 유지하도록 주석을 달아야 합니다.

 

 

힌트

 

참고:

    아래 선언문은 최대 음량을 의미하는 MAX_VOLUME의 값이 3이라고 정해 줍니다.

public final static int MAX_VOLUME = 3;                     // 최고 음량

이 값은 이 클래스 뿐 아니라 다른 클래스에서도 참고할 필요가 있을 수 있으므로 public으로 선언했습니다.

또 한 번 값이 정해지면 바꿀 수 없도록 (즉 상수로) 만들기 위해 final로 선언했습니다.

static 선언은 MAX_VOLUME 값이 각각의 개별 인스턴스마다 존재하는 대신 Remocon 클래스 전체적으로 하나만 존재하도록 해 줍니다.

 

4. 아래와 같은 뼈대를 갖는 Counter 클래스를 작성하고 이 클래스의 작동을 테스트하는 main 메소드를 구현하시오. 강의 중 연습문제로 작성한 Counter 클래스를 수정해 작성하시오.

 

 

위 코드에서 마지막 메소드인 isInputValid 메소드는 외부의 사용자를 위한 메소드가 아니고 클래스 내부적으로 필요해서 만든 보조적인 메소드(helper method)입니다. 즉 외부 사용자를 위한 메소드가 아닙니다. 그래서 이 메소드는 private으로 선언했습니다. 주어진 수가 유효한 수가 아니면 false, 그렇지 않으면 true를 반환합니다.

 

참고:

private 메소드인 isInputValid 메소드에 주석을 달 때도 javadoc에서 통용되는 주석 형식을 따르지 않고 프로그래머의 편의에 따라 주석을 달았습니다. /** 주석 */ 형식의 주석은 api 문서에 나타나는 반면 /* 주석 */ 형태의 주석은 api 문서에 나타나지 않습니다. 위 프로그램에서 두 가지 형태의 주석이 다른 색깔로 보여짐에 유의하세요.

 

아래는 main 메소드 예입니다.

 

 

main 메소드를 실행한 결과는 아래와 같습니다.

 

 

 

5. 4번에서 작성한 Counter 클래스에서는 최대 수가 상수로 고정되어 있습니다. 이렇게 하면 10까지 세는 카운터를 이용하다가 12까지 세는 카운터가 필요하면 소스 코드를 수정하고 다시 컴파일해야 합니다. 다시 컴파일하는 게 개발 단계에서는 별 일 아니지만 실제로 현장에 설치되어 운영되고 있는 상황에서는 별 (심각한) 일이 됩니다. 이 문제를 해결하려면 최대값을 상수로 선언하는 대신 변수로 선언하고 이 변수를 임의로 설정하는 public 메소드를 두면 됩니다.

 

상수 MAX 대신 변수 max를 선언하고 setMax 메소드를 추가하시오. 클래스 이름은 Counter2로 지으시오. 또 두 개의 Counter2 인스턴스를 구성한 후 하나는 0부터 12까지 세도록 하고 다른 하나는 0부터 60까지 세도록 설정한 후 이들에게 적절한 메소드들을 호출하여 기능을 테스트하는 main 메소드를 Counter2 안에 작성해 넣으시오.

 

 

<프로그램 예시>

 

 

<예시 프로그램>의 실행 결과

 

 

구성자 ==================================

 

6. 2번 문제에서 작성한 Human 클래스에 name age를 파라미터로 갖는 구성자를 넣고 이를 활용하도록 main 메소드를 수정하시오. 클래스 이름은 Human2로 하시오.

 

 

7. 이름과 나이를 필드로 가지며 세 개의 구성자와 여러 메소드를 갖는 아래 그림의 NameCat2 클래스를 완성하시오.

 

 

이 프로그램을 실행하면 아래와 같은 출력이 나와야 합니다. main 메소드에서는 세 마리의 NameCat2들을 구성하고 이들에게 적절한 메소드를 호출하여 각각의 필드들을 설정한 후 이 세 마리를 print했습니다. 객체에 print 메소드를 호출하면 그 객체에 toString 메소드가 호출되고 그 반환값이 출력됩니다. 세 마리의 NameCat2들을 구성할 때 다중정의(overloading)된 세 가지의 구성자를 이용했습니다.

 

 

8. 5번 문제의 Counter2 클래스를 Counter3로 복사하고 Counter3에 구성자를 하나 추가하시오. 이 구성자는 Counter3 인스턴스가 만들어질 때 최대값을 지정해 줍니다. 이렇게 하면 main에서 Counter3 인스턴스들을 구성한 후 최대값을 설정하는 메소드를 호출해 주지 않아도 됩니다. 프로그램 실행 결과는 위 5번 문제와 동일합니다.

 

 

수업시간에 연습문제로 작성한 프로그램과 위 실습과제에 따라 작성한 프로그램을 모두 포함하여 제출하시오.

 

.