java/코드 리뷰
10. oop4 - (1) ReporterDemo (객체의 형변환) ★
Astaroth아스
2020. 4. 2. 20:12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package oop4;
/**
* 1
* @author HYB
*
*/
public class DataOutput {
void output(String[] data) {
for (String value : data) {
System.out.println(value + " ");
}
System.out.println();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package oop4;
/**
* 2
* @author HYB
*
*/
public class Reporter {
String[] data;
// 교체 품목
// DataOutput류 객체를 전달받아서 멤버변수 outputter에 담은 메서드
// DataOutput outputter = new DataOutput();
// DataOutput outputter = new ConsoleDataOutput();
DataOutput outputter = new FileDataOutput("c:/files", "데이터.txt");
void setOutputter(DataOutput dataOutput) {
this.outputter = dataOutput;
}
void setData(String[] data) {
this.data = data;
}
void reporting() {
/*
if (outputter instanceof FileDataOutput) {
((FileDataOutput) outputter).output(data);
} else if (outputter instanceof ConsoleDataOutput) {
((ConsoleDataOutput) outputter).output(data);
} else if (outputter instanceof DBDataOutput) {
((DBDataOutput) outputter).output(data);
} if (outputter instanceof XlsDataOutput) {
((XlsDataOutput) outputter).output(data);
} .... 등등 기능이 많아질수록 추가되는 번거로워짐
*/
outputter.output(data);
// 이거 한줄로 완성
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package oop4;
/**
* 3
* @author HYB
*
*/
public class ReporterDemo {
public static void main(String[] args) {
String[] names = {"김유신", "강감찬", "이순신", "류관순", "윤봉길"};
DataOutput do1 = new DataOutput();
ConsoleDataOutput do2 = new ConsoleDataOutput();
FileDataOutput do3 = new FileDataOutput("c:/files", "data.txt");
/* ★ 객체의 형변환
FileDataOutput을 setOutputter에 담으려고 했는데
DataOutput 매개변수가 아니라 FileDataOutput 매개변수다
그럼 부모 클래스인 DataOutput으로 올라가면서 매개변수를 확인한다
DataOutput 클래스에 DataOutput 매개변수를 받는가? 네
그럼 DataOutput 매개변수를 사용한다
*/
Reporter reporter = new Reporter();
// Reporter 객체의 setOutputter()메서드를 이용해서 Reporter 객체의
// DataOutput 멤버변수에 데이터 출력을 지원하는 객체(DataOutput류 객체)를 전달, 조립시킴
reporter.setOutputter(do3); // 교체 품목 do1 do2 do3...
reporter.setData(names);
reporter.reporting();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package oop4;
/**
* 4
* @author HYB
*
*/
public class ConsoleDataOutput extends DataOutput {
@Override
void output(String[] data) {
System.out.println("---- 데이터 목록 ----");
for (int i=0; i<data.length; i++) {
System.out.println("[" + (i+1) + "]" + data[i]);
}
System.out.println("---- 데이터 목록 ----");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package oop4;
/**
* 5
* @author HYB
*
*/
import java.io.File;
import java.io.PrintWriter;
public class FileDataOutput extends DataOutput {
String directory;
String filename;
FileDataOutput(String directory, String filename) {
this.directory = directory;
this.filename = filename;
}
@Override
void output(String[] data) {
try {
File file = new File(directory, filename);
PrintWriter writer = new PrintWriter(file);
writer.println("---- 데이터 리스트 ----");
for (int i=0; i<data.length; i++) {
writer.println("[" +(i+1)+"]" + data[i]);
}
writer.println("---- 데이터 리스트 ----");
writer.flush();
writer.close();
} catch (Exception e) {
}
}
}
|