32 Chapter 6 객체지향프로그래밍 I Object-oriented Programming I
33 [ 연습문제 ] [6-1] 다음과같은멤버변수를갖는 SutdaCard클래스를정의하시오. 타입 변수명 설명 int num 카드의숫자.(1~10사이의정수 ) boolean iskwang 광 ( 光 ) 이면 true, 아니면 false [6-2] 문제 6-1 에서정의한 StudaCard 클래스에두개의생성자와 info() 를추가해서실행 결과와같은결과를얻도록하시오. [ 연습문제 ]/ch6/exercise6_2.java class Exercise6_2 { public static void main(string args[]) { SutdaCard card1 = new SutdaCard(3, false); SutdaCard card2 = new SutdaCard(); System.out.println(card1.info()); System.out.println(card2.info()); class SutdaCard { (1) 알맞은코드를넣어완성하시오. 3 1K [6-3] 다음과같은멤버변수를갖는 Student 클래스를정의하시오. 타입 변수명 설명 String name 학생이름 int ban 반 int no 번호 int kor 국어점수 int eng 영어점수 int math 수학점수
34 [6-4] 문제 6-3 에서정의한 Student 클래스에다음과같이정의된두개의메서드 gettotal() 과 getaverage() 를추가하시오. 1. 메서드명 : gettotal 기능 : 국어 (kor), 영어 (eng), 수학 (math) 의점수를모두더해서반환한다. 반환타입 : int 매개변수 : 없음 2. 메서드명 : getaverage 기능 : 총점 ( 국어점수 + 영어점수 + 수학점수 ) 을과목수로나눈평균을구한다. 소수점둘째자리에서반올림할것. 반환타입 : float 매개변수 : 없음 [ 연습문제 ]/ch6/exercise6_4.java class Exercise6_4 { public static void main(string args[]) { Student s = new Student(); s.name = " 홍길동 "; s.ban = 1; s.no = 1; s.kor = 100; s.eng = 60; s.math = 76; System.out.println(" 이름 :"+s.name); System.out.println(" 총점 :"+s.gettotal()); System.out.println(" 평균 :"+s.getaverage()); class Student { (1) 알맞은코드를넣어완성하시오. 이름 : 홍길동총점 :236 평균 :78.7
35 [6-5] 다음과같은실행결과를얻도록 Student 클래스에생성자와 info() 를추가하시오. [ 연습문제 ]/ch6/exercise6_5.java class Exercise6_5 { public static void main(string args[]) { Student s = new Student(" 홍길동 ",1,1,100,60,76); System.out.println(s.info()); class Student { (1) 알맞은코드를넣어완성하시오. 홍길동,1,1,100,60,76,236,78.7 [6-6] 두점의거리를계산하는 getdistance() 를완성하시오. [Hint] 제곱근계산은 Math.sqrt(double a) 를사용하면된다. [ 연습문제 ]/ch6/exercise6_6.java class Exercise6_6 { // 두점 (x,y) 와 (x1,y1) 간의거리를구한다. static double getdistance(int x, int y, int x1, int y1) { (1) 알맞은코드를넣어완성하시오. public static void main(string args[]) { System.out.println(getDistance(1,1,2,2)); 1.4142135623730951
36 [6-7] 문제 6-6 에서작성한클래스메서드 getdistance() 를 MyPoint 클래스의인스턴스메서 드로정의하시오. [ 연습문제 ]/ch6/exercise6_7.java class MyPoint { int x; int y; MyPoint(int x, int y) { this.x = x; this.y = y; (1) 인스턴스메서드 getdistance 를작성하시오. class Exercise6_7 { public static void main(string args[]) { MyPoint p = new MyPoint(1,1); // p(1,1) 과 (2,2) 의거리를구한다. System.out.println(p.getDistance(2,2)); 1.4142135623730951 [6-8] 다음의코드에정의된변수들을종류별로구분해서적으시오. class PlayingCard { int kind; int num; static int width; static int height; PlayingCard(int k, int n) { kind = k; num = n; public static void main(string args[]) { PlayingCard card = new PlayingCard(1,1); - 클래스변수 (static 변수 ) : - 인스턴스변수 : - 지역변수 :
37 [6-9] 다음은컴퓨터게임의병사 (marine) 를클래스로정의한것이다. 이클래스의멤버 중에 static 을붙여야하는것은어떤것들이고그이유는무엇인가? ( 단, 모든병사의공격력과방어력은같아야한다.) class Marine { int x=0, y=0; // Marine의위치좌표 (x,y) int hp = 60; // 현재체력 int weapon = 6; // 공격력 int armor = 0; // 방어력 void weaponup() { weapon++; void armorup() { armor++; void move(int x, int y) { this.x = x; this.y = y; [6-10] 다음중생성자에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 모든생성자의이름은클래스의이름과동일해야한다. b. 생성자는객체를생성하기위한것이다. c. 클래스에는생성자가반드시하나이상있어야한다. d. 생성자가없는클래스는컴파일러가기본생성자를추가한다. e. 생성자는오버로딩할수없다. [6-11] 다음중 this에대한설명으로맞지않은것은? ( 모두고르시오 ) a. 객체자신을가리키는참조변수이다. b. 클래스내에서라면어디서든사용할수있다. c. 지역변수와인스턴스변수를구별할때사용한다. d. 클래스메서드내에서는사용할수없다. [6-12] 다음중오버로딩이성립하기위한조건이아닌것은? ( 모두고르시오 ) a. 메서드의이름이같아야한다. b. 매개변수의개수나타입이달라야한다. c. 리턴타입이달라야한다. d. 매개변수의이름이달라야한다.
38 [6-13] 다음중아래의 add 메서드를올바르게오버로딩한것은? ( 모두고르시오 ) long add(int a, int b) { return a+b; a. long add(int x, int y) { return x+y; b. long add(long a, long b) { return a+b; c. int add(byte a, byte b) { return a+b; d. int add(long a, int b) { return (int)(a+b); [6-14] 다음중초기화에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 멤버변수는자동초기화되므로초기화하지않고도값을참조할수있다. b. 지역변수는사용하기전에반드시초기화해야한다. c. 초기화블럭보다생성자가먼저수행된다. d. 명시적초기화를제일우선적으로고려해야한다. e. 클래스변수보다인스턴스변수가먼저초기화된다. [6-15] 다음중인스턴스변수의초기화순서가올바른것은? a. 기본값-명시적초기화-초기화블럭-생성자 b. 기본값-명시적초기화-생성자-초기화블럭 c. 기본값-초기화블럭-명시적초기화-생성자 d. 기본값-초기화블럭-생성자-명시적초기화 [6-16] 다음중지역변수에대한설명으로옳지않은것은? ( 모두고르시오 ) a. 자동초기화되므로별도의초기화가필요없다. b. 지역변수가선언된메서드가종료되면지역변수도함께소멸된다. c. 매서드의매개변수로선언된변수도지역변수이다. d. 클래스변수나인스턴스변수보다메모리부담이적다. e. 힙 (heap) 영역에생성되며가비지컬렉터에의해소멸된다. [6-17] 호출스택이다음과같은상황일때옳지않은설명은? ( 모두고르시오 ) println method1 method2 main a. 제일먼저호출스택에저장된것은 main 메서드이다. b. println 메서드를제외한나머지메서드들은모두종료된상태이다. c. method2 메서드를호출한것은 main 메서드이다. d. println 메서드가종료되면 method1 메서드가수행을재개한다. e. main-method2-method1-println 의순서로호출되었다. f. 현재실행중인메서드는 println 뿐이다.
39 [6-18] 다음의코드를컴파일하면에러가발생한다. 컴파일에러가발생하는라인과그 이유를설명하시오. class MemberCall { int iv = 10; static int cv = 20; int iv2 = cv; static int cv2 = iv; // 라인 A static void staticmethod1() { System.out.println(cv); System.out.println(iv); // 라인 B void instancemethod1() { System.out.println(cv); System.out.println(iv); // 라인 C static void staticmethod2() { staticmethod1(); instancemethod1(); // 라인 D void instancemethod2() { staticmethod1(); // 라인 E instancemethod1(); [6-19] 다음코드의실행결과를예측하여적으시오. [ 연습문제 ]/ch6/exercise6_19.java class Exercise6_19 { public static void change(string str) { str += "456"; public static void main(string[] args) { String str = "ABC123"; System.out.println(str); change(str); System.out.println("After change:"+str);
40 [6-20] 다음과같이정의된메서드를작성하고테스트하시오. [ 주의 ] Math.random() 을사용하는경우실행결과와다를수있음. 메서드명 : shuffle 기능 : 주어진배열에담긴값의위치를바꾸는작업을반복하여뒤섞이게한다. 처리한배열을반환한다. 반환타입 : int[] 매개변수 : int[] arr - 정수값이담긴배열 [ 연습문제 ]/ch6/exercise6_20.java class Exercise6_20 { (1) shuffle 메서드를작성하시오. public static void main(string[] args) { int[] original = {1,2,3,4,5,6,7,8,9; System.out.println(java.util.Arrays.toString(original)); int[] result = shuffle(original); System.out.println(java.util.Arrays.toString(result)); [1, 2, 3, 4, 5, 6, 7, 8, 9] [4, 6, 8, 3, 2, 9, 7, 1, 5] [6-21] Tv 클래스를주어진로직대로완성하시오. 완성한후에실행해서주어진실행결과 와일치하는지확인하라. [ 참고 ] 코드를단순히하기위해서유효성검사는로직에서제외했다. [ 연습문제 ]/ch6/exercise6_21.java class MyTv { boolean ispoweron; int channel; int volume; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1; void turnonoff() { // (1) ispoweron 의값이 true 면 false 로, false 면 true 로바꾼다.
41 void volumeup() { // (2) volume 의값이 MAX_VOLUME 보다작을때만값을 1 증가시킨다. void volumedown() { // (3) volume 의값이 MIN_VOLUME 보다클때만값을 1 감소시킨다. void channelup() { // (4) channel 의값을 1 증가시킨다. // 만일 channel 이 MAX_CHANNEL 이면, channel 의값을 MIN_CHANNEL 로바꾼다. void channeldown() { // (5) channel 의값을 1 감소시킨다. // 만일 channel 이 MIN_CHANNEL 이면, channel 의값을 MAX_CHANNEL 로바꾼다. // class MyTv class Exercise6_21 { public static void main(string args[]) { MyTv t = new MyTv(); t.channel = 100; t.volume = 0; System.out.println("CH:"+t.channel+", VOL:"+ t.volume); t.channeldown(); t.volumedown(); System.out.println("CH:"+t.channel+", VOL:"+ t.volume); t.volume = 100; t.channelup(); t.volumeup(); System.out.println("CH:"+t.channel+", VOL:"+ t.volume); CH:100, VOL:0 CH:99, VOL:0 CH:100, VOL:100
42 [6-22] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : isnumber 기능 : 주어진문자열이모두숫자로만이루어져있는지확인한다. 모두숫자로만이루어져있으면 true 를반환하고, 그렇지않으면 false 를반환한다. 만일주어진문자열이 null 이거나빈문자열 이라면 false 를반환한다. 반환타입 : boolean 매개변수 : String str - 검사할문자열 [Hint] String 클래스의 charat(int i) 메서드를사용하면문자열의 i 번째위치한문자를얻을수있다. [ 연습문제 ]/ch6/exercise6_22.java class Exercise6_22 { (1) isnumber 메서드를작성하시오. public static void main(string[] args) { String str = "123"; System.out.println(str+" 는숫자입니까? "+isnumber(str)); str = "1234o"; System.out.println(str+" 는숫자입니까? "+isnumber(str)); 123 는숫자입니까? true 1234o 는숫자입니까? false [6-23] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : max 기능 : 주어진 int형배열의값중에서제일큰값을반환한다. 만일주어진배열이 null이거나크기가 0인경우, -999999를반환한다. 반환타입 : int 매개변수 : int[] arr - 최대값을구할배열 [ 연습문제 ]/ch6/exercise6_23.java class Exercise6_23{ (1) max 메서드를작성하시오.
43 public static void main(string[] args) { int[] data = {3,2,9,4,7; System.out.println(java.util.Arrays.toString(data)); System.out.println(" 최대값 :"+max(data)); System.out.println(" 최대값 :"+max(null)); System.out.println(" 최대값 :"+max(new int[]{)); // 크기가 0 인배열 [3, 2, 9, 4, 7] 최대값 :9 최대값 :-999999 최대값 :-999999 [6-24] 다음과같이정의된메서드를작성하고테스트하시오. 메서드명 : abs 기능 : 주어진값의절대값을반환한다. 반환타입 : int 매개변수 : int value [ 연습문제 ]/ch6/exercise6_24.java class Exercise6_24 { (1) abs 메서드를작성하시오. public static void main(string[] args) { int value = 5; System.out.println(value+" 의절대값 :"+abs(value)); value = -10; System.out.println(value+" 의절대값 :"+abs(value)); 5 의절대값 :5-10 의절대값 :10
44 Chapter 7 객체지향프로그래밍 II Object-oriented Programming II
45 [ 연습문제 ] [7-1] 섯다카드 20장을포함하는섯다카드한벌 (SutdaDeck클래스) 을정의한것이다. 섯다카드 20장을담는 SutdaCard배열을초기화하시오. 단, 섯다카드는 1부터 10까지의숫자가적힌카드가한쌍씩있고, 숫자가 1, 3, 8인경우에는둘중의한장은광 (Kwang) 이어야한다. 즉, SutdaCard의인스턴스변수 iskwang의값이 true이어야한다. [ 연습문제 ]/ch7/exercise7_1.java class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM]; SutdaDeck() { (1) 배열 SutdaCard 를적절히초기화하시오. class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang; // info() 대신 Object 클래스의 tostring() 을오버라이딩했다. public String tostring() { return num + ( iskwang? "K":""); class Exercise7_1 { public static void main(string args[]) { SutdaDeck deck = new SutdaDeck(); for(int i=0; i < deck.cards.length;i++) System.out.print(deck.cards[i]+","); 1K,2,3K,4,5,6,7,8K,9,10,1,2,3,4,5,6,7,8,9,10,
46 [7-2] 문제 7-1 의 SutdaDeck 클래스에다음에정의된새로운메서드를추가하고테스트하 시오. [ 주의 ] Math.random() 을사용하는경우실행결과와다를수있음. 1. 메서드명 : shuffle 기능 : 배열 cards에담긴카드의위치를뒤섞는다.(math.random() 사용 ) 반환타입 : 없음매개변수 : 없음 2. 메서드명 : pick 기능 : 배열 cards에서지정된위치의 SutdaCard를반환한다. 반환타입 : SutdaCard 매개변수 : int index - 위치 3. 메서드명 : pick 기능 : 배열 cards에서임의의위치의 SutdaCard를반환한다.(Math.random() 사용 ) 반환타입 : SutdaCard 매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_2.java class SutdaDeck { final int CARD_NUM = 20; SutdaCard[] cards = new SutdaCard[CARD_NUM]; SutdaDeck() { 문제 7-1 의답이므로내용생략 (1) 위에정의된세개의메서드를작성하시오. // SutdaDeck class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang; public String tostring() {
47 return num + ( iskwang? "K":""); class Exercise7_2 { public static void main(string args[]) { SutdaDeck deck = new SutdaDeck(); System.out.println(deck.pick(0)); System.out.println(deck.pick()); deck.shuffle(); for(int i=0; i < deck.cards.length;i++) System.out.print(deck.cards[i]+","); System.out.println(); System.out.println(deck.pick(0)); 1K 7 2,6,10,1K,7,3,10,5,7,8,5,1,2,9,6,9,4,8K,4,3K, 2 [7-3] 오버라이딩의정의와필요성에대해서설명하시오. [7-4] 다음중오버라이딩의조건으로옳지않은것은? ( 모두고르시오 ) a. 조상의메서드와이름이같아야한다. b. 매개변수의수와타입이모두같아야한다. c. 리턴타입이같아야한다. d. 접근제어자는조상의메서드보다좁은범위로만변경할수있다. e. 조상의메서드보다더많은수의예외를선언할수있다.
48 [7-5] 다음의코드는컴파일하면에러가발생한다. 그이유를설명하고에러를수정하기 위해서는코드를어떻게바꾸어야하는가? [ 연습문제 ]/ch7/exercise7_5.java class Product { int price; // 제품의가격 int bonuspoint; // 제품구매시제공하는보너스점수 Product(int price) { this.price = price; bonuspoint =(int)(price/10.0); class Tv extends Product { Tv() { public String tostring() { return "Tv"; class Exercise7_5 { public static void main(string[] args) { Tv t = new Tv(); [7-6] 자손클래스의생성자에서조상클래스의생성자를호출해야하는이유는무엇인 가?
49 [7-7] 다음코드의실행했을때호출되는생성자의순서와실행결과를적으시오. [ 연습문제 ]/ch7/exercise7_7.java class Parent { int x=100; Parent() { this(200); Parent(int x) { this.x = x; int getx() { return x; class Child extends Parent { int x = 3000; Child() { this(1000); Child(int x) { this.x = x; class Exercise7_7 { public static void main(string[] args) { Child c = new Child(); System.out.println("x="+c.getX());
50 [7-8] 다음중접근제어자를접근범위가넓은것에서좁은것의순으로바르게나열한것은? a. public-protected-(default)-private b. public-(default)-protected-private c. (default)-public-protected-private d. private-protected-(default)-public [7-9] 다음중제어자 final을붙일수있는대상과붙였을때그의미를적은것이다. 옳지않은것은? ( 모두고르시오 ) a. 지역변수 - 값을변경할수없다. b. 클래스 - 클래스에새로운멤버를추가할수없다. c. 메서드 - 오버로딩을할수없다. d. 멤버변수 - 값을변경할수없다. [7-10] MyTv2 클래스의멤버변수 ispoweron, channel, volume 을클래스외부에서접근할 수없도록제어자를붙이고대신이멤버변수들의값을어디서나읽고변경할수있도록 getter 와 setter 메서드를추가하라. [ 연습문제 ]/ch7/exercise7_10.java class MyTv2 { boolean ispoweron; int channel; int volume; final int MAX_VOLUME = 100; final int MIN_VOLUME = 0; final int MAX_CHANNEL = 100; final int MIN_CHANNEL = 1; (1) 알맞은코드를넣어완성하시오. class Exercise7_10 { public static void main(string args[]) { MyTv2 t = new MyTv2(); t.setchannel(10); System.out.println("CH:"+t.getChannel()); t.setvolume(20); System.out.println("VOL:"+t.getVolume()); CH:10 VOL:20
51 [7-11] 문제 7-10 에서작성한 MyTv2 클래스에이전채널 (previous channel) 로이동하는 기능의메서드를추가해서실행결과와같은결과를얻도록하시오. [Hint] 이전채널의값을저장할멤버변수를정의하라. 메서드명 : gotoprevchannel 기능 : 현재채널을이전채널로변경한다. 반환타입 : 없음매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_11.java class MyTv2 { (1) 문제 7-10 의 MyTv2 클래스에 gotoprevchannel 메서드를추가하여완성하시오. class Exercise7_11 { public static void main(string args[]) { MyTv2 t = new MyTv2(); t.setchannel(10); System.out.println("CH:"+t.getChannel()); t.setchannel(20); System.out.println("CH:"+t.getChannel()); t.gotoprevchannel(); System.out.println("CH:"+t.getChannel()); t.gotoprevchannel(); System.out.println("CH:"+t.getChannel()); CH:10 CH:20 CH:10 CH:20 [7-12] 다음중접근제어자에대한설명으로옳지않은것은? ( 모두고르시오 ) a. public은접근제한이전혀없는접근제어자이다. b. (default) 가붙으면, 같은패키지내에서만접근이가능하다. c. 지역변수에도접근제어자를사용할수있다. d. protected가붙으면, 같은패키지내에서도접근이가능하다. e. protected가붙으면, 다른패키지의자손클래스에서접근이가능하다. [7-13] Math 클래스의생성자는접근제어자가 private 이다. 그이유는무엇인가?
52 [7-14] 문제 7-1 에나오는섯다카드의숫자와종류 (iskwang) 는사실한번값이지정되면 변경되어서는안되는값이다. 카드의숫자가한번잘못바뀌면똑같은카드가두장이 될수도있기때문이다. 이러한문제점이발생하지않도록아래의 SutdaCard 를수정하시 오. [ 연습문제 ]/ch7/exercise7_14.java class SutdaCard { int num; boolean iskwang; SutdaCard() { this(1, true); SutdaCard(int num, boolean iskwang) { this.num = num; this.iskwang = iskwang; public String tostring() { return num + ( iskwang? "K":""); class Exercise7_14 { public static void main(string args[]) { SutdaCard card = new SutdaCard(1, true); [7-15] 클래스가다음과같이정의되어있을때, 형변환을올바르게하지않은것은? ( 모두고르시오.) class Unit { class AirUnit extends Unit { class GroundUnit extends Unit { class Tank extends GroundUnit { class AirCraft extends AirUnit { Unit u = new GroundUnit(); Tank t = new Tank(); AirCraft ac = new AirCraft(); a. u = (Unit)ac; b. u = ac; c. GroundUnit gu = (GroundUnit)u; d. AirUnit au = ac; e. t = (Tank)u; f. GroundUnit gu = t;
53 [7-16] 다음중연산결과가 true 가아닌것은? ( 모두고르시오 ) class Car { class FireEngine extends Car implements Movable { class Ambulance extends Car { FireEngine fe = new FireEngine(); a. fe instanceof FireEngine b. fe instanceof Movable c. fe instanceof Object d. fe instanceof Car e. fe instanceof Ambulance [7-17] 아래세개의클래스로부터공통부분을뽑아서 Unit 이라는클래스를만들고, 이 클래스를상속받도록코드를변경하시오. class Marine { // 보병 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void stimpack() { 스팀팩을사용한다. class Tank { // 탱크 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void changemode() { 공격모드를변환한다. class Dropship { // 수송선 int x, y; // 현재위치 void move(int x, int y) { 지정된위치로이동 void stop() { 현재위치에정지 void load() { 선택된대상을태운다. void unload() { 선택된대상을내린다.
54 [7-18] 다음과같은실행결과를얻도록코드를완성하시오. [Hint] instanceof 연산자를사용해서형변환한다. 메서드명 : action 기능 : 주어진객체의메서드를호출한다. DanceRobot인경우, dance() 를호출하고, SingRobot인경우, sing() 을호출하고, DrawRobot인경우, draw() 를호출한다. 반환타입 : 없음매개변수 : Robot r - Robot인스턴스또는 Robot의자손인스턴스 [ 연습문제 ]/ch7/exercise7_18.java class Exercise7_18 { (1) action 메서드를작성하시오. public static void main(string[] args) { Robot[] arr = { new DanceRobot(), new SingRobot(), new DrawRobot(); for(int i=0; i< arr.length;i++) action(arr[i]); // main class Robot { class DanceRobot extends Robot { void dance() { System.out.println(" 춤을춥니다."); class SingRobot extends Robot { void sing() { System.out.println(" 노래를합니다."); class DrawRobot extends Robot { void draw() { System.out.println(" 그림을그립니다."); 춤을춥니다. 노래를합니다. 그림을그립니다.
55 [7-19] 다음은물건을구입하는사람을정의한 Buyer클래스이다. 이클래스는멤버변수로돈 (money) 과장바구니 (cart) 를가지고있다. 제품을구입하는기능의 buy메서드와장바구니에구입한물건을추가하는 add메서드, 구입한물건의목록과사용금액, 그리고남은금액을출력하는 summary메서드를완성하시오. 1. 메서드명 : buy 기능 : 지정된물건을구입한다. 가진돈 (money) 에서물건의가격을빼고, 장바구니 (cart) 에담는다. 만일가진돈이물건의가격보다적다면바로종료한다. 반환타입 : 없음매개변수 : Product p - 구입할물건 2. 메서드명 : add 기능 : 지정된물건을장바구니에담는다. 만일장바구니에담을공간이없으면, 장바구니의크기를 2배로늘린다음에담는다. 반환타입 : 없음매개변수 : Product p - 구입할물건 3. 메서드명 : summary 기능 : 구입한물건의목록과사용금액, 남은금액을출력한다. 반환타입 : 없음매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_19.java class Exercise7_19 { public static void main(string args[]) { Buyer b = new Buyer(); b.buy(new Tv()); b.buy(new Computer()); b.buy(new Tv()); b.buy(new Audio()); b.buy(new Computer()); b.buy(new Computer()); b.buy(new Computer()); b.summary(); class Buyer { int money = 1000; Product[] cart = new Product[3]; // 구입한제품을저장하기위한배열 int i = 0; // Product배열 cart에사용될 index void buy(product p) { (1) 아래의로직에맞게코드를작성하시오. 1.1 가진돈과물건의가격을비교해서가진돈이적으면메서드를종료한다. 1.2 가진돈이충분하면, 제품의가격을가진돈에서빼고 1.3 장바구니에구입한물건을담는다.(add 메서드호출 )
56 void add(product p) { (2) 아래의로직에맞게코드를작성하시오. 1.1 i 의값이장바구니의크기보다같거나크면 1.1.1 기존의장바구니보다 2 배큰새로운배열을생성한다. 1.1.2 기존의장바구니의내용을새로운배열에복사한다. 1.1.3 새로운장바구니와기존의장바구니를바꾼다. 1.2 물건을장바구니 (cart) 에저장한다. 그리고 i 의값을 1 증가시킨다. // add(product p) void summary() { (3) 아래의로직에맞게코드를작성하시오. 1.1 장바구니에담긴물건들의목록을만들어출력한다. 1.2 장바구니에담긴물건들의가격을모두더해서출력한다. 1.3 물건을사고남은금액 (money) 를출력한다. // summary() class Product { int price; // 제품의가격 Product(int price) { this.price = price; class Tv extends Product { Tv() { super(100); public String tostring() { return "Tv"; class Computer extends Product { Computer() { super(200); public String tostring() { return "Computer"; class Audio extends Product { Audio() { super(50); public String tostring() { return "Audio"; 잔액이부족하여 Computer 을 / 를살수없습니다. 구입한물건 :Tv,Computer,Tv,Audio,Computer,Computer, 사용한금액 :850 남은금액 :150
57 [7-20] 다음의코드를실행한결과를적으시오. [ 연습문제 ]/ch7/exercise7_20.java class Exercise7_20 { public static void main(string[] args) { Parent p = new Child(); Child c = new Child(); System.out.println("p.x = " + p.x); p.method(); System.out.println("c.x = " + c.x); c.method(); class Parent { int x = 100; void method() { System.out.println("Parent Method"); class Child extends Parent { int x = 200; void method() { System.out.println("Child Method"); [7-21] 다음과같이 attack 메서드가정의되어있을때, 이메서드의매개변수로가능한 것두가지를적으시오. interface Movable { void move(int x, int y); void attack(movable f) { 내용생략
58 [7-22] 아래는도형을정의한 Shape클래스이다. 이클래스를조상으로하는 Circle클래스와 Rectangle클래스를작성하시오. 이때, 생성자도각클래스에맞게적절히추가해야한다. (1) 클래스명 : Circle 조상클래스 : Shape 멤버변수 : double r - 반지름 (2) 클래스명 : Rectangle 조상클래스 : Shape 멤버변수 : int width - 폭 int height - 높이메서드 : 1. 메서드명 : issquare 기능 : 정사각형인지아닌지를알려준다. 반환타입 : boolean 매개변수 : 없음 [ 연습문제 ]/ch7/exercise7_22.java abstract class Shape { Point p; Shape() { this(new Point(0,0)); Shape(Point p) { this.p = p; abstract double calcarea(); // 도형의면적을계산해서반환하는메서드 Point getposition() { return p; void setposition(point p) { this.p = p; class Point { int x; int y; Point() { this(0,0); Point(int x, int y) { this.x=x; this.y=y;
59 public String tostring() { return "["+x+","+y+"]"; [7-23] 문제 7-22 에서정의한클래스들의면적을구하는메서드를작성하고테스트하시 오. 1. 메서드명 : sumarea 기능 : 주어진배열에담긴도형들의넓이를모두더해서반환한다. 반환타입 : double 매개변수 : Shape[] arr [ 연습문제 ]/ch7/exercise7_23.java class Exercise7_23 { (1) sumarea 메서드를작성하시오. public static void main(string[] args) { Shape[] arr = {new Circle(5.0), new Rectangle(3,4), new Circle(1); System.out.println(" 면적의합 :"+sumarea(arr)); 면적의합 :93.68140899333463 [7-24] 다음중인터페이스의장점이아닌것은? a. 표준화를가능하게해준다. b. 서로관계없는클래스들에게관계를맺어줄수있다. c. 독립적인프로그래밍이가능하다. d. 다중상속을가능하게해준다. e. 패키지간의연결을도와준다.