본문 바로가기

study/Programming

[Java] 제네릭 메소드로 변경하기

728x90

- 게시판에 작성자 이름을 검색하면 그 작성자가 작성한 글의 제목을 출력하도록 프로그램을 작성한다.

- <코드1>에 QABoard class를 추가하고 main() 메소드에 QABoard 객체로 작성된 배열을 추가한다.

- <코드1>의 findSubject() 메소드를 제네릭 메소드로 변경하여 OpenBoard와 QABoard 객체에서 모두 사용할 수 있도록 한다.

 

<코드1>

 

class OpenBoard{
	String subject;
    String content;
    String writer;
    
    public OpenBoard(String subject, String content, String writer){
    	this.subject= subject;
        this.content= content;
        this.writer= writer;
    }
}

public class BoardExample{

	static OpenBoard findSubject(OpenBoard[] b, String name){
    	//작성자의 작성한 글 제목 찾기
    }
    
    public static void main(String[] args){
    	OpenBoard[] ob= {
        	new OpenBoard("제목1", "내용1", "글쓴이1"),
            new OpenBoard("제목2", "내용2", "글쓴이2"),
            new OpenBoard("제목3", "내용3", "글쓴이3") };
            
        Scanner scanner= new Scanner(System.in);
        String name= scanner.next();
        
        System.out.println(name+ "가 작성한 글 제목: "+ findSubject(ob, name));
     }
}
            

 

<QABoard class>

 

class QABoard{
	String subject;
    String content;
    String writer;
    
    public QABoard(String subject, String content, String writer){
    	this.subject= subject;
        this.content= content;
        this.writer= writer;
    }
}

 

<main() 추가 내용>

 

QABoard[] qab= {
	new QABoard("제목4", "내용4", "글쓴이1"),
    new QABoard("제목5", "내용5", "글쓴이4"),
    new QABoard("제목6", "내용6", "글쓴이3") };
    

 

<제네릭 메소드로 수정 후, 추가된 코드>

 

import java.util.*;

class OpenBoard {
	String subject;
	String content;
	String writer;
	
	public OpenBoard(String subject, String content, String writer) {
		this.subject= subject;
		this.content= content;
		this.writer= writer;
	}
	
	public String toString() { //메소드 재정의 
		return writer+ subject;
	}
}

class QABoard {
	String subject;
	String content;
	String writer;
	
	public QABoard(String subject, String content, String writer) {
		this.subject= subject;
		this.content= content;
		this.writer= writer;
	}
	public String toString() { //메소드 재정의
		return writer+ subject;
	}
}

public class BoardExample {
	
	public static <E> void findSubject(E[] b, String name) {
		//작성자의 작성한 글 제목 찾기
		//toString가져오기 , writer는 toString, substring사용하기ㅣ...
		
		for(int i=0; i< b.length; i++) {
			if((b[i].toString().substring(0,4)).equals(name)==true){
				System.out.println(b[i].toString().substring(4,7));
			}//else System.out.println("없어유");
		}
		
	}

	public static void main(String[] args) {
		OpenBoard[] ob= {
				new OpenBoard("제목1", "내용1", "글쓴이1"),
				new OpenBoard("제목2", "내용2", "글쓴이2"),
				new OpenBoard("제목3", "내용3", "글쓴이3") };
		
		QABoard[] qab= {
				new QABoard("제목4", "내용4", "글쓴이1"),
				new QABoard("제목5", "내용5", "글쓴이4"),
				new QABoard("제목6", "내용4", "글쓴이3") };
		
		Scanner scanner= new Scanner(System.in);
		String name= scanner.next();
		
//		BoardExample.findSubject(ob, name);
//		BoardExample.findSubject(qab, name);
		
		System.out.println("OpenBoard에서 "+ name+ "가 작성한 글 제목: ");
		BoardExample.findSubject(ob,name);
		System.out.println("QABoard에서 "+ name+ "가 작성한 글 제목: ");
		BoardExample.findSubject(qab,name);
		

	}
}

 

<출력>

 

** 없는 글쓴이를 입력했을 때 없음으로 하고싶은디,,, 

 

	public static <E> void findSubject(E[] b, String name) {
		//작성자의 작성한 글 제목 찾기
		//toString가져오기 , writer는 toString, substring사용하기ㅣ...
		
		for(int i=0; i< b.length; i++) {
			if((b[i].toString().substring(0,4)).equals(name)==true){
				System.out.println(b[i].toString().substring(4,7));
			}else System.out.println("없어유"); //<<<<여기!!
		}

 

이렇게 코드를 해놓으면

이렇게 되버린다... 훔,,, 한번 쫙 돌고 하나도 없으면 없다고 한번만 출력되게 하고싶은디 ,, 난 바보니까,, 고민해보자,,,

728x90
반응형

'study > Programming' 카테고리의 다른 글

[Java] HashMap  (2) 2020.06.15
[Java] 예외처리문(try~catch), 곱한 값이 음수일 경우  (0) 2020.05.27
[JAVA] 추상 메소드, 인터페이스  (0) 2020.05.19