너굴 개발 일지

TIL_210318_클래스 생성, static 변수 본문

Java

TIL_210318_클래스 생성, static 변수

너굴냥 2021. 3. 18. 21:55
  • 오전 수업 문제 
  • 콘솔창으로부터 검색방법 ( 글제목, 작성자, 전체검색(글제목 및 작성자)) 3가지와 검색어를 입력 받고 검색 내용 출력
  • 클래스명 : BoardClass(책에 대한 기본 정보), DataClass(실제 데이터 저장 데이터), MainClass(입출력), MethodClass(검색 관련 메서드)
  • BoardClass 변수는 글번호(no), 글제목(title), 작성자(writer), 조회수(hit), DataClass의 데이터 타입은 ArrayList<BoardClass>이다.

 

< 문제 풀이 방법 >

  1. MainClass에 입력 Scanner 클래스로 입력 받음            
  2. Method 클래스에 검색관련 메서드 3개, 검색 방법에 따른 검색 결과 반환 메서드 추가               
  3. Main클래스에 Method클래스 메서드를 이용해서 결과 받기             

   (문제 풀땐 먼저 큰 흐름을 그림으로 그리고 클래스 작성하기)

 

 

<Board Class>

package com.bjy;

public class BoardClass {
	// 글번호 (no), 글제목(title), 작성자(writer), 조회수(hit)
	int no = 0;
	String title = "";
	String writer = "";
	int hit = 0;
	
	BoardClass() {}
	
	BoardClass(int no, String title, String writer, int hit) {
		this.no = no;
		this.title = title;
		this.writer = writer;
		this.hit = hit;
	}
}

<Data Class>

package com.bjy;

import java.util.ArrayList;

public class DataClass {
	ArrayList<BoardClass> boardList = new ArrayList<BoardClass>();
	 
	public DataClass() {
		 this.initData();
		 
	 }
	
	
	public void initData() {
		this.boardList.add(new BoardClass(11968, "2020 07 08 클래스연습데이터7 (student, takes)", "김광식", 25));
		this.boardList.add(new BoardClass(11967, "2020 07 08 클래스연습데이터5 (학과/학생)", "김정현", 62));
		this.boardList.add(new BoardClass(11965, "2020 07 07 클래스 연습 데이터 4 (부서/사원)", "김현정", 60));
		this.boardList.add(new BoardClass(11966, "2020 07 07 클래스 연습 데이터 4 ", "김성주", 34));
		this.boardList.add(new BoardClass(11964, "2020 07 07 클래스 연습 데이터 3 (도서) ", "이성주", 65));
		this.boardList.add(new BoardClass(11963, "2020 07 06 클래스 연습 데이터 2 (학생) ", "김현정", 44));
		this.boardList.add(new BoardClass(11962, "2020 07 06 클래스 연습 데이터 (교수) ", "백태성", 48));
		this.boardList.add(new BoardClass(11961, "2020 07 03 3가지 문제를 메서드 처리 ", "김광식", 58));
		this.boardList.add(new BoardClass(11960, "2020 07 03 split() 와 클래스 연습 데이터", "김정현", 54));
		this.boardList.add(new BoardClass(11959, "2020 07 02 마지막 3가지 문제 ", "박광수", 92));
		this.boardList.add(new BoardClass(11958, "2020 07 02 split test ", "김현정", 53));
		this.boardList.add(new BoardClass(11957, "2020 07 02 제어문 연습데이터 ", "김정현", 64));
		this.boardList.add(new BoardClass(11956, "코드를 엉망으로 작성하는 법 ", "박광수", 43));
		this.boardList.add(new BoardClass(11955, "유지 보수 어렵게 코딩하는 방법 ", "김광식", 59));
		this.boardList.add(new BoardClass(11954, "2020 07 01 Java Platform Standard Edition 8 Documentation ","Amor vincit omnia", 29));
		this.boardList.add(new BoardClass(11641, "2019 01 30 변수, 배열, 객체, 클래스 (기초 문법 간단 요약) ", "박광수", 91));
		this.boardList.add(new BoardClass(11640, "2019 01 30 변수, 배열, 객체, 클래스 (기초 문법 간단 요약) ", "김성주", 95));
		this.boardList.add(new BoardClass(11639, "2019 01 30 기본 지식 정리 ", "김성주", 70));
	
	}

} // end of DataClass

 - ArrayList<BoardList> boardList = new ArrayList<BoardList>BoardClass(); 배열 생성 후 각 요소에 넣을 객체들은 initData메서드 안에서 생성하였다. (클래스 영역에선 선언만 가능하고 식 자체는 메서드 영역에서 가능 !)

 

