본문 바로가기

programming/Gukbi

국비 교육 24일차 - 라이브러리 활용

728x90
반응형

라이브러리 활용이 중요하긴 한갑다 

주구장창 배우는 중이다. 그래도 오늘은 간만에 재밌는걸 배운 느낌이다. 확실히 그냥 문법보다는 뭐라도 만들어보는게 적성에 맞음을 실감하고 있다. 

 

 

일단 먼저 자바라이브러리 활용부터

import java.util.*;
import java.text.*; // 변환(Format)
// TO_CHAR('12345678', '99,999,999') => 12,345,678
public class MainClass {

	public static void main(String[] args) {
		//System.out.println(new Date());
		// 1. 시스템의 시간 읽기
		Date date=new Date();
		// 2. 날짜를 변환
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		String today=sdf.format(date);
		// 3. 실행
		System.out.println(today);
		// 4. 분리
		StringTokenizer st=new StringTokenizer(today, "-");
		String strYear=st.nextToken();
		String strMonth=st.nextToken();
		String strDay=st.nextToken();
		
		System.out.println("년도:"+strYear);
		System.out.println("월:"+strMonth);
		System.out.println("일:"+strDay);
		
		// 5. 정수형으로 변환
		int year=Integer.parseInt(strYear);
		int month=Integer.parseInt(strMonth);
		int day=Integer.parseInt(strDay);
		System.out.println("=====정수로 변환 후 출력========");
		System.out.println("년도:"+year);
		System.out.println("월:"+month);
		System.out.println("일:"+day);
		
		/*String today2=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);
		System.out.println(today2);*/
		
		
		
		
	}

}

날짜를 가져올 수 있는 Date 클래스를 가져와서 시스템의 시간을 읽어줬다. 

그 다음에 SimpleDateForamt 클래스로 시스템의 날짜를 정해진 형식에 맞춰서 today라는 변수에 저장한다. 

 

그리고 나서 String을 분리해주는 StringTokenizer를 사용해서 "-"구분자로 문자를 나눠서 각각 저장한다. 

한번 출력을 해주고, 그 문자를 다시 parseInt로 정수로 변환하여 저장해줬다. 

 

문자열을 반복적으로 어떤 형식에 맞춰 출력하고 싶으면 for문이 아닌 다른 방식으로 사용이 가능하다.

 

package com.sist.lib;
import java.text.*;
import java.util.Random;

public class MainClass3 {

	public static void main(String[] args) {
		
		double[] limits= {50,60,70,80,90};
		String[] grades= {"F", "D", "C", "B", "A"};
		
		int[] score=new int[10];
		Random r=new Random();
		for(int i=0; i<score.length; i++)
		{
			score[i]=r.nextInt(50)+51; // 0~49 => 51~100
		}
		ChoiceFormat format=new ChoiceFormat(limits,grades);
		for(int i=0; i<score.length; i++)
		{
			System.out.println(score[i]+":"+format.format(score[i]));
		}
	}

}

위에 써준 코드가 바로 해당하는 내용이다. 원래는 switch case나 for문을 돌려서 각각 학점의 알파벳을 출력해주는 프로그램을 썼었는데, 그냥 ChoiceFormat을 활용해서 해당하는 점수대와 알파벳을 맞춰줄 수 있었다. 

 

package com.sist.lib;
// MessageFormat => SQL문장을 만들때
/*
 * 	SQL
 * 	= DML
 * 		=SELECT
 * 		=INSERT
 * 		=UPDATE
 * 		=DELETE
 * 	=DDL
 * 	=DCL
 * 	=TCL	
 * 
 * 	PL/SQL
 */
import java.text.*;
// 데이터를 정해진 양식으로 출력할 때 주로 사용 (오라클 형식)
public class MainClass4 {

