(14)-23.10.12[JAVA]

DANA·2023년 10월 12일

KDT-구디아카데미

목록 보기
14/56
<상속예제>
// 상속
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)

0개의 댓글