<MethodClass>

package com.bjy;

import java.util.*;


public class MethodClass {
	
	public MethodClass() {}
	
	// 입력된 검색 방법 유효성 메서드 
	public boolean typeCheck(String type) {
		if(type.equalsIgnoreCase("T")|| type.equalsIgnoreCase("W") || type.equalsIgnoreCase("A")) {
			return true;
		} else {
			return false;
		}
	}
	
	// 검색 방법에 따라 검색 메서드 호출하고, 그 결과를 MainCLass에 반환하는 메서드
	public ArrayList<BoardClass> search(String[] searchTypeAndWord) {
		
		ArrayList<BoardClass> searchList = new ArrayList<BoardClass>();		// 검색결과 저장할 변수
		
		if(searchTypeAndWord[0].equalsIgnoreCase("T")) {  					// 제목으로 검색 메서드 호출
			this.searchTitle(searchTypeAndWord[1], searchList);
		}else if(searchTypeAndWord[0].equalsIgnoreCase("W")) { 				// 작성자로 검색 메서드 호출 
			this.searchWriter(searchTypeAndWord[1], searchList);   				
		}else  {															// 전체로 검색하는 메서드 호출 
			this.searchTotal(searchTypeAndWord[1], searchList);  
		}
		
		return searchList;
		
	}
	// 글제목으로 검색하는 메서드 
	public void searchTitle (String searchword, ArrayList<BoardClass> searchList) {
		ArrayList<BoardClass> boardList = new DataClass().boardList; 		// 검색데이터
		for(int i=0;i<boardList.size();i++) {
			if(boardList.get(i).title.contains(searchword)) {
				searchList.add(boardList.get(i));
			}
		}
	}
	
	// 작성자로 검색하는  메서드 
	public void searchWriter (String searchword, ArrayList<BoardClass> searchList) {
		ArrayList<BoardClass> boardList = new DataClass().boardList; 		// 검색데이터
		for(int i=0;i<boardList.size();i++) {
			if(boardList.get(i).writer.contains(searchword)) {
				searchList.add(boardList.get(i));
			}
		}
	}
	
	// 전체 검색(글제목 또는 작성자) 메서드 
	public void searchTotal (String searchword, ArrayList<BoardClass> searchList) {
		ArrayList<BoardClass> boardList = new DataClass().boardList; 		// 검색데이터
		for(int i=0;i<boardList.size();i++) {
			if(boardList.get(i).writer.contains(searchword) || boardList.get(i).title.contains(searchword)) {
				searchList.add(boardList.get(i));
			}
		}
	}
	
	
	
} // end of MethodClass

- 검색 결과 저장하는 변수 타입 ArrayList로 한 이유 ? 검색어에 따른 검색 결과가 얼마나 나올지 모르기에 길이가 정해진 일반 배열보다는 크기를 지정하지 않아도 쉽게 추가가 가능한 ArrayList로 선택 

 

<Main Class>

