<상속예제>
// 상속
package com.step5;
class Super{
int i;
Super(){
System.out.println("Super()호출");
}
void methodA() {
System.out.println("methodA()");
}
void methodA(int i) {
System.out.println("methodA()");
}
}
class Sub extends Super{
Sub(){
System.out.println("Sub()호출");
i=2;
}
@Override
void methodA(int x) {
System.out.println("Super methodA(int i)");
}
}
public class Extends1 {
public static void main(String[] args) {
Sub sub = new Sub();
System.out.println(sub.i);
sub.methodA(0);
}
}
/*
부모가 가진 전변과 메소드 모두는 상속받은 클래스에서 호출이 가능함
자손을 인스턴스화 하더라도 먼저 부모 생성자가 호출된다
동일한 메소드가 부모와 자손 둘 다 있을 때 부모 메소드는 shadow 메소드가 된다. (호출이 안 됨)
상속받은 클래스가 더 누릴 수 있다 | 아니다. 자손클래스가 더 누릴(변수와 메소드) 수 있다.
여러 계층의 상속관계를 가진 클래스의 경우 가급적 하위 클래스를 상속받는 것이 더 많은 변수와 메소드를 누릴 수 있다.
*/
<예제1>
package com.step5;
public class Array21 {
public static void main(String[] args) {
int is[][] = new int[2][3];
is = new int[][] {{1,2,3},{4,5,6}};
int is2[][]= {{1,2,3},{4,5,6}}; // JSON 포맷 - web개발
System.out.println(is.length); // 2
System.out.println(is[0].length); // 3 - 컬럼명과 변수명 통일함
System.out.println(is[1].length); // 3
for(int x=0;x<is.length;x++) { // x는 로우값이다. 0,1
for(int y=0;y<is[x].length;y++) {
System.out.println("is["+x+"]["+y+"]="+is[x][y]);
}
}
is[0] = new int[3];
is[1] = new int[3];
}
}
<예제2>
package com.step5;
public class Array22 {
public static void main(String[] args) {
String datas[][]= {
{"나신입","70","80","90"}
,{"나초보","60","70","80"}
,{"나일등","80","90","90"}
};
for(int x=0;x<datas.length;x++) {
for(int y=0;y<datas[x].length;y++) {
System.out.println("datas["+x+"]["+y+"]="+datas[x][y]);
}
}
}
}
<예제3-DeptDTO>
package com.step5;
public class DeptDTO {
private int deptno;
private String dname;
private String loc;
private EmpDTO empDTO;
public EmpDTO getEmpDTO() {
return empDTO;
}
public void setEmpDTO(EmpDTO empDTO) {
this.empDTO = empDTO;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
<예제3-EmpDTO>
package com.step5;
public class EmpDTO {
private int empno;
private String ename;
private String job;
private int deptno;
private String dname; // 반정규화, 역정규화
}
<예제-DeptManager>
package com.step5;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
// ActionListener al = new DeptManager();
// 자바는 단일 상속만 가능하다. - 다중상속은 불가함 - 다중상속의 단점을 보완하기 위해 인터페이스가 제공됨
// 단 인터페이스는 여러 개를 implements 할 수 있다(추상클래스, 인터페이스는 설계관점에서 중요함-특징, 컨벤션)
public class DeptManager extends JFrame implements ActionListener {
// 선언부
String header[]= {"부서번호","부서명","지역"};
String datas[][]=new String[0][0]; // 2차 배열 - 대괄호가 2쌍이 필요함
// 생성자의 파라미터를 통해서 서로 다른 클래스가 의존관계를 맺고 하나의 기능을 서비스 할 수 있다.
// 생성자도 파라미터를 여러 개 가질 수 있다 - 메소드 오버로딩(개수, 타입이 달라야만 한다)
DefaultTableModel dtm_dept = new DefaultTableModel(datas, header); // datas 2차 배열, header 1차 배열
// <table> 양식 자바가 있어야 DataSet 구성함
JTable jt_dept = new JTable(dtm_dept);
JScrollPane jsp_dept=new JScrollPane(jt_dept);
JPanel jp_north = new JPanel();
JButton jbtnSelect = new JButton("조회");
JButton jbtnAdd = new JButton("행추가");
JButton jbtnDel = new JButton("행삭제");
JButton jbtnExit = new JButton("종료");
// 생성자
DeptManager(){
initDisplay();
} ////////// end of DeptManager
// 화면처리부
public void initDisplay() {
jbtnSelect.addActionListener(this);
jbtnSelect.addActionListener(this);
jp_north.setLayout(new FlowLayout(FlowLayout.LEFT));
jp_north.add(jbtnSelect);
jp_north.add(jbtnAdd);
jp_north.add(jbtnDel);
jp_north.add(jbtnExit);
this.add("North",jp_north);
this.add("Center",jsp_dept);
this.setSize(500,400); // this: DeptManager
this.setVisible(true);
} ////////// end of initDisplay
// 메인메소드
public static void main(String[]args) {
JFrame.setDefaultLookAndFeelDecorated(true);
DeptManager dm = new DeptManager(); // new JFrame()도 호출되는 것이다
}
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("actionPerformed 호출은 반드시 ActionListener가 있어야 됨");
Object obj = e.getSource();
// 너 조회버튼 누른거야?
if(obj==jbtnSelect) {
System.out.println("조회버튼 클릭"); // log
String sample[][] = {
{"10","영업부","부산"}
,{"20","개발부","대전"}
,{"30","운영부","인천"}
};
this.getContentPane().removeAll();
dtm_dept = null;
dtm_dept = new DefaultTableModel(sample, header);
jt_dept = null;
jt_dept = new JTable(dtm_dept);
jsp_dept = null;
jsp_dept = new JScrollPane(jt_dept);
this.add("Center",jsp_dept);
this.revalidate();
this.repaint();
} ////////// end of if
} ////////// end of actionPerformed
}
<예제>
// 라이프사이클에 대한 설명 - 재료: JFrame, JPanel
// 치환, candidate
package com.step5;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Reload1 extends JFrame implements ActionListener {
// 선언부
JPanel jp = new JPanel();
JButton jbtnNew = new JButton("새로고침");
JButton jbtn = new JButton("조회");
// 생성부
// 화면처리부
public void initDisplay() {
jbtnNew.addActionListener(this);
jp.setBackground(Color.red);
this.add("Center",jp);
this.add("North",jbtnNew);
this.setSize(500,400);
this.setVisible(true);
}
// 메인메소드
public static void main(String[] args) {
Reload1 r = new Reload1();
r.initDisplay();
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == jbtnNew) {
Container cp = this.getContentPane();
cp.remove(jp);
JPanel jpCopy = null;
jp = null;
jp = new JPanel(); // 기존 객체는 candidate 상태로 빠진다(gc)
jpCopy = jp;
jpCopy.setBackground(Color.green);
this.add("Center",jpCopy);
this.revalidate();
this.repaint();
}
}
}
DataSet
변수-배열-객체배열-자료구조(컬렉션프레임워크, java.util.*)
List, Map, Set - 쿠키와 세션
Dataset 관련 API인 DefaualtTableModel을 이용해서 출력해 보기
로컬에서 처리하는 게 아니라 서버를 경유하여 화면처리한다
서버를 경유한다는 것만으로도 동기화 문제는 해결됨
RDBMS 제품 중에서 가장 비싸고 가장 신뢰도가 높은
오라클 11g 설치해 본다
처음으로 서버 제품군을 설치해 본다
Toad툴 설치 - 오라클 서버에 접속할 때 사용함
에러를 잡는데도 유리함
대용량데이터베이스 솔루션
튜닝에 필요한 실행계획을 볼 수 있는 도구
백업, 엑셀, txt
계정 정체 백업
테이블 전체 백업
ER-WIN - Entity Relation Diagram
용어정리
오라클 서버 - 데이터 영속성 보장받는대
RDBMS
pk: 기본키
fk: 외래키(조인할 때 사용하니까 기억해줘)
릴레이션
논리적 모델링
물리적 모델링
DML(SELECT, INSERT, UPDATE, DELETE)