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
ArrayIndexOutOfBoundsException 우리가 많이 보는 예외
https://docs.oracle.com/javase/7/docs/api/java/lang/ArrayIndexOutOfBoundsException.html
예외처리 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);
}
}
'TIL > academy' 카테고리의 다른 글
국비 TIL(Today I Learned) 20220704 오라클 ORDER BY, DUAL, 사칙연산, CASE, DECODE (0) | 2022.07.04 |
---|---|
국비 TIL(Today I Learned) 20220701 모의주식, 오라클 (0) | 2022.07.01 |
국비 TIL(Today I Learned) 20220603 회원가입 폼 만들기 (0) | 2022.06.03 |
국비 TIL(Today I Learned) 20220602 게시판 만들기 (0) | 2022.06.02 |
국비 TIL(Today I Learned) 20220531 jsp랑 DB랑 연결하기 (0) | 2022.05.31 |