package com.bjy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class MainClass {

	public static void main(String[] args) {

		
		String[] searchTypeAndWord = { "","" };
		Scanner s = new Scanner(System.in);
		
		// 검색 방법 입력, 잘못 입력하면 계속 반복 
		
		System.out.println("검색 방법을 입력해주세요. (글제목 : T, 작성자 : W, 전체 검색 : A) >");
		System.out.println("========================================");
		String type = s.next();
		boolean checked = false;
		checked = new MethodClass().typeCheck(type);
		
		// 검색방법이 올바르게 입력되었는지 유효성 검사 
		while(!checked) {
			System.out.println("검색 방법을 잘못 입력하였습니다. 다시 입력해주세요");
			type = s.next();
			checked = new MethodClass().typeCheck(type);
		}
			
		searchTypeAndWord[0] = type;
		
		System.out.println("========================================");
		System.out.println("검색어를 입력해주세요");
		
		searchTypeAndWord[1] = s.next();
		System.out.println("=======================================");
		System.out.printf("%s, %s으로 찾은 결과입니다.\n", searchTypeAndWord[0], searchTypeAndWord[1]);
		
		// 검색 메서드 호출 ( 굳이 객체 따로 생성해서 변수에 저장할 필요 X) 
		ArrayList<BoardClass> resultList = new MethodClass().search(searchTypeAndWord);
		if(resultList.size()<1) {
			System.out.println("검색된 결과가 없습니다.");
		} else {
			for(int i=0;i<resultList.size();i++) {
				System.out.print(resultList.get(i).no + "\t");
				System.out.print(resultList.get(i).title + "\t");
				System.out.print(resultList.get(i).writer + "\t");
				System.out.print(resultList.get(i).hit + "\n");
			}
		}
		

	} // end of main method

}

 

큰 흐름으로 보면 다음과 같으며 코드를 짜기 전 큰 흐름과 어떤 변수들을 넘길지, 어떤 메서드를 생성해야 할지 적은 후 코드 짜보는 것이 좋다. ( 아래의 사진은 위의 문제 풀이 최종 단계의 코드 전 단계이므로 약간의 차이가 있을 수 있다)

각 클래스들의 흐름을 그림으로 표시한 것이다.

 

 

2. 오후 수업 문제 

 - 콘솔창으로부터 입력받은 값("IT영자지")을 이용하여 해당 신문들의 정보와 갯수를 출력

 - 단 검색메서드는 MethodClass에서 작성하고  출력 메서드는 PrintClass에 작성한다.

 - 신문들의 정보 출력시 image : 확장자 포함하여 출력 ex : nsd16550796.gif 

 - NewsCLass 변수 : press, url(맨뒤의 숫자들만 저장), image(마지막 확장자는 삭제 후 저장), kind

                         (모든 변수 타입은 String)

 - url : 전체 문자열 출력 ex : newsstand.naver.com/032

 

<MainClass>

package com.bjy;

import java.util.ArrayList;
import java.util.Scanner;

public class MainClass {
	
	public static void main(String[] args) {
		
			System.out.println("찾고 싶은 신문의 종류를 입력하세요");
			Scanner scan = new Scanner(System.in);
			String searchWord = scan.next();
		
			
			// 검색하여 해당 정보들 리스트에 따로 저장
			ArrayList<NewsClass> searchList = new MethodClass().search(searchWord);
			// 검색 정보가 저장된 리스트를 출력
			new PrintClass().searchPrint(searchList, searchWord);
		
		}
		
}

<NewsClass>

package com.bjy;

public class NewsClass {
	String press;
	String image;
	String url;
	String kind;
	
	NewsClass() {}
	
	NewsClass(String press, String image, String url, String kind) {
		this.press = press;
		String[] file = image.split("[.]");
		this.image = file[0];
		PrintClass.extension = "." + file[1];
		// split하면 해당 기호는 사라지기에 extension에 다시 삽입함.
		
		String[] urlSplit = url.split("/");
		this.url = urlSplit[1];
		PrintClass.pathURL = urlSplit[0] + "/";
		this.kind = kind;
	}
}

 - NewsClass 변수들을 그대로 넣는 것이 아닌 확장자와 주소를 제외하고 초기화 해줘야 해서 불필요한 부분들은 PrintClass의 static 변수값으로 저장하고 나중에 출력할때 재사용했다. 

