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) {
                
        }
    }
    
}