🟢 어제 배운 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);
}
}
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;
public abstract class UserDaoAbstract
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();
}
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);
}
}
}
<script></script>
)<script src = '경로 및 파일명'></script>
);
: 다른 언어와 다르게 사용해도 되고 안써도 됨
(단, 한줄에 명령어 2개를 쓸 때 👉 명령어;명령어)
//
: 한줄로 주석
/* */
: 여러줄로 주석
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()
: 버림var 변수명 = 데이터
로 선언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='함수>
))
장점
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에 해당하는 것을 점차 사라지도록$('#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일이기때문에 더함