	public static void main(String[] args) {
		
		String msg="이름:{0}\n성별:{1}\n전화:{2}\n주소:{3}\n나이:{4}\n";
		Object[] obj= {"홍길동","남자","010-1111-1111", "서울",30};
		// Object는 모든 데이터형을 받을 수 있다
		String result=MessageFormat.format(msg, obj);
		System.out.println(result);
		// 일정하게 나오는 것들은 이렇게 쓰는게 편할 수 있음 
		
	}

}

MessageForamt도 마찬가지이다. 데이터를 정해진 양식으로 출력할때 이렇게 사용해주면 된다. 

 

다음은 외부라이브러리인 Jsoup을 활용해서 데이터를 긁어오는 방법을 배웠다. 

사실 여기부터 조금 재미있었다. 코드가 더 간단하기도 하고, 내가 원하는 데이터를 직접 긁어오는 연습도 가능했기 때문이다.. 

 

package com.sist.main;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
/*
 * <span class="cont_line">
					<strong class="tit_line">
 * <a href="http://v.movie.daum.net/v/20210126113114427" class="link_txt" data-tiara-layer="title" data-tiara-ordnum="2" data-tiara-id="20210126113114427" data-tiara-type="news">'미나리' 제목의 의미 "가족의 사랑"</a></strong>
					<a href="http://v.movie.daum.net/v/20210126113114427" 
					class="desc_line" data-tiara-layer="desc_line" 
					data-tiara-ordnum="2" data-tiara-id="20210126113114427" 
					data-tiara-type="news" style="height: auto;">
						[티브이데일리 최하나 기자] '미나리'가 미국 영화협회와 시상식을 휩쓸며 세계적인 관심을 받는 가운데, 영화 제목에 대한 이목이 집중되면서 감독과 배우가 말하는 영화 제목의 진짜 의미를 공개했다. 희망을 찾아 낯선 미국으로 떠나온 한국 가족의아주 특별한 여정을 담은, 2021년 전 세계가 기다린 원더풀한 이야기 '미나리'(감독 정이삭·배급 판씨네마)가 미국
					</a>
					<span class="state_line">
						티브이데일리<span class="txt_dot"></span><span class="screen_out">발행일자</span>21.01.26
					</span>
				</span>
			
 */

public class MainClass2 {

	public static void main(String[] args) {
	
		try
		{
			Document doc=Jsoup.connect("https://movie.daum.net/magazine/new").get();
			//System.out.println(doc);
			// 라이브러리 활용해서 한줄에 코딩한 것
			// but 안에 어떻게 코딩되어있는지 알아야 재정의를 할 수 있음
			
			Elements title=doc.select("span strong.tit_line");
			Elements content=doc.select("span a.desc_line");
			Elements com=doc.select("span span.state_line");
			for(int i=0; i<title.size(); i++)
			{
				System.out.println(title.get(i).text());
				System.out.println(content.get(i).text());
				System.out.println(com.get(i).text().replace("・", " "));
				System.out.println("==================================");
			}
		}catch(Exception ex) {}
	}

}

다음 영화 사이트를 connect로 가져와서 select로 해당 데이터들을 다 긁어오는 연습을 해봤다. 

데이터를 긁어올 때는 예외가 발생할 수 있어, 반드시 예외처리를 해주고 시작해야한다. 

 

원하는 데이터를 긁어올 수 있는 방법을 배웠기 때문에, 지금 한 번 연습으로 해보도록 하겠다. 

역시 조금 헤맸지만 원하는대로 출력했다..! 가수명에서 이상하게 이름이 두번 반복되길래 subString으로 뒤에는 잘라버렸다. 이게 뭐라고 뿌듯하다.

 

사실 뒤에 더 수업했지만 코드가 조금 꼬였던 탓에 아마 내일 아침에 다시하게 될 것 같다. 

일단 오늘은 데이터 긁어오는 것까지만 이해하고 내일 다시 제대로된 활용을 배우면 될듯 싶다. 

 

 

 

728x90
반응형