Vector
Object타입을 담을 수 있음(모든 타입을 담을 수 있다)
중간에 값을 삽입할 수 있고, 그다음 값들은 한 자리씩 뒤로 이동한다(자동 크기 조절 가능)
<>에 타입을 지정하지 않으면 여러 데이터 타입을 저장할 수 있다
package dev_java.tables;
import java.util.Vector;
public class Vector3 {
public static void main(String[] args) {
// 객체는 생성되었으나 방은 없다
Vector<Integer> v = new Vector<>();
// 그렇기에 0이 출력
System.out.println("사이즈 " + v.size()); // 0
// 비어있으니 true
System.out.println(v.isEmpty()); // true
System.out.println("==========");
// add해야 공간이 생기고 그 안에 값을 넣음, 인덱스0
v.add(1);
// 다시 1을 추가하고 변수에 대입, 인덱스1
boolean isExist = v.add(1);
// 사이즈는 2
System.out.println("사이즈 " + v.size()); // 2
// 인덱스0에 든 건 1
System.out.println("인덱스0의값 " + v.get(0)); // 1
// 인덱스1에 든 건 1
System.out.println("인덱스1의값 " + v.get(1)); // 1
// 벡터안에 값이 들어가있음
System.out.println(isExist); // true
// 비어있지 않음
System.out.println(v.isEmpty()); // false
// 값 1이 들어있음
System.out.println(v.contains(1)); // true
// 값 2는 들어있지 않음
System.out.println(v.contains(2)); // false
System.out.println("==========");
// 인덱스1의 값에 2를 추가
v.add(1, 2);
// 값 2가 들어있음
System.out.println(v.contains(2)); // true
// 인덱스1에 2가 들어감
System.out.println("인덱스1의값 " + v.get(1)); // 2
// 인덱스2에 1이 들어감
System.out.println("인덱스2의값 " + v.get(2)); // 1
System.out.println("==========");
// 인덱스 1의 값 2를 지움
System.out.println(v.remove(1)); // 2
// 크기는 2
System.out.println("사이즈 " + v.size()); // 2
// 하지만 2는 들어있지 않음
System.out.println(v.contains(2)); // false
}
}
package dev_java.tables;
import java.util.Vector;
public class Vector4 {
void methodA() {
String fruits[] = { "키위", "포도", "사과" };
Vector<String> vFruits = new Vector<>();
for (int i = 0; i < fruits.length; i++) {
vFruits.add(i, fruits[i]);
}
// 인덱스1에 토마토 추가 -> 1번 이후는 하나씩 밀림
vFruits.add(1, "토마토");
// 포도 삭제 (포도는 원래 인덱스1 -> 토마토 추가되서 인덱스2로 밀림 -> 인덱스2삭제)
// vFruits.remove(2);
// vFruits 출력
for (int i = 0; i < vFruits.size(); i++) {
// if문으로 "포도"가 포함되어있다면 지우도록 설정
if (vFruits.contains("포도")) {
vFruits.remove("포도");
}
System.out.print(vFruits.get(i) + " ");
}
}
void methodB() {
// 좋아하는 과일만 골라서 Vector에 담기
String fruits[] = { "키위", "포도", "사과", "토마토", "메론", "파인애플", "바나나", "복숭아" };
Vector<String> vFruits = new Vector<>();
for (int i = 0; i < fruits.length; i++) {
vFruits.add(i, fruits[i]);
}
// vFruits 출력
for (int i = 0; i < vFruits.size(); i++) {
if (vFruits.contains("사과") || vFruits.contains("파인애플")) {
vFruits.remove("사과");
vFruits.remove("파인애플");
}
System.out.print(vFruits.get(i) + " ");
}
}
void methodC() {
// 과일가게의 진열 상품
String fruits[] = { "키위", "포도", "사과", "토마토", "메론", "파인애플", "바나나", "복숭아" };
// 내가 사고싶은 과일이름
String myFruits[] = { "딸기", "체리", "바나나", "살구", "키위" };
// 구입할 과일만 골라서 Vector에 담기
Vector<String> vFruits = new Vector<>();
for (int i = 0; i < fruits.length; i++) {
for (int j = 0; j < myFruits.length; j++) {
if (fruits[i].equals(myFruits[j])) {
vFruits.add(fruits[i]);
}
}
} // end of for
// 구매한 과일 출력
System.out.print("구매한 과일: ");
for (String f : vFruits) {
System.out.print(f + " ");
}
}
public static void main(String[] args) {
Vector4 v4 = new Vector4();
v4.methodA();
System.out.println("\n=====");
v4.methodB();
System.out.println("\n=====");
v4.methodC();
}
}
// 키위 토마토 사과
// =====
// 키위 포도 토마토 메론 바나나 복숭아
// =====
// 구매한 과일: 키위 바나나
package dev_java.tables;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Vector;
public class Vector5 {
Vector<String[]> vDepts = new Vector<>();
String deptsArr[][] = { { "10", "개발부", "서울", "010-123-4567" },
{ "20", "인사부", "인천", "010-234-5678" },
{ "30", "총무부", "부산", "010-345-6789" }
};
// 배열을 벡터에 넣는 메소드
void vSet() {
for (int i = 0; i < deptsArr.length; i++) {
vDepts.add(deptsArr[i]);
}
}
// 배열을 출력하는 메소드
void vPrint() {
for (int i = 0; i < vDepts.size(); i++) {
System.out.println(Arrays.toString((vDepts.get(i))));
}
System.out.println("==========");
}
// 스캐너로 입력된 번호의 행을 삭제하는 메소드
void vRemove() {
Scanner s = new Scanner(System.in);
System.out.print("삭제하고싶은 배열 번호 입력: ");
int i = s.nextInt();
if (i <= vDepts.size()) {
System.out.println("삭제된 배열:" + Arrays.toString((vDepts.get(i - 1))));
vDepts.remove(i - 1);
} else {
System.out.println("잘못된 입력입니다! 올바른 범위의 숫자를 입력해주세요.");
}
s.close();
System.out.println("==========");
}
// 스캐너로 입력된 부서번호의 행을 삭제하는 메소드
void vRemoveDeptNo(String num) {
String[] oneRow = new String[vDepts.size()];
for (int i = 0; i < vDepts.size(); i++) {
oneRow = vDepts.get(i); // vDepts을 oneRow에 담음
if (num.equals(oneRow[0])) { // 만약 부서번호와 입력값이 같다면
vDepts.remove(i); // 그 행을 지움
}
}
if (!(num.equals(oneRow[0]))) {
System.out.println("해당하는 부서 번호가 없습니다.");
}
}
public static void main(String[] args) {
Vector5 v5 = new Vector5();
v5.vSet();
v5.vPrint();
// 방법1-행번호로 지우기
v5.vRemove();
v5.vPrint();
// 방법2-부서번호로 지우기
Scanner s = new Scanner(System.in);
System.out.print("삭제할 부서번호: ");
String num = s.nextLine();
v5.vRemoveDeptNo(num);
s.close();
v5.vPrint();
}
}
package dev_java.tables;
import java.util.Scanner;
import java.util.Vector;
public class Vector6 {
Vector<String[]> vDepts = new Vector<>();
String depts[][] = { { "10", "개발부", "서울", "010-123-4567" },
{ "20", "인사부", "인천", "010-234-5678" },
{ "30", "총무부", "부산", "010-345-6789" }
};
void initVector() {
for (int i = 0; i < depts.length; i++) {
vDepts.add(depts[i]); // 벡터에 담기는 것은 1차배열(컬럼의 수는 바뀔 수 있다.)
}
}
void initVectorPrint() {
for (int i = 0; i < vDepts.size(); i++) {
String[] oneRow = vDepts.get(i);
// System.out.println(oneRow.toString()); // 주소번지 출력
for (int j = 0; j < oneRow.length; j++) {
System.out.print(oneRow[j] + " ");
}
System.out.println();
}
}
public static void main(String[] args) {
Vector6 v6 = new Vector6();
// initVector 메소드를 경유하지 않았으므로 size는 0이다
v6.initVector();
System.out.println(v6.vDepts.size()); // 메소드를 경유한 후 0 -> 3
// vDepts.get(0) -> {"10", "개발부", "서울", "010-123-4567"}
v6.initVectorPrint();
System.out.print("삭제하고자 하는 부서번호를 입력하세요 ==> ");
Scanner s = new Scanner(System.in);
int deptNo = s.nextInt();
for (int i = 0; i < v6.vDepts.size(); i++) {
String[] oneRow = v6.vDepts.get(i);
if (deptNo == Integer.parseInt(oneRow[0])) {
v6.vDepts.remove(i);
}
}
s.close();
// 삭제한 뒤 남은 정보 출력
v6.initVectorPrint();
}
}
객체 배열
객체를 저장하는 배열
배열의 자료형을 클래스명(사용자 정의 클래스)로 지정하여 활용함
package dev_java.week1_3;
public class Book {
// 전역변수 책번호, 제목, 가격 선언
int bookNum;
String bookTitle;
int bookPrice;
public Book(int bookNum, String bookTitle, int bookPrice) { // 책번호, 제목, 가격을 필요로하는 생성자 Book
this.bookNum = bookNum; // 전역변수와 파라미터 안의 지역변수를 일치시킴
this.bookTitle = bookTitle;
this.bookPrice = bookPrice;
bookInfo(); // 생성자를 호출하면 자동으로 정보 출력
}
public void bookInfo() {
System.out.println("번호: " + bookNum + "\n제목: " + bookTitle + "\n가격: " + bookPrice);
System.out.println();
}
public static void main(String[] args) {
Book book[] = new Book[3]; // 객체 배열 선언 및 생성을 했지만 실제 객체가 만들어지진 않음!
book[0] = new Book(001, "이것이 자바다", 50000); // Book객체가 실제로 생성됨!
book[1] = new Book(002, "자바의 정석", 45000);
book[2] = new Book(003, "점프 투 자바", 40000);
for (Book b : book) {
System.out.println(b);
}
}
}
// 번호: 1
// 제목: 이것이 자바다
// 가격: 50000
// 번호: 2
// 제목: 자바의 정석
// 가격: 45000
// 번호: 3
// 제목: 점프 투 자바
// 가격: 40000
// dev_java.week1_3.Book@5e91993f
// dev_java.week1_3.Book@1c4af82c
// dev_java.week1_3.Book@379619aa
package dev_java.tables;
class T1 {
int i = 1;
}
public class T1Main {
public static void main(String[] args) {
T1[] t1s = new T1[3];
T1 t1 = new T1();
t1s[0] = t1;
System.out.println(t1); // t1생성, 주소번지@4517d9a3
t1 = new T1();
t1s[1] = t1;
System.out.println(t1); // t1생성, 주소번지@372f7a8d
t1 = new T1();
t1s[2] = t1;
System.out.println(t1); // t1생성, 주소번지@2f92e0f4
System.out.println("=====");
for (T1 t : t1s) {
System.out.println(t + " ");
}
}
}
package dev_java.tables;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Button1 extends JFrame {
// 선언부
String jbtn_label[] = { "입력", "수정", "삭제" };
JPanel jp_north = new JPanel();
JPanel jp_south = new JPanel();
JButton jbtn_ins = new JButton(jbtn_label[0]); // 버튼 직접 성성
JButton jbtn_upd = new JButton(jbtn_label[1]);
JButton jbtn_del = new JButton(jbtn_label[2]);
JButton[] jbtns = new JButton[3]; // 버튼 객체배열로 생성
// 생성자
public Button1() {
initDisplay();
}
// 화면그리기
public void initDisplay() {
jp_north.add(jbtn_ins); // 버튼 직접 생성
jp_north.add(jbtn_upd);
jp_north.add(jbtn_del);
for (int i = 0; i < jbtns.length; i++) { // 버튼 객체배열로 생성
jbtns[i] = new JButton(jbtn_label[i]);
jp_south.add(jbtns[i]);
}
this.add("North", jp_north);
this.add("South", jp_south);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(300, 400);
this.setVisible(true);
}
// 메인메소드
public static void main(String[] args) {
new Button1();
}
}
package dev_java.tables;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Button2 extends JFrame {
// 선언부
String jbtn_label[] = { "입력", "수정", "삭제" };
JPanel jp_north = new JPanel();
JButton jbtn_ins = new JButton(jbtn_label[0]);
JButton jbtn_upd = new JButton(jbtn_label[1]);
JButton jbtn_del = new JButton(jbtn_label[2]);
Vector<JButton> vbtns = new Vector<>(jbtn_label.length); // 버튼 벡터로 생성
JButton[] jbtns = { jbtn_ins, jbtn_upd, jbtn_del };
// 생성자
public Button2() {
initDisplay();
}
// 화면그리기
public void initDisplay() {
for (int i = 0; i < jbtns.length; i++) { // 버튼 벡터로 생성
vbtns.add(jbtns[i]);
jp_north.add(vbtns.get(i));
}
this.add("North", jp_north);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(300, 400);
this.setVisible(true);
}
// 메인메소드
public static void main(String[] args) {
new Button2();
}
}
package dev_java.tables;
import java.util.Vector;
public class Vector7 {
public static void main(String[] args) {
String depts[][] = { { "10", "개발부", "서울" },
{ "20", "인사부", "인천" },
{ "30", "총무부", "부산" }
};
DeptVO[] dVOS = new DeptVO[depts.length]; // DeptVO타입 객체배열 dVOS선언 및 생성
Vector<DeptVO> vDepts = new Vector<>(); // DeptVO타입 벡터 vDepts선언 및 생성
DeptVO dvo = new DeptVO(10, "개발부", "서울"); // DeptVO생성자에 맞춰 부서번호, 이름, 지역 입력
dVOS[0] = dvo; // 그 값을 객체배열 dVOS에 입력
vDepts.add(dvo); // 그 값을 벡터 vDepts에 입력
dvo = new DeptVO(20, "인사부", "인천");
dVOS[1] = dvo;
vDepts.add(dvo);
dvo = new DeptVO(30, "총무부", "부산");
dVOS[2] = dvo;
vDepts.add(dvo);
// 객체배열 dVOS 출력
for (int i = 0; i < dVOS.length; i++) {
System.out.println(dVOS[i].getDeptNo() + " " + dVOS[i].getDeptName() + " " + dVOS[i].getDeptLoc());
}
System.out.println();
// 벡터 DeptVO 출력
for (int i = 0; i < vDepts.size(); i++) {
DeptVO temp = vDepts.get(i);
System.out.println(temp.getDeptNo() + " " + temp.getDeptName() + " " + temp.getDeptLoc());
}
}
}
// 10 개발부 서울
// 20 인사부 인천
// 30 총무부 부산
// 10 개발부 서울
// 20 인사부 인천
// 30 총무부 부산
package dev_java.tables;
public class DeptVO {
private int deptNo; // 같은 클래스 내에서만 접근 가능
private String deptName;
private String deptLoc;
// 디폴트 생성자는 필요없지만 파라미터가 있는 생성자가 하나라도 선언되면
// 제공하는 것을 원칙으로 한다
public DeptVO() {
}
public DeptVO(int deptNo, String deptName, String deptLoc) { // 부서 번호, 이름, 위치를 파라미터로 요구하는 생성자
this.deptNo = deptNo; // this로 전역변수와 파라미터의 지역변수를 연결
this.deptName = deptName;
this.deptLoc = deptLoc;
}
//getter, setter를 이용해 private인 변수 사용 가능
public int getDeptNo() {
return this.deptNo;
}
public void setDeptNo(int deptNo) {
this.deptNo = deptNo;
}
public String getDeptName() {
return this.deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
public String getDeptLoc() {
return this.deptLoc;
}
public void setDeptLoc(String deptLoc) {
this.deptLoc = deptLoc;
}
}
package dev_java.tables;
import java.util.Vector;
public class DeptList {
Vector<DeptVO> vDepts = new Vector<>(); // 벡터 vDepts 선언 및 생성(초기화x)
// 부서 등록-성공하면 1, 실패하면 0 반환
int deptInsert(DeptVO pdVO) {
int result = -1;
boolean isOk = vDepts.add(pdVO); // true
result = isOk ? 1 : 0; // isOk가 true이니 1 반환
return result;
}
// DeptVO를 쓰지 않았을 경우 파라미터가 길어짐
// int deptInsert(int deptNo, String deptName, String deptLoc) {
// }
// 부서 수정 -> 부서명과 지역만 수정가능
int deptUpdate(DeptVO pdVO) {
int result = -1;
boolean isOk = false;
for (int i = 0; i < vDepts.size(); i++) {
DeptVO editVO = vDepts.get(i); // 변수를 안쓰고 vDepts.get(i).getDeptNo()같이 도트연산자를 반복해서쓰면,
// 코드가 길어졌을 때 NullPointerException 잡기 어려워짐!
if (pdVO.getDeptNo() == editVO.getDeptNo()) {
isOk = vDepts.set(i, pdVO) != null; // 해당 값이 null이 아니면 true
}
}
result = isOk ? 1 : 0;
return result;
}
// 부서 삭제
int deptDelete(int deptNo) {
int result = -1;
boolean isOk = false;
for (int i = 0; i < vDepts.size(); i++) {
DeptVO delVO = vDepts.get(i);
if (deptNo == delVO.getDeptNo()) {
isOk = vDepts.remove(delVO);
}
}
result = isOk ? 1 : 0;
return result;
}
// 부서 상세정보
String deptView(int deptNo) {
String result = null;
for (int i = 0; i < vDepts.size(); i++) {
DeptVO infoVO = vDepts.get(i);
if (deptNo == infoVO.getDeptNo()) {
result = deptNo + "번 부서 정보: " + infoVO.getDeptName() + ", " + infoVO.getDeptLoc();
}
}
return result;
}
// 전체 조회
void getDeptList() {
for (int i = 0; i < vDepts.size(); i++) {
DeptVO allVO = vDepts.get(i);
System.out.println(allVO.getDeptNo() + ", " + allVO.getDeptName() + "," + allVO.getDeptLoc());
}
System.out.println();
}
// 부서세팅
void setDdeptList() {
DeptVO dvo = new DeptVO(10, "개발부", "서울");
vDepts.add(dvo);
dvo = new DeptVO(20, "인사부", "인천");
vDepts.add(dvo);
dvo = new DeptVO(30, "총무부", "부산");
vDepts.add(dvo);
}
public static void main(String[] args) {
DeptList deptList = new DeptList();
deptList.setDdeptList(); // 부서 세팅
deptList.getDeptList(); // 전체 조회
DeptVO dvo = new DeptVO(40, "자재부", "대전");
deptList.deptInsert(dvo); // 부서 등록
deptList.getDeptList();
System.out.println(deptList.deptView(10)); // 10번부서 상세정보 출력
System.out.println();
deptList.deptDelete(10);// 10번 부서 삭제
deptList.getDeptList();
dvo = new DeptVO(20, "자재관리부", "수원");
deptList.deptUpdate(dvo); // 부서 수정
deptList.getDeptList();
}
}
// 10, 개발부,서울
// 20, 인사부,인천
// 30, 총무부,부산
// 10, 개발부,서울
// 20, 인사부,인천
// 30, 총무부,부산
// 40, 자재부,대전
// 10번 부서 정보: 개발부, 서울
// 20, 인사부,인천
// 30, 총무부,부산
// 40, 자재부,대전
// 20, 자재관리부,수원
// 30, 총무부,부산
// 40, 자재부,대전
package dev_java.example.ex221215;
// ***연습문제2***
// -10에서 10사이의 정수 10개를 랜덤하게 채번하여 음수와 양수의 합계를 구하는 프로그램을 작성하시오.
// *출력)
// *배열 : 9 -2 -3 8 0 -3 -8 -6 -2 0
// *음수합 : -24
// *양수합 : 17
public class Exam2_221215_1 {
int users[] = null;
int plus;
int minus;
// size를 넣으면 그만큼의 랜덤한 숫자가 나오는 메소드
void setArray(int size) {
users = new int[size];
for (int i = 0; i < size; i++) {
users[i] = (int) (Math.random() * 21) - 10;
System.out.print(users[i] + " ");
}
System.out.println();
}
// 각 양수, 음수끼리 더해주는 메소드
void total() {
plus = 0;
minus = 0;
for (int i = 0; i < users.length; i++) {
if (users[i] < 0) {
minus += users[i];
} else if (users[i] > 0) {
plus += users[i];
}
}
}
// 더해진 양수, 음수를 출력하는 메소드
void result() {
System.out.println("음수합: " + minus);
System.out.println("양수합: " + plus);
}
public static void main(String[] args) {
Exam2_221215_1 ex2 = new Exam2_221215_1();
ex2.setArray(10);
ex2.total();
ex2.result();
}
}
package dev_java.example.ex221215;
// ***연습문제3***
// 0 부터 9사이의 임의의 수를 100개를 채번하여 한 줄에 10개씩
// 출력하고 그 숫자의 빈도수를 계산하여 출력하시오
// 원본 : 0 1 2 3 4 5 6 7 8 9
// 2 5 6 8 7 8 9 0 1 1
// 5
// 3
// 3
// 7
// 9
// 2
// 0 4 5 6 6 7 8 8 9 9
// 숫자 : 0 1 2 3 4 5 6 7 8 9
// 개수 : 10 9 18 11 7 9 15 14 7 5
public class Exam3_221215_1 {
int counts[] = new int[10];
int datas[] = new int[100];
// 100개 변수 초기화
int[] initArray(int datas[], int size) {
int i;
for (i = 0; i < datas.length; i++) {
datas[i] = (int) (Math.random() * 10);
}
dataPrint(datas);
return datas;
}
// 변수 출력
void dataPrint(int[] datas) {
for (int i = 0; i < datas.length; i++) {
System.out.print(datas[i]);
if (i % 10 == 9) {
System.out.println();
}
}
}
// 빈도검사 배열에 들어있는 숫자를 증가시킴
void numberCount(int[] datas) {
int index = 0;
for (int i = 0; i < 100; i++) {
index = datas[i];
counts[index]++;
}
}
public static void main(String[] args) {
Exam3_221215_1 ex3 = new Exam3_221215_1();
ex3.initArray(ex3.datas, 100);
ex3.numberCount(ex3.datas);
for (int i = 0; i < ex3.counts.length; i++) {
System.out.print(ex3.counts[i] + " ");
}
}
}
package dev_java.tables;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
// JDialog도 디폴트가 BorderLayout임-JP_center를 중앙에 배치
public class JTable7Dialog extends JDialog {
// 선언부
JPanel jp_center = new JPanel();
JScrollPane jsp_center = new JScrollPane(jp_center);
JPanel jp_south = new JPanel();
JLabel jlb_deptNo = new JLabel("부서번호");
JTextField jtf_deptNo = new JTextField(10);
JLabel jlb_deptName = new JLabel("부서명");
JTextField jtf_deptName = new JTextField(20);
JLabel jlb_deptLoc = new JLabel("지역");
JTextField jtf_deptLoc = new JTextField(20);
// jp_south속지에 버튼 붙임
JButton jbtn_save = new JButton("저장");
JButton jbtn_close = new JButton("닫기");
// 생성자
public JTable7Dialog() {
initDisplay();
}
// 화면그리기
public void initDisplay() {
// 레이아웃 설정
jp_center.setLayout(null);
jp_south.setLayout(new FlowLayout(FlowLayout.RIGHT));
jlb_deptNo.setBounds(20, 20, 80, 20);
jtf_deptNo.setBounds(120, 20, 80, 20);
jlb_deptName.setBounds(20, 45, 100, 20);
jtf_deptName.setBounds(120, 45, 150, 20);
jlb_deptLoc.setBounds(20, 70, 100, 20);
jtf_deptLoc.setBounds(120, 70, 150, 20);
jp_center.add(jlb_deptNo);
jp_center.add(jtf_deptNo);
jp_center.add(jlb_deptName);
jp_center.add(jtf_deptName);
jp_center.add(jlb_deptLoc);
jp_center.add(jtf_deptLoc);
jp_south.add(jbtn_save);
jp_south.add(jbtn_close);
this.add("Center", jsp_center);
this.add("South", jp_south);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(400, 360);
this.setVisible(true);
}
// 메인
public static void main(String[] args) {
new JTable7Dialog();
}
}
'국비학원 > 수업기록' 카테고리의 다른 글
국비 지원 개발자 과정_Day17 (1) | 2022.12.20 |
---|---|
국비 지원 개발자 과정_Day16 (0) | 2022.12.19 |
국비 지원 개발자 과정_Day14 (0) | 2022.12.15 |
국비 지원 개발자 과정_Day13 (0) | 2022.12.14 |
국비 지원 개발자 과정_Day12 (0) | 2022.12.13 |
댓글