JavaScript
배열에 있는 item을 이용해 새로운 배열을 생성
님 붙이기<script>
const names = ["유재석", "박명수", "정준하"];
const names2 = names.map((item)=>{
return item +"님";
})
</script>
li 태그로 감싸기<script>
const names3 = names.map((item)=>{
return `<li>${item}</li>`;
})
</script>
const names4 = nemes.map(item=> `<li>${item}</li>`);
배열에서 조건을 만족하는 item만 걸러내어 새로운 배열을 생성
<script>
const nums = [10, -10, -20, 20, 30, -50, 60];
const nums2 = nums.filter((item)=>{
return item >= 0;
});
</script>
<script>
const myNums = [1,2,3,4,5,6,7,8,9,10];
const odds = myNums.filter((item)=>{
return item % 2 == 1;
});
const odds2 = myNums.filter(item => item % 2 == 1);
</script>
const result = myNums.map(item => item*2).filter(item => item>10);
JAVA
Thread : 실행의 흐름 = 하나의 작업 단위public static void main(String[] args) {
System.out.println("main 메소드가 시작 되었습니다");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
test();
System.out.println("main 메소드가 종료 됩니다");
}
public static void test(){
System.out.println("test() 메소드 호출됨");
}
main 메소드가 시작 되었습니다
test() 메소드 호출됨
main 메소드가 종료 됩니다
⭐ 시간이 오래 걸리는 작업을 메인 스레드의 처리하는 경우
프로그램이 멈추는 것처럼 보이기에 별도의 스레드를 생성해 동시에 처리
var
var 로 선언 가능⚠️ java10에서 추가된 문법으로 아직 실무에서 많이 쓰지 않기에 주의 추가된 문법으로 아직 실무에서 많이 쓰지 않기에 주의
작업 시작 버튼 : 메인 스레드에서 작업startBtn.addActionListener((e) -> {
// 메인 스레드가 실행
System.out.println("10 초 걸리는 작업을 시작합니다");
try {
Thread.sleep(1000 * 10); // 메인 스레드를 10초 멈춤
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("작업이 종료 됩니다");
});
작업 시작2 버튼 : 새로운 스레드에서 작업WorkThrea 클래스에서 Thread를 상속받아 run()을 오버라이드
start()로 새 스레드를 시작
startBtn2.addActionListener((e) -> {
new WorkThread().start();
});
public class WorkThread extends Thread {
@Override
public void run() {
System.out.println("10 초 걸리는 작업을 시작합니다");
try {
Thread.sleep(1000 * 10); // 새로운 스레드가 10초 멈춤
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("작업이 종료 됩니다");
}
}
⭐ 긴 작업은 이렇게 별도 스레드로 분리
Runnable : 실행할 작업 내용을 run() 메소드에 정의해 Thread로 실행할 수 있는 인터페이스
➜ Thread 상속 대신 Runnable 구현으로 새 스레드 생성 가능
작업 시작 버튼 : 메인 스레드에서 작업startBtn.addActionListener((e) -> {
// 메인 스레드가 실행
System.out.println("10 초 걸리는 작업을 시작합니다");
try {
Thread.sleep(1000 * 10); // 메인 스레드를 10초 멈춤
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("작업이 종료 됩니다");
});
작업 시작2 버튼 : 새로운 스레드에서 작업startBtn2.addActionListener((e) -> {
// Thread 객체 생성 + Runnable 객체 전달
new Thread(new WorkRunnable()).start();
});
public class WorkRunnable implements Runnable {
@Override
public void run() {
System.out.println("10 초 걸리는 작업을 시작합니다");
try {
Thread.sleep(1000 * 10); // 새로운 스레드가 10초 멈춤
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("작업이 종료 됩니다");
}
}
작업 시작2 버튼 : 람다식 새로운 스레드에서 작업startBtn2.addActionListener((e) -> {
// Runnable 인터페이스는 run() 메소드 하나라 람다식으로 구현 가능
new Thread(() -> {
System.out.println("10초 걸리는 작업을 시작합니다");
try {
Thread.sleep(1000 * 10);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("작업이 종료 되었습니다");
}).start();
});
⭐ 긴 작업은 Runnable으로도 별도 스레드를 생성해 처리 가능
문자열로 작성되는 source code
MainClass01.java ➜ MainClass01.class
Missile.java ➜ Missile.class
WorkThread.java ➜ WorkThread.class
⤷ Eclipes를 사용하면 Eclipes가 자동으로 compile 해준다
ojdbc11-23.8.0.25.04.jar





INSERT , UPDATE , DELETE , SELECT 등의 작업 가능🟡 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
🟡 DB 연결
String url = "jdbc:oracle:thin:@localhost:1521:xe";
Connection conn = DriverManager.getConnection(url, "scott", "TIGER");
🟡 SQL 준비 & 실행
String sql = """
SELECT empno, ename, job, sal
FROM emp
ORDER BY empno ASC
""";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
🟡 cursor로 결과 도출
while(rs.next()) {
int empno = rs.getInt("empno");
String ename = rs.getString("ename");
String job = rs.getString("job");
double sal = rs.getDouble("sal");
System.out.println(empno + " | " + ename + " | " + job + " | " + sal);
}
Connection: DB 연결 객체
PreparedStatement : 미리 준비한 SQL 실행
ResultSet = cursor : SELECT 결과 행(row)들을 가리키는 커서(cursor) 역할
rs.next() : 커서를 한 줄씩 이동시킨다
""" : SQL 같은 긴 문자열 작성 가능
package test.main;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class MainClass02 {
public static void main(String[] args) {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String url = "jdbc:oracle:thin:@localhost:1521:xe";
conn = DriverManager.getConnection(url, "scott", "TIGER");
System.out.println("Oracle DB 접속 성공");
} catch (Exception e) {
e.printStackTrace();
}
PreparedStatement pstmt = null;
ResultSet rs = null; // SELECT 결과 cursor
try {
String sql = """
SELECT empno, ename, job, sal
FROM emp
ORDER BY empno ASC
""";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) { // 커서가 한 행씩 내려가면서 읽음
int empno = rs.getInt("empno");
String ename = rs.getString("ename");
String job = rs.getString("job");
double sal = rs.getDouble("sal");
System.out.println(empno + " | " + ename + " | " + job + " | " + sal);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
String sql = """
INSERT INTO emp (empno, ename, job, sal, deptno)
VALUES (?, ?, ?, ?, ?)
""";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 9999); // empno
pstmt.setString(2, "HONG"); // ename
pstmt.setString(3, "CLERK"); // job
pstmt.setDouble(4, 2000); // sal
pstmt.setInt(5, 10); // deptno
int inserted = pstmt.executeUpdate();
System.out.println(inserted + " row(s) inserted.");
String sql = """
UPDATE emp
SET sal = ?
WHERE empno = ?
""";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setDouble(1, 3000); // sal
pstmt.setInt(2, 9999); // empno
int updated = pstmt.executeUpdate();
System.out.println(updated + " row(s) updated.");
String sql = """
DELETE FROM emp
WHERE empno = ?
""";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 9999); // empno
int deleted = pstmt.executeUpdate();
System.out.println(deleted + " row(s) deleted.");
⭐ executeQuery( ) : SELECT용도, 결과를 ResultSet으로 받는다
executeUpdate( ) : INSERT, UPDATE, DELETE 용도, 영향을 받는행 수를 return