TIL/academy

국비 TIL(Today I Learned) 20220628 Bean, try ~ catch, Scanner

토희 2022. 6. 29. 08:54
728x90

Bean : 자료형 클래스

=> DTO(Data Type Object), VO(Value Object)

Type? 강사님만 Type이라고 함, 검색하면 다 Data Transfer Object라고 하는데

 

Getter: 데이터 취득용 메소드

 

Setter: 데이터 할당용 메소드

 

 

캡슐화: 데이터에 직접적인 접근을 제한하고, 간접적인 접근을 통하여 동작하게 하여 데이터를 은닉화하는 것을 나타내는것 

 

Bean 썼을때

장점 : 각 데이터 형태에 맞추어 보관 가능

단점 : 데이터의 종류가 변경될 때마다 적용을 새로 해야함, 유지보수 차원에서는 비효율적

 

Bean 강사님은 선호하지 않음

 

package com.java.test.bean;

public class TestBean {
	private int no;
	private String id;
	private String pw;

	// get 값 가져오기
	public int getNo() {
		return no;
	}

	// 값 넣고 싶으면 set, 전역변수 no에 지역변수 no를 넣어주는거임
	public void setNo(int no) {
		this.no = no;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

}

 

예외처리

: 발샐할 수 있는 예외에 대한 대처나 특정 상황을 통하여 예외를 발생시키는 행위

 

에러(Error) : 구문이나 형식 상 발생하는 문제. 컴파일이 불가능한 상태.

ex) int a = "abc"; 

예외(Exception) : 구문에는 문제가 없으나 구동중 발생하는 문제, 컴파일 후 실행은 가능.

ex) Integer.parseInt("abc");

 

예외처리 종류

https://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html

 

Exception (Java Platform SE 7 )

protected Exception(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) Constructs a new exception with the specified detail message, cause, suppression enabled or disabled, and writable stack trace enabled or disabl

docs.oracle.com

ArrayIndexOutOfBoundsException 우리가 많이 보는 예외

https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html

 

ArrayIndexOutOfBoundsException (Java Platform SE 7 )

 

docs.oracle.com

예외처리 3가지 생각하기

1. 구문상 예외처리

try {

 내용

} catch(예외클래스 변수명){

 내용2

} ...  => catch가 n개 가능

=> 내용을 시도한다. 만약, 예외클래스에 해당하는 예외가 발생할 경우 내용2를 실행한다. 내용실행이 종료되면 다음으로 넘어간다.

catch에 지정된 예외클래스의 허용범위 내에서 처리

만약, catch가 복수로 사용될 경우 범위가 좁은것(자식클래스)부터 작성해야 함

이렇게 오류나면 실행 순서 변경 시키기

Exception 을 밑으로!

보통 세분화 해서 안하고 catch (Exception e) 이거 하나로 다 처리

 

throw : 뒤에 지정된 예외객체를 강제 발생

package com.java.test.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import com.java.test.bean.TestBean;
import com.java.test.service.TestService2;

public class TestController2 {