<DataClass>

package com.bjy;

import java.util.ArrayList;

public class DataClass {
	ArrayList<NewsClass> newsData = new ArrayList<NewsClass>();
	
	public DataClass() {
		this.initData();
	}
	
	private void initData() {
		newsData.add(new NewsClass("ScienceTimes", "nsd113446808.gif", "newsstand.naver.com/355",  "매거진전문지"));
		newsData.add(new NewsClass("경향신문", "nsd16500796.gif", "newsstand.naver.com/032",  "종합지"));
		newsData.add(new NewsClass("국민일보", "nsd113224489.gif", "newsstand.naver.com/005",  "종합지"));
		newsData.add(new NewsClass("동아일보", "nsd162737318.gif", "newsstand.naver.com/020",  "종합지"));
		newsData.add(new NewsClass("서울신문", "nsd165611664.gif", "newsstand.naver.com/081",  "종합지"));
		newsData.add(new NewsClass("석간내일신문", "nsd162522149.gif", "newsstand.naver.com/086",  "종합지"));
		newsData.add(new NewsClass("석간문화일보", "nsd11502601.gif", "newsstand.naver.com/021",  "종합지"));
		newsData.add(new NewsClass("세계일보", "nsd104440320.gif", "newsstand.naver.com/022",  "종합지"));
		newsData.add(new NewsClass("조선일보", "nsd14948476.gif", "newsstand.naver.com/023",  "종합지"));
		newsData.add(new NewsClass("중앙일보", "nsd111948440.gif", "newsstand.naver.com/025",  "종합지"));
		newsData.add(new NewsClass("한계레", "nsd185116392.gif", "newsstand.naver.com/028",  "종합지"));
		newsData.add(new NewsClass("한국일보", "nsd141114194.gif", "newsstand.naver.com/038",  "종합지"));
		newsData.add(new NewsClass("NEWis", "nsd165223437.gif", "newsstand.naver.com/003",  "방송통신"));
		newsData.add(new NewsClass("jijicom", "nsd112912516.gif", "newsstand.naver.com/376",  "방송통신"));
		newsData.add(new NewsClass("한국경제", "nsd10118864.gif", "newsstand.naver.com/215",  "방송통신"));
		newsData.add(new NewsClass("KBS", "nsd164033826.gif", "newsstand.naver.com/056",  "방송통신"));
		newsData.add(new NewsClass("MBC", "nsd1453778.gif", "newsstand.naver.com/214",  "방송통신"));
		newsData.add(new NewsClass("MBN", "nsd163758547.gif", "newsstand.naver.com/057",  "방송통신"));
		newsData.add(new NewsClass("SBS", "nsd183257911.gif", "newsstand.naver.com/055",  "방송통신"));
		newsData.add(new NewsClass("YTN", "nsd17425192.gif", "newsstand.naver.com/052",  "방송통신"));
		newsData.add(new NewsClass("매일경제", "nsd113526120.gif", "newsstand.naver.com/009",  "경제지"));
		newsData.add(new NewsClass("머니투데이", "nsd113754824.gif", "newsstand.naver.com/008",  "경제지"));
		newsData.add(new NewsClass("서울경제", "nsd15338959.gif", "newsstand.naver.com/011",  "경제지"));
		newsData.add(new NewsClass("아시아경제", "nsd165753754.gif", "newsstand.naver.com/277",  "경제지"));
		newsData.add(new NewsClass("이데일리", "nsd111247840.gif", "newsstand.naver.com/018",  "경제지"));
		newsData.add(new NewsClass("ChosunBiz", "nsd19334215.gif", "newsstand.naver.com/366",  "경제지"));
		newsData.add(new NewsClass("파이낸셜뉴스", "nsd141641302.gif", "newsstand.naver.com/014",  "경제지"));
		newsData.add(new NewsClass("한국경제", "nsd162034351.gif", "newsstand.naver.com/015",  "경제지"));
		newsData.add(new NewsClass("해럴드경제", "nsd182749494.gif", "newsstand.naver.com/016",  "경제지"));
		newsData.add(new NewsClass("노컷뉴스", "nsd101424267.gif", "newsstand.naver.com/079",  "인터넷"));
		newsData.add(new NewsClass("NEWDAILY", "nsd102245777.gif", "newsstand.naver.com/327",  "인터넷"));
		newsData.add(new NewsClass("데일리안", "nsd184410246.gif", "newsstand.naver.com/368",  "인터넷"));
		newsData.add(new NewsClass("미디어오늘", "nsd124110953.gif", "newsstand.naver.com/006",  "인터넷"));
		newsData.add(new NewsClass("OhmyNews", "nsd102039590.gif", "newsstand.naver.com/047",  "인터넷"));
		newsData.add(new NewsClass("PRESSian", "nsd184630885.gif", "newsstand.naver.com/002",  "인터넷"));
		newsData.add(new NewsClass("디지털타임스", "nsd144911195.gif", "newsstand.naver.com/029",  "IT영자지"));
		newsData.add(new NewsClass("블로터닷넷", "nsd16353971.gif", "newsstand.naver.com/293",  "IT영자지"));
		newsData.add(new NewsClass("아이뉴스24", "nsd113110902.gif", "newsstand.naver.com/031",  "IT영자지"));
		newsData.add(new NewsClass("월스트리트저널", "nsd16110689.gif", "newsstand.naver.com/372",  "IT영자지"));
		newsData.add(new NewsClass("전자신문", "nsd11405830.gif", "newsstand.naver.com/030",  "IT영자지"));
		newsData.add(new NewsClass("JOONGANG DAILY", "nsd113635939.gif", "newsstand.naver.com/330",  "IT영자지"));
		newsData.add(new NewsClass("Net Korea", "nsd18341092.gif", "newsstand.naver.com/092",  "IT영자지"));
		newsData.add(new NewsClass("THE KOREA TIMES", "nsd92244365.gif", "newsstand.naver.com/040",  "IT영자지"));
		newsData.add(new NewsClass("The Korea Herald", "nsd183039979.gif", "newsstand.naver.com/044",  "IT영자지"));
		newsData.add(new NewsClass("KBS WORLD", "nsd14465916.gif", "newsstand.naver.com/326",  "IT영자지"));
		newsData.add(new NewsClass("마이데일리", "nsd113852954.gif", "newsstand.naver.com/117",  "스포츠연예"));
		newsData.add(new NewsClass("스포츠동아", "nsd16247594.gif", "newsstand.naver.com/314",  "스포츠연예"));
		newsData.add(new NewsClass("스포츠서울", "nsd184854466.gif", "newsstand.naver.com/073",  "스포츠연예"));
		newsData.add(new NewsClass("스포츠조선", "nsd184717404.gif", "newsstand.naver.com/076",  "스포츠연예"));
		newsData.add(new NewsClass("sportalkorea", "nsd16579942.gif", "newsstand.naver.com/139",  "스포츠연예"));
		newsData.add(new NewsClass("일간스포츠", "nsd113052387.gif", "newsstand.naver.com/241",  "스포츠연예"));
		newsData.add(new NewsClass("OSEN", "nsd102852391.gif", "newsstand.naver.com/109",  "스포츠연예"));
		newsData.add(new NewsClass("GameMeca", "nsd183724.gif", "newsstand.naver.com/356",  "매거진전문지"));
		newsData.add(new NewsClass("과학동아", "nsd165049622.gif", "newsstand.naver.com/363",  "매거진전문지"));
		newsData.add(new NewsClass("jungle", "nsd165310840.gif", "newsstand.naver.com/345",  "매거진전문지"));
		newsData.add(new NewsClass("Software", "nsd113744707.gif", "newsstand.naver.com/357",  "매거진전문지"));
		newsData.add(new NewsClass("법률신문", "nsd165524289.gif", "newsstand.naver.com/122",  "매거진전문지"));
		newsData.add(new NewsClass("ScienceTimes", "nsd113446808.gif", "newsstand.naver.com/355",  "매거진전문지"));
		newsData.add(new NewsClass("소년한국일보", "nsd102746161.gif", "newsstand.naver.com/329",  "매거진전문지"));
		newsData.add(new NewsClass("STYLECOM", "nsd18366175.gif", "newsstand.naver.com/367",  "매거진전문지"));
		newsData.add(new NewsClass("시사IN Live", "nsd182936757.gif", "newsstand.naver.com/308",  "매거진전문지"));
		newsData.add(new NewsClass("씨네21", "nsd185025147.gif", "newsstand.naver.com/140",  "매거진전문지"));
		newsData.add(new NewsClass("Ablenews", "nsd184148949.gif", "newsstand.naver.com/328",  "매거진전문지"));
		newsData.add(new NewsClass("ELLE", "nsd16411268.gif", "newsstand.naver.com/354",  "매거진전문지"));
		newsData.add(new NewsClass("여성신문", "nsd164815489.gif", "newsstand.naver.com/310",  "매거진전문지"));
		newsData.add(new NewsClass("CARLIFE", "nsd135857948.gif", "newsstand.naver.com/362",  "매거진전문지"));
		newsData.add(new NewsClass("조세신문", "nsd101830214.gif", "newsstand.naver.com/123",  "매거진전문지"));
		newsData.add(new NewsClass("채널예스", "nsd14034411.gif", "newsstand.naver.com/361",  "매거진전문지"));
		newsData.add(new NewsClass("코메디닷컴", "nsd14156354.gif", "newsstand.naver.com/296",  "매거진전문지"));
		newsData.add(new NewsClass("한경BUSINESS", "nsd114627265.gif", "newsstand.naver.com/050",  "매거진전문지"));
		newsData.add(new NewsClass("한국대학신문", "nsd18493839.gif", "newsstand.naver.com/384",  "매거진전문지"));
		newsData.add(new NewsClass("헬스조선", "nsd17329660.gif", "newsstand.naver.com/346",  "매거진전문지"));
		newsData.add(new NewsClass("EBS", "nsd145514832.gif", "newsstand.naver.com/344",  "매거진전문지"));
		newsData.add(new NewsClass("PC사랑", "nsd15129878.gif", "newsstand.naver.com/364",  "매거진전문지"));
		newsData.add(new NewsClass("강원도민일보", "nsd16493440.gif", "newsstand.naver.com/335",  "지역지"));
		newsData.add(new NewsClass("강원일보", "nsd18354817.gif", "newsstand.naver.com/087",  "지역지"));
		newsData.add(new NewsClass("경기일보", "nsd142922938.gif", "newsstand.naver.com/339",  "지역지"));
		newsData.add(new NewsClass("경남일보", "nsd11120405.gif", "newsstand.naver.com/333",  "지역지"));
		newsData.add(new NewsClass("경북일보", "nsd103125356.gif", "newsstand.naver.com/337",  "지역지"));
		newsData.add(new NewsClass("경인일보", "nsd75053515.gif", "newsstand.naver.com/338",  "지역지"));
		newsData.add(new NewsClass("광주일보", "nsd113635473.gif", "newsstand.naver.com/083",  "지역지"));
		newsData.add(new NewsClass("국제신문", "nsd11332053.gif", "newsstand.naver.com/332",  "지역지"));
		newsData.add(new NewsClass("대전일보", "nsd11342450.gif", "newsstand.naver.com/089",  "지역지"));
		newsData.add(new NewsClass("매일신문", "nsd184317799.gif", "newsstand.naver.com/088",  "지역지"));
		newsData.add(new NewsClass("부산일보", "nsd8215253.gif", "newsstand.naver.com/082",  "지역지"));
		newsData.add(new NewsClass("영남일보", "nsd165845221.gif", "newsstand.naver.com/385",  "지역지"));
		newsData.add(new NewsClass("울산메일", "nsd14643703.gif", "newsstand.naver.com/386",  "지역지"));
		newsData.add(new NewsClass("인천일보", "nsd14814726.gif", "newsstand.naver.com/387",  "지역지"));
		newsData.add(new NewsClass("전남일보", "nsd14941869.gif", "newsstand.naver.com/388",  "지역지"));
		newsData.add(new NewsClass("전북일보", "nsd183759971.gif", "newsstand.naver.com/336",  "지역지"));
		newsData.add(new NewsClass("제주도민일보", "nsd19513821.gif", "newsstand.naver.com/389",  "지역지"));
		newsData.add(new NewsClass("제주의소리", "nsd115524760.gif", "newsstand.naver.com/334",  "지역지"));
		newsData.add(new NewsClass("중도일보", "nsd17122649.gif", "newsstand.naver.com/390",  "지역지"));
		newsData.add(new NewsClass("충청일보", "nsd162144955.gif", "newsstand.naver.com/391",  "지역지"));
		newsData.add(new NewsClass("충청투데이", "nsd14118621.gif", "newsstand.naver.com/331",  "지역지"));
		newsData.add(new NewsClass("OBS", "nsd101932455.gif", "newsstand.naver.com/340",  "지역지"));
	}
	
}

