[LIKELION] 221018

고관운·2022년 10월 18일
0

회고

😄 느낀점

  • 중간 Interface부분을 수업을 듣지 못해서 이해가 될듯말듯하다.

😁 목표

  • CodeUp 100제 (1091~1100 풀기)

[멋쟁이사자처럼] 5주차 - Spring 입문

알고리즘(별 찍기)

정사각형 별 찍기

🟢 어제 배운 repeat으로 정사각형, 직사각형에 사용
🟢 정사각형은 값을 한 개만 받음

import java.util.Scanner;

public class SquareStar {
    void printSquare(int n){
        for (int i = 0; i < n; i++) {
            System.out.println("*".repeat(n));
        }
    }

    public static void main(String[] args) {
        SquareStar squareStar = new SquareStar();
        Scanner sc = new Scanner(System.in);

        int size = sc.nextInt();

        squareStar.printSquare(size);
    }
}

직사각형 별 찍기

🟢 직사각형은 가로, 세로 2개의 값을 받음

import java.util.Scanner;

public class RectangleStar {
    void printRectangle(int x, int y){
        for (int i = 0; i < y; i++) {
            System.out.println("*".repeat(x));
        }
    }

    public static void main(String[] args) {
        RectangleStar rectangleStar = new RectangleStar();
        Scanner sc = new Scanner(System.in);

        int x = sc.nextInt();
        int y = sc.nextInt();

        rectangleStar.printRectangle(x, y);
    }
}

자바 DB 연동 및 데이터 추가

리팩토링 진행 단계

  1. method로 분리한다.
  2. Class로 분리한다.
  3. Interface를 적용한다.

method로 분리한다.
변경 전

import com.dbexercise.domain.User;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class UserDao {
    public void add() throws ClassNotFoundException, SQLException {
    	// 환경 변수 가지고 오는 코드
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_Host");
        String dbUser = env.get("DB_USER");
        String dbPassword = env.get("DB_PASSWORD");

        // mysql로 db연결을 특정하도록 설정
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); // db 연결
        // 쿼리 직접 작성
        PreparedStatement ps = conn.prepareStatement("INSERT INTO users(id, name, password) VALUES (?, ?, ?)");
        // 각각의 값을 넣기
        ps.setString(1, "1");
        ps.setString(2, "Kwanwun");
        ps.setString(3, "1234");

        // DB에 반영
        ps.executeUpdate();
        ps.close();
        conn.close();
    }

    public User get(String id) throws SQLException, ClassNotFoundException {
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_Host");
        String dbUser = env.get("DB_USER");
        String dbPassword = env.get("DB_PASSWORD");

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); // db 연결
        // Select문 실행
        PreparedStatement ps = conn.prepareStatement("SELECT * from users where id = 1");

		// executeQuery는 ResultSet으로 반환하며, ResultSet은 쿼리 실행 결과가 담겨있음
        ResultSet rs = ps.executeQuery();

        rs.next();
        User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));

        rs.close();
        ps.close();
        conn.close();

        return user;
    }

    public List<User> findAll() throws SQLException, ClassNotFoundException {
        // 환경 변수 설정해서 해당하는 값 가져오기
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_Host");
        String dbUser = env.get("DB_USER");
        String dbPassword = env.get("DB_PASSWORD");

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPassword); // db 연결
        // Select문 실행
        PreparedStatement ps = conn.prepareStatement("SELECT * from users");

        ResultSet rs = ps.executeQuery();

		// 모든 데이터를 List에 담기
        List<User> userList = new ArrayList<>();

        while(rs.next()) {
            User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));
            userList.add(user);
        }

        rs.close();
        ps.close();
        conn.close();

        return userList;
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        UserDao userDao = new UserDao();
        // Insert문으로 데이터 add
//        userDao.add();
		// Id가 1인 데이터만 가져오기
        User user = userDao.get("1");
        System.out.println(user.getName());

		// 모든 데이터 출력
        List<User> userList = userDao.findAll();
        for (User eachUser : userList) {
            System.out.println("ID : " + eachUser.getId());
            System.out.println("NAME : " + eachUser.getName());
            System.out.println("PASSWORD : " + eachUser.getPassword());
        }
    }
}