	public static void main(String[] args) {
		TestBean tb = new TestBean();

		tb.setNo(1);
		tb.setId("Test");
		tb.setPw("1234");

		System.out.println(tb.getNo() + "\t" + tb.getId());

		try {
//			Integer.parseInt("abc");
			Integer.parseInt("123"); // 문제 없는 코드

			// throw : 뒤에 지정된 예외객체를 강제 발생, 왜 일부러 발생시키냐면은 자바는 오류를 발생시켜 분기점으로 사용하기 한다고, 오류
			// 발생시키면 다른 페이지로 이동
			throw new ArrayIndexOutOfBoundsException();
		} catch (NumberFormatException ne) {
			ne.printStackTrace();
		} catch (Exception e) {
			// printStackTrace() : 시스템에 현재 발생한 예외의 출력을 요청
			e.printStackTrace();

			// toString() : 발생한 예외 내용을 취득
			System.out.println("==>" + e.toString());
		}

		System.out.println("try ~ catch 이후 실행");

		TestService2 ts2 = new TestService2();

		try {
			ts2.test();
		} catch (Throwable e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 샘플 데이터 만들기
		// 목록형 쿼리, 목록형 데이터
		List<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

		for (int i = 10; i > 0; i--) {
			HashMap<String, String> data = new HashMap<String, String>();

			data.put("NO", Integer.toString(i));
			data.put("TITLE", "Test" + i);
			data.put("WRITER", "Tester");

			list.add(data);
		}

		// 오름차순으로 변환하여 결과를 출력
		// 주소교체
		HashMap<String, String> temp1;
		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < i; j++) {
				if (Integer.parseInt(list.get(j).get("NO")) < Integer.parseInt(list.get(j).get("NO"))) {
					temp1 = list.get(i);
					list.set(i, list.get(j));
					list.set(j, temp1);
				}
			}
		}

		HashMap<String, String> temp2;
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = i + 1; j < list.size(); j++) {
				if (Integer.parseInt(list.get(j).get("NO")) > Integer.parseInt(list.get(j).get("NO"))) {
					temp2 = list.get(i);
					list.set(i, list.get(j));
					list.set(j, temp2);
				}
			}
		}

		HashMap<String, String> temp;
		for (int i = 0; i < list.size() - 1; i++) {
			for (int j = i + 1; j < list.size(); j++) {
				if (Integer.parseInt(list.get(i).get("NO")) > Integer.parseInt(list.get(j).get("NO"))) {
					temp = list.get(i);
					list.set(i, list.get(j));
					list.set(j, temp);
				}
			}
		}

		// 출력
		for (int i = 0; i < list.size(); i++) {
			System.out.println(
					list.get(i).get("NO") + "\t" + list.get(i).get("TITLE") + "\t" + list.get(i).get("WRITER"));
		}

		for (HashMap<String, String> data : list) {
			System.out.println(data.get("NO") + "\t" + data.get("TITLE") + "\t" + data.get("WRITER"));
		}

	}

}

 

throws : 발생할수도 있는 예외에 대해 경고,

가져다 쓰는쪽에서 예외처리 해줘야함

throws 를 많이씀!!

package com.java.test.service;

public class TestService2 {

	// throws : 예외가 발생할 수도 있는 상태. 안전장치. 복수지정 가능. ,로 구분
	// 메소드 사용처에 문제가 발생할 수도 있음을 알림.
	// 외부 접속이나 인자로 받아서 처리하느 부분에 에외가 생길 수 있는 경우 사용
	public void test() throws Throwable {
		System.out.println("test메소드");

	}
}

 

 

 

nextLine() : asdf asdf 엔터         asdf asdf 

nextInt() : 1                                1

next() : asdf(뒤에 공백이있음)   asdf

nextLine() : 종료

 

next(), nextLine() 하고 같이 쓸때는 엔터에 대한 처리 해줘야함

package com.java.test.controller;

import java.util.Scanner;

public class TestController3 {

	public static void main(String[] args) {
		// Scanner : 입력을 지원하는 클래스
		// Scanner 변수명 = new 생성자(입력객체);
		// System.in : Java를 통해서 데이터를 입력받는 객체
		Scanner sc = new Scanner(System.in);
		// nextLine() : 입력대기상태에 있다가 엔터가 입력되면 엔터 직전까지 취득
		String s = sc.nextLine();
		System.out.println(s);

		int a = sc.nextInt(); // 엔터포함 X 문자 들어오면 에러 InputMismatchException
		System.out.println(a);

		String s2 = sc.next(); // 엔터 빼고
		System.out.println(s2);
		sc.nextLine(); // 남은 엔터 처리

		s = sc.nextLine();
		System.out.println(s);

	}

}

 

 

 

728x90