28일차 내용 정리

채공부·2025년 7월 2일

JavaScript

Map( )

배열에 있는 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>`);

filter( )

배열에서 조건을 만족하는 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>

map( ) + filter( )

const result = myNums.map(item => item*2).filter(item => item>10);

JAVA

Thread

  • 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

  • type 추론이 가능하다면 지역변수의 type 선언 대신 var 로 선언 가능
    지역 변수에만 사용 가능, 필드는 사용 불가
    인터페이스 type 추론이 불가
    null로 초기화 불가

⚠️ java10에서 추가된 문법으로 아직 실무에서 많이 쓰지 않기에 주의 추가된 문법으로 아직 실무에서 많이 쓰지 않기에 주의

메인 스레드 작업 vs 별도 스레드 작업

  1. 작업 시작 버튼 : 메인 스레드에서 작업
  • 버튼을 누르면 메인 스레드가 sleep()에 걸려 10초간 멈춘다
    ➜ 프로그램 UI 도 같이 멈춘다
startBtn.addActionListener((e) -> {
    // 메인 스레드가 실행
    System.out.println("10 초 걸리는 작업을 시작합니다");
    try {
        Thread.sleep(1000 * 10); // 메인 스레드를 10초 멈춤
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }
    System.out.println("작업이 종료 됩니다");
});
  1. 작업 시작2 버튼 : 새로운 스레드에서 작업
  • 버튼을 누르면 새로운 스레드가 실행
    ➜ 메인 스레드는 멈추지 않기 때문에 UI 정상 작동
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

Runnable : 실행할 작업 내용을 run() 메소드에 정의해 Thread로 실행할 수 있는 인터페이스
➜ Thread 상속 대신 Runnable 구현으로 새 스레드 생성 가능

메인 스레드 작업 vs 별도 스레드 작업 (Runnable)

  1. 작업 시작 버튼 : 메인 스레드에서 작업
  • 버튼을 누르면 메인 스레드가 sleep()에 걸려 10초간 멈춘다
    ➜ 프로그램 UI도 같이 멈춘다
startBtn.addActionListener((e) -> {
    // 메인 스레드가 실행
    System.out.println("10 초 걸리는 작업을 시작합니다");
    try {
        Thread.sleep(1000 * 10); // 메인 스레드를 10초 멈춤
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }
    System.out.println("작업이 종료 됩니다");
});
  1. 작업 시작2 버튼 : 새로운 스레드에서 작업
    버튼을 누르면 Runnable 구현 객체로 새로운 스레드가 실행
    ➜ 메인 스레드는 멈추지 않기 때문에 UI 정상 작동
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("작업이 종료 됩니다");
    }
}
  1. 작업 시작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으로도 별도 스레드를 생성해 처리 가능

Compile

  • Compile 과정을 거쳐야 JVM이 실행 가능한 파일로 만들어진다
문자열로 작성되는 source code
	MainClass01.java        ➜ 	MainClass01.class
	Missile.java            ➜ 	Missile.class
	WorkThread.java         ➜ 	WorkThread.class

   ⤷ Eclipes를 사용하면 Eclipes가 자동으로 compile 해준다

  1. ojdbc11 JAR 파일 추가 = ojdbc11-23.8.0.25.04.jar

  • Oracle DB 접속에 필요한 class 파일들이 들어 있는 압축 파일
    (Eclipse에서 빌드 패스에 등록해야 사용 가능)
  1. 프로젝트 우클릭 ➜ Build Path ➜ Configure Build Path

  1. Libraries ➜ Classpath ➜ Add External JARs..

  1. 외부 JAR 추가

  1. Apply and Close click

  1. 등록된 JAR 내부 구조 확인

JDBC

  • JAVA에서 DB에 연결해서 INSERT , UPDATE , DELETE , SELECT 등의 작업 가능
  • ojdbc 드라이버(JAR)가 꼭 필요

🟡 드라이버 로딩

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();
        }
    }
}

INSERT

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.");

UPDATE

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.");

DELETE

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
profile
학원 공부 내용 정리

0개의 댓글