30일차 내용 정리

채공부·2025년 7월 4일

JavaSciprt

spread

... 변수명

  • 해당 연산자를 이용해서 배열에 저장된 내용을 새로운 배열에 펼쳐놓고 아이템이 추가된 배열을 얻어낼 수 있다
  • Object도 사용 가능
  • 배열 추가뿐만 아니라 수정된 배열을 얻어낼 수 있다
<script>
	const names = ["유재석", "박명수", "정준하"];
    const names2 = [...names, "노홍철"];

	const mem1 = {num:1, name:"유재석"};
	const mem2 = {...mem1, addr:"압구정"};
	const mem3 = {
		...mem1,
		addr:"압구정",
		isMan:true
	};

	const mem4 = {
		...mem3,
 		name:"하하"
	};
</script>
(3) ['유재석', '박명수', '정준하']
(4) ['유재석', '박명수', '정준하', '노홍철']

{num: 1, name: '유재석'}
{num: 1, name: '유재석', addr: '압구정'}
{num: 1, name: '유재석', addr: '압구정', isMan: true}

{num: 1, name: '하하', addr: '압구정', isMan: true}

destructuring

  • 배열과 Object의 구조를 분해해서 할당
    ⤷ 배열에 저장된 아이템을 변수 혹은 상수로 분해해서 할당

    ⭐ 할당 시 배열은 순서가 중요하며 Object는 순서가 중요하지 않고 key값이 중요하다
<script>
	const [a,b,c] = [10,20, ()=>{}, 40];
	const {num, name} = {num:1, name:"유재석", addr:"압구정", isMan:true};
</script>
a		10
b		20
c 		()=>{}
num		1
name	'유재석'
function useMem(arg){
            // arg는 Obejct type 이 된다 (아래에서 useMem()을 호출하게 된다면)
            // arg = {num:2, name:"박명수", addr:"이태원"}
            const num = arg.num;
            const name = arg.name;
        }

        function useMem2(num, name){
            // num은 number type, name은 string type 이 된다 
          	// (아래에서 useMem2() 을 호출하게 된다면)     
        }
        useMem({num:2, name:"박명수", addr:"이태원"});
        useMem2({num:3, name:"정준하", addr:"서래마을"});

JAVA

JFrame

// 필요한 필드 정의하기
JTextField inputName, inputAddr;

public MemberFrame() {
	// 레이아웃 설정
	setLayout(new BorderLayout());
		
	// JLable 2개
	JLabel label1 = new JLabel("이름");
	JLabel label2 = new JLabel("주소");
		
	// JTextField 1개
	inputName = new JTextField(10);
	inputAddr = new JTextField(10);
	
    // 패녈에 UI 배치
	JPanel panel = new JPanel();
	panel.add(label1);
	panel.add(inputName);
	panel.add(label2);
	panel.add(inputAddr);
    
    // 패널의 배경색 설정
	panel.setBackground(Color.orange);
	// 패널을 프레임의 위쪽에 배치
	add(panel, BorderLayout.NORTH);
 }
    
 public static void main(String[] args) {
	MemberFrame f = new MemberFrame();
	f.setTitle("회원 정보");
	f.setBounds(100,100,800,500);
	f.setDefaultCloseOperation(EXIT_ON_CLOSE);
	f.setVisible(true);
}   

JOptionPane

.showMessageDialog : 화면에 알림창

if(isSuccess) {
	// this 는 나의 참조값 ( 나 => MemberFrame 객체 => Component type 이기도 하다)
	JOptionPane.showMessageDialog(this, "추가 성공");
} else {
	JOptionPane.showMessageDialog(this, "추가 실패");
}
⭐ this 는 나의 참조값
   나 ➜ MemberFrame 객체 ➜ Component 

JTable

// 표현식으로 정보를 출력할 UI
JTable table;
// JTable 에 출력할 data 를 공급해줄 모델 객체
DefaultTableModel model;

// 회원 목록을 출력할 테이블
table = new JTable();
// 테이블의 컬럼명을 배열로 미리 준비한다
String[] colNames = {"번호", "이름", "주소"};
// 테이블에 연결할 모델 객체
model = new DefaultTableModel();
// 보델에 컬러명을 전달한다
model.setColumnIdentifiers(colNames);
model.setRowCount(0); // 처음에는 row 가 없도록
// 모델을 테이블에 연결
table.setModel(model);
// 테이블의 글자 크기와 행의 높이 조절
table.getTableHeader().setFont(new Font("Sans-serif", Font.BOLD, 18)); 
table.setFont(new Font("Sans-serif", Font.PLAIN, 16)); // 데이터 글자 크기 14
table.setRowHeight(25); // 각 행의 높이를 조정
        