🟢 중복되는 Connection부분을 Method로 분리한다.
변경 후 👉 조금 더 간결하게 표현 가능

import com.dbexercise.domain.User;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class UserDao {
	public Connection getConnection() throws ClassNotFoundException, SQLException {
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_HOST");
        String dbName = env.get("DB_NAME");
        String dbPassword = env.get("DB_PASSWORD");

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbHost, dbName, dbPassword);

        return conn;
    }

    public void add() throws ClassNotFoundException, SQLException {
        Connection conn = getConnection;
        // 쿼리 직접 작성
        PreparedStatement ps = conn.prepareStatement("INSERT INTO users(id, name, password) VALUES (?, ?, ?)");
        // 각각의 값을 넣기
        ps.setString(1, "1");
        ps.setString(2, "Kwanwun");
        ps.setString(3, "1234");

        // DB에 반영
        ps.executeUpdate();
        ps.close();
        conn.close();
    }

    public User get(String id) throws SQLException, ClassNotFoundException {
        Connection conn = getConnection;
        // Select문 실행
        PreparedStatement ps = conn.prepareStatement("SELECT * from users where id = 1");

		// executeQuery는 ResultSet으로 반환하며, ResultSet은 쿼리 실행 결과가 담겨있음
        ResultSet rs = ps.executeQuery();

        rs.next();
        User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));

        rs.close();
        ps.close();
        conn.close();

        return user;
    }

    public List<User> findAll() throws SQLException, ClassNotFoundException {
        Connection conn = getConnection;
        // Select문 실행
        PreparedStatement ps = conn.prepareStatement("SELECT * from users");

        ResultSet rs = ps.executeQuery();

		// 모든 데이터를 List에 담기
        List<User> userList = new ArrayList<>();

        while(rs.next()) {
            User user = new User(rs.getString("id"), rs.getString("name"), rs.getString("password"));
            userList.add(user);
        }

        rs.close();
        ps.close();
        conn.close();

        return userList;
    }
}

Abstract Class 사용
1. 1번 과정을 거친 코드에서 getConnection을 추상 메소드로 변경

public abstract Connection getConnection() throws ClassNotFoundException, SQLException;
  1. 클래스에도 abstract 붙여주기
public abstract class UserDaoAbstract
  1. 추상 클래스를 상속받는 클래스에서 getConnection 완성해주기
public class AWSUserDaoImpl extends UserDaoAbstract{
    @Override
    public Connection getConnection() throws ClassNotFoundException, SQLException {
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_HOST");
        String dbName = env.get("DB_NAME");
        String dbPassword = env.get("DB_PASSWORD");

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection conn = DriverManager.getConnection(dbHost, dbName, dbPassword);

        return conn;
    }
}

Interface 사용
1. make Connection을 가지고 있는 인터페이스 생성

import java.sql.Connection;

public interface ConnectionMaker {
    Connection makeConnection();
}
  1. 인터페이스를 implemtents하여 메소드 완성
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Map;

public class LocalUserDaoImpl implements ConnectionMaker{
    @Override
    public Connection makeConnection() {
        Map<String, String> env = System.getenv();
        String dbHost = env.get("DB_HOST");
        String dbName = env.get("DB_NAME");
        String dbPassword = env.get("DB_PASSWORD");

        try {
            Connection conn = DriverManager.getConnection(dbHost, dbName, dbPassword);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new IllegalStateException(e);
        }
    }
}

TECHIT 강의 - Javascript

Javascript

Javascript 사용방법

  1. html에서 body에 작성(<script></script>)
  2. js파일을 따로 생성 후 html에서 연결
    (<script src = '경로 및 파일명'></script>)

Javascript ; 및 주석

; : 다른 언어와 다르게 사용해도 되고 안써도 됨
(단, 한줄에 명령어 2개를 쓸 때 👉 명령어;명령어)
// : 한줄로 주석
/* */ : 여러줄로 주석