<Method Class>

package com.bjy;

import java.util.ArrayList;

public class MethodClass {
	
	public MethodClass() {}
	
	public ArrayList<NewsClass> search(String word) {
		ArrayList<NewsClass> searchList = new ArrayList<NewsClass>();
		ArrayList<NewsClass> newsData = new DataClass().newsData;
		
		// 신문 종류별로 검색 
		for(int i=0;i<newsData.size();i++) {
			if(newsData.get(i).kind.equals(word)) {
				searchList.add(newsData.get(i));
			}
		}
		return searchList;
	}
}

<PrintClass>

package com.bjy;

import java.util.ArrayList;
import java.util.Scanner;

public class PrintClass {
	static String extension = "";
	static String pathURL = "";
	
	public PrintClass() {
		
	}
	
	public void searchPrint(ArrayList<NewsClass> searchList, String searchWord) {
		if(searchList.size()<1) {
			System.out.printf("%s로 조회된 결과가 없습니다.", searchWord);
		}else {
			System.out.printf("%s로 조회된 결과는 총 %d건입니다", searchWord, searchList.size());
			System.out.println("=======================");
			for(NewsClass news : searchList) {
			/* 향상된 for문 : for(타입 변수명 : 배열) { 실행문 }
			 * 
			 */
				
				System.out.print(news.press + "\t");
				System.out.print(news.image + extension + "\t");
				System.out.print(pathURL + news.url + "\t");
				System.out.print(news.kind + "\n");
			}
		}
	}	
}

* 느낌점

문제를 풀면서 큰 흐름은 잘 짰으나 url의 데이터를 가공하고 출력할 때 전처리 전의 url 데이터를 어떻게 넣어야 할 지 몰라서 막혔다. 어차피 모든 배열의 요소의 url은 숫자를 제외한 앞의 내용이 공통적인 내용이기에 출력하는 기능을 하는 PrintClass의 static 변수로 넣어줘서 재사용하였다. 

막히는 부분이 있다면 그 변수 혹은 메서드가 어떤 기능을 하는지, 어떤 의미를 가지는지 그리고 어디에서 사용되어야 하는지 생각하면 코드를 더 쉽게 짤 수 있을 것 같다.