코딩에 정답은 없다? 설계하고자 하는 프로젝트에 따라 어떻게 변수를 선언할지, 클래스를 어떻게 나눌지, 어떤 메소드를 만들고 배치할지, 삭속을 받을지, 인터페이스를 활용할지 등 여러 고민을 하고 세워야 한다.
이종 간의 연계 처리 시(자바-자료구조 & UI-Dataset, 오라클 등) 서로 만나는 부분에 대한 추가적인 처리코드(예 : 자료구조를 Dataset에 초기화하는 코드) 필요함. 따라서 현 자료구조의 속성을 확인할 줄 알아야 함.
연동을 하려면 둘 사이의 인터페이스 부분이 필요하다.
System.out.println(li instanceof List); //true
System.out.println(li instanceof ArrayList); //true
예) 같은 백엔드 영역인 자바, 오라클도 같은 타입이어도 표현하는 타입 이름이 다름
자바 | 오라클 | |
---|---|---|
정수 | int, long | number(5) |
실수 | double, float | number(7,2) |
문자 | String | varchar2(가변형10), char(고정형10) |
오라클에 ‘hello’입력시
VO객체가 생성되면 바로 그 객체에 대한 스레드가 생겨서 관리함
package jdbc.oracle;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class List2 {
/*정의메소드*/
void methodA(List<BookVO> bookList) {
BookVO bVO = new BookVO(); //내 안에 변수는 네 가지(No, Title, Author, Price) 생기자마자 스레드가 관리함!
System.out.println(bVO.getB_title());
// bVO.b_title = "수학의정석"; //캡슐화되어있어서 초기화 불가 -> getter/setter를 사용하여 입력, 출력 가능
bVO.setB_title("수학의정석");
System.out.println(bVO.getB_title());
bVO = new BookVO(); //타입은 같지만, 객체가 달라짐.
System.out.println("=============");
System.out.println(bVO.getB_title());
System.out.println("=============");
}
void methodB(List<Map<String, Object>> bookList) {
}
/*메인메소드*/
public static void main(String[] args) {
List2 l2 = new List2();
l2.methodA(null);
}
}
VO | Map | |
---|---|---|
갖는 값 ? | 타입(값을 주고받는) 정해져 있음 | 키(VO의 변수명, 오라클에선 컬럼명)와 값(추상적, 미정, 다된다) |
public class List3 {
/*정의메소드*/
void methodA(List<BookVO> bookList) {
// 사용권 나신입 로그인 권한
System.out.println(bookList);
BookVO rbVO = bookList.get(0);
System.out.println((Integer)rbVO.getB_price() instanceof Integer); //인티저 타입인가? true
System.out.println((Integer)rbVO.getB_price() * 5); //인트로 타입이 정해져있기 때문에 연산 가능하다.
}
void methodB(List<Map<String, Object>> bookList) {
System.out.println(bookList);
Map<String, Object> rmap = bookList.get(0);
System.out.println(rmap.get("b_price") instanceof Integer); //인티저 타입인가? true
System.out.println(rmap.get("b_price") instanceof Object); //오브젝트 타입인가? true
System.out.println(rmap.get("b_price") instanceof String); //스트링 타입인가? false
// System.out.println(rmap.get("b_price") * 5); //인트가 아닌 오브젝트타입이어서 계산 x
}
제네릭을 사용하지 않으면, 타입을 체크하여 형전환을 개발자가 직접 해야한다. * 따라서 제네릭을 사용해야 한다.
map.put("b_no", 1); //
map.put("b_title", "혼자공부하는 자바"); //
System.out.println(map.get("b_no"));
System.out.println(map.get("b_title"));
System.out.println(map.get("b_author"));
// int b_price = map.get("b_price"); // 타입이 맞지 않음. 이게 VO와 Map을 제네릭으로 선택했을 때의 차이점??
int b_price = (int) map.get("b_price"); //이게 VO와 Map을 제네릭으로 선택했을 때의 차이점??
b_price = (int) map.get("b_price"); //이게 VO와 Map을 제네릭으로 선택했을 때의 차이점??
System.out.println(b_price); //리턴값이 "java.util.Map.get(Object)" is null
요구사항 : 나초보의 연봉 5000으로 수정
사용 메소드
/*생성자*/
public EmpManager() {
init();
}
/*정의메소드*/
public void init() { //선언과 생성을 나눌 때는 아래처럼 작성해야함
data = new String[][] {
{"7566","나신입","3000"},
{"7499","나초보","4000"},
{"7748","나일등","4500"}
};
/*메인메소드*/
public static void main(String[] args) {
EmpManager em = new EmpManager();
em.initDisplay();
}
@Override
public void actionPerformed(ActionEvent e) { //여기 파라미터값은 JVM이 넣어줌
Object obj = e.getSource();
//수정버튼 눌렀을 때
if(obj==jbtn_update) {//저장된 배열위치 확인 필요->초기화 진행
System.out.println("수정 버튼 클릭");
System.out.println(dtm.getRowCount());
for(int i=0;i<dtm.getRowCount();i++) { //테이블은 로우와 컬럼으로 구성되어 테이블 구조
//is가 붙는 메소드는 boolean을 리턴타입으로 가져서 if문, while문에서 사용한다 .
if(jt.isRowSelected(i)) { //너가 선택한 로우값은?
//나초보랑 같은 row값이라면? String name = dtm.getValueAt("나초보",1,1)
//나초보에 해당하는 row값이면 ? setValueAt
String cname = (String)dtm.getValueAt(i, 1);
System.out.println(cname);
if("나초보".equals(cname)) {
dtm.setValueAt(5000, i, 2);
}
else if("나신입".equals(cname)) {
dtm.setValueAt(3500, i, 2);
}
else if("나일등".equals(cname)) {
dtm.setValueAt(5500, i, 2);
}
}
}
}
}
문자열의 길이 확인 lenth(); 시 null인 경우 확인x
bVO.setB_author("");
System.out.println("author의 길이는? "+bVO.getB_author().length());
System.out.println("author는? "+bVO.getB_author());
bVO.setB_author(null);
System.out.println("author는? "+bVO.getB_author());
//System.out.println(bVO.getB_author().length()); //null 에러
/*===============
author의 길이는? 0
author는?
author는? null
===============*/