Javascript 명령어

  • document.write("코드라이언") : 코드라이언 출력
  • console.log(문자) : 콘솔에 문자 띄우기
  • Math.random() : 0이상 1미만 실수(float)
  • parseInt() : 정수변환
  • document.getElementById("id명").value : 해당 id에 해당하는 값을 가져옴(변수에 넣거나 바로 출력)
  • document.getElementById("id명").innerHTML = content.length : content길이를 id명에 해당하는 곳에 넣기
  • 문자열.length : 배열 이외에도 문자열 길이도 체크 가능
  • 문자열 합치기 : '(' + content.length + '/200)'으로 +로 합침
  • 문자열.substring(0,5) : 0이상 5미만의 인덱스에 해당하는 문자열을 가져옴
  • Math.floor() : 버림

Javascript 변수 선언

  • 변수 종류 : 문자열, 숫자, 불(참거짓)
  • var 변수명 = 데이터로 선언
  • typeof 데이터 : 데이터 형식 리턴

배열

  • var lotto = [1,2,3] 선언

  • lotto.push(값) : 배열마지막에 값 삽입

  • lotto.indexOf(값) : 값이 있다면 위치, 없다면 -1 리턴

  • lotto.length : 배열의 길이(값의 개수)

🟢 lotto.sort() : 정렬 함수(# lotto = lotto.sort()로 다시 선언 안해줘도 됨)

  • lotto.sort() : 앞 자리수를 기준(사전순)으로 정렬(1,2,11 -> 1,11,2)
  • lotto.sort((a,b)=>a-b) : 숫자 오름차순
  • lotto.sort((a,b)=>b-a) : 숫자 내림차순

반복문

  • for (특정 횟수 반복)
    for (var i = 0; i < 6; i++){
    }

  • while (특정 조건 만족할때까지 반복)
    while (조건) {
    }

조건문

if (조건) {
참일 경우 실행
}

함수

반복되는 코드를 다시 사용할 수 있도록
function 함수이름() { }
사용할 때는 함수이름()으로 사용

이벤트

이벤트 : 마우스 클릭, 키보드 눌름 등
(onkeydown='함수' : 키가 눌릴때마다 함수 사용(<textarea onkeydown='함수>))

JQuery

장점
1. 간결한 문법
2. 편리한 API
3. 크로스 브라우징

사용방법
code.jquery.com 접속 -> 최신버전 minified클릭 -> 코드 복사

명령어

  • $('#content').val() : 아이디가 content인 값을 가져옴(#은 id를 의미, val()은 value)
  • $('#content').click(hello) : 아이디가 content인 값을 클릭할때마다 hello함수 실행
  • $('#content').click(function() {console.log('hello')}) : 함수를 바로 정의(함수를 한번만 사용할때 사용)
  • $('#spit').fadeIn() : spit에 해당하는 것을 점차 나타나도록(괄호안에는 속도조절)
  • $('#spit').animate({left: '+=250'}) : 오른쪽으로 이동하도록(점점이동함, 순간이동X)
  • $('#spit').fadeOut() : spit에 해당하는 것을 점차 사라지도록
    (괄호 안에 함수를 넣는다면 fadeOut끝나고 함수 실행)
  • $('#spit').css({left: '150px'}) : 왼쪽에서 150만큼 떨어진 곳으로 설정
  • $('#hp').text('HP : ' + hp) : hp에 해당하는 값 변경

객체

var person = {
name: 'hi',
age: 20
}
값에는 배열 객체 함수(메소드)도 들어갈수있음
객체.키로 값을가져옴 (person.age, person.hello())

내장 객체

  • var now = new Date() : 현재 시각 객체 생성
  • now.getFullYear() : 연도
  • now.getMonth() : 월 (1개월 더 적게 나옴 -> 0이면 1월, 1이면 2월)
  • now.getDate() : 일
  • now.getTime() : 1970년 1월 1일 00:00:00을 기준으로 흐른 시간을 밀리초로
  • var christmas = new Date("2020-12-25") : 임의로 날짜 생성 가능
  • var ms = new Date(1000) : 1970년 1월 1일 00:00:00 + 1000밀리초 후 날짜

사귄 날부터 몇 일 됐는지 구하기

var start = new Date('2020-06-30')

var timeDiff = now.getTime() - start.getTime()   : start부터 오늘날까지의 밀리초
var day = timeDiff / (1000*60*60*24) + 1 : (1000*60*60*24) : 일, +1은 사귄날부터 1일이기때문에 더함

0개의 댓글