// row 가 많은 경우 스크롤리 가능하도록 테이블에 scroll 기능을 부여한다
JScrollPane scroll = new JScrollPane(table);
// 테이블을 품고 있는 JScrollPane 을 프레임의 가운데에 배치시키기
add(scroll, BorderLayout.CENTER);

  • 회원 목록 출력 메소드 생성
public void printMember() {
	// 기존에 출력된 내용을 모두 삭제하고
	model.setRowCount(0);
		
	// MeberDao 객체를 이용해서 회원 목록을 얻어온 다음 실제 회원 목록을 table 에 반복문 돌면서 출력
	List<MemberDto> list = dao.selectAll();
	// 반복문 돌면서
	for (MemberDto tmp : list) {
		// MemberDto 객체 하나당 하나의 Object[] 를 만들어서
		Object[] row = {tmp.getNum(), tmp.getName(), tmp.getAddr()};
		// 모델에 추가하기
		model.addRow(row);
	}
}

JButton

  • MemberDaoMemberDto 사용

INSERT

JButton insertBtn = new JButton("저장");
panel.add(insertBtn);

//버튼의 동작
insertBtn.addActionListener((e)->{
	// 입력한 이름과 주소를 읽어와서
	var name = inputName.getText();
	var addr = inputAddr.getText();
					
	// MemberDto 객체에 이름과 주소를 담는다
	var dto = new MemberDto();
	dto.setName(name);
	dto.setAddr(addr);
						
	// MemberDao 객체를 이용해서 DB에 저장
	var dao = new MemberDao();
	var isSuccess = dao.insert(dto);
	if(isSuccess) {
		// this 는 나의 참조값 ( 나 => MemberFrame 객체 => Component type 이기도 하다)
		JOptionPane.showMessageDialog(this, "추가 성공");
	} else {
			JOptionPane.showMessageDialog(this, "추가 실패");
	}
	printMember();
});		

DELETE

JButton deleteBtn = new JButton("삭제");
panel.add(deleteBtn);

deleteBtn.addActionListener((e)->{
	// 선택된 row 의 index 값을 읽어온다
	int selectedRow = table.getSelectedRow();
	// 만일 선택된 row 가 없다면
	if(selectedRow == -1) {
		JOptionPane.showMessageDialog(this,"삭제할 행을 선택해 주세요!");
		return; // 메소드(함수)를 여기서 끝내기(리턴하기)
	}
	// 삭제할 회원의 Primary key 값(번호) 를 읽어와서
	int num = (int)model.getValueAt(selectedRow, 0);
	// DB 에서 삭제한다
	dao.deleteByNum(num);
	
	printMember();
});

UPDATE

var updateBtn = new JButton("수정");
panel.add(updateBtn);

updateBtn.addActionListener((e)->{
	// 선택된 row 의 index 값을 읽어온다
	int selectedRow = table.getSelectedRow();
	// 만일 선택된 row 가 없다면
	if(selectedRow == -1) {
		JOptionPane.showMessageDialog(this,"수정할 행을 선택해 주세요!");
		return; // 메소드(함수)를 여기서 끝내기(리턴하기)
	}
	// 선택한 row 에서 수정할 회원의 번호를 얻어낸다
	int num = (int)model.getValueAt(selectedRow, 0);
	// 수정할 회원의 전체 정보를 DB 에서 읽어온다
	MemberDto dto = dao.getByNum(num);
	// 수정양식 UI 를 JPanel 로 구성한다
	var inputName = new JTextField(10);
	var inputAddr = new JTextField(10);
	JPanel editPanel = new JPanel();
	editPanel.add(new JLabel("이름:"));
	editPanel.add(inputName);
	editPanel.add(new JLabel("주소:"));
	editPanel.add(inputAddr);
	// MemberDto 에 있는 정보를 JTextField 에 출력
	inputName.setText(dto.getName());
	inputAddr.setText(dto.getAddr());
	// JPanel 을 전달하면서 ConfirmDialog 를 띄운다
	int result = JOptionPane.showConfirmDialog(
			this,
			editPanel,
			num+" 번 회원 수정",
			// 확인 과 취소 버튼만
			JOptionPane.OK_CANCEL_OPTION
	);
	// 리턴되는 숫자값을 테스트로 콘솔창에 출력
	System.out.println(result);
	// 만일 확인 버튼을 누르면...
	if(result == JOptionPane.OK_OPTION) {
		// 입력한 이름과 주소를 읽어와서
		String name = inputName.getText();
		String addr = inputAddr.getText();
		// 수정을 반영
		MemberDto newDto = new MemberDto();
		newDto.setNum(num);
		newDto.setName(name);
		newDto.setAddr(addr);
		boolean isSuccess = dao.update(newDto);
		if(isSuccess) {
			JOptionPane.showMessageDialog(this, "수정 성공!");
		}else {
			JOptionPane.showMessageDialog(this, "수정 실패!");
		}
	}
	printMember();
});
profile
학원 공부 내용 정리

0개의 댓글