별찍기
정사각형
n을 받으면 n*n 사이즈 사각형 출력
•
for문 이용
public void printSquare(int n){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
System.out.print("*");
}
System.out.println();
}
}
Java
복사
•
repeat을 이용하는 방법
public void printSquare2(int n){
for(int i=0;i<n;i++){
System.out.println("*".repeat(n));
}
}
Java
복사
직사각형
x, y를 받으면 x*y 사이즈의 사각형 출력하기
•
for문 이용
public void printRectangle(int x, int y){
for(int i=0;i<x;i++){
for(int j=0;j<y;j++){
System.out.print("*");
}
System.out.println();
}
}
Java
복사
•
repeat 이용
public void printRectangle2(int x, int y){
for(int i=0;i<x;i++){
System.out.println("*".repeat(y));
}
}
Java
복사
[도전] 재귀로 별찍기
재귀란? Recursive
자기 자신을 호출하는 함수
재시작 + 귀한 → 나를 반복한다
Java와 DB 연동
Insert, Select [1017내용+]
•
Insert
//environment 변수 설정 후 -> 1017 add()에서 파라미터로 User 받도록
public void add(User user) {
Map<String, String> env = System.getenv();
try {
Connection c = DriverManager.getConnection(env.get("DB_HOST"),
env.get("DB_USER"), env.get("DB_PASSWORD"));
PreparedStatement pstmt = c.prepareStatement("INSERT INTO users(id, name, password) VALUES (?, ?, ?);");
pstmt.setString(1, user.getId());
pstmt.setString(2, user.getName());
pstmt.setString(3, user.getPassword());
pstmt.executeUpdate(); //Query문 실행
pstmt.close();
c.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
//main에서: userDao.add(new User("7","Ruru","1234qwer"));
Java
복사
•
Select
domain User
//Select쿼리를 이용하여 User를 리턴
public User findByInd(String id) {
Map<String, String> env = System.getenv();
try {
Connection c = DriverManager.getConnection(env.get("DB_HOST"),
env.get("DB_USER"), env.get("DB_PASSWORD"));
PreparedStatement pstmt = c.prepareStatement("SELECT * FROM users WHERE id = ?");
pstmt.setString(1, id);
ResultSet rs = pstmt.executeQuery(); //Query문 실행
rs.next();
User user = new User(rs.getString("id"), rs.getString("name"),
rs.getString("password"));
rs.close();
pstmt.close();
c.close();
return user;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Java
복사
addAndSelect() 테스트 만들기
Create Test
//JUnit에서 Edit Configurations - 환경변수 설정해주어야 실행 가능
package com.line.dao;
import com.line.domain.User;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class UserDaoTest {
@Test
void addAndSelect() {
UserDao userDao = new UserDao();
User user = new User("8","EternityHwan","1123");
userDao.add(user);
User selectedUser = userDao.findByInd("8");
Assertions.assertEquals("EternityHwan",selectedUser.getName());
}
}
Java
복사
→ 매우 좋지 않은 코드이다. 초난감 DAO 코드
리팩토링
1. method로 분리
2. Class로 분리
3. Interface를 적용
makeConnection() 분리
connection 불러오는 공통된 부분을 메소드로
private Connection makeConnection() throws SQLException {
Map<String, String> env = System.getenv();
Connection c = DriverManager.getConnection(
env.get("DB_HOST"), env.get("DB_USER"), env.get("DB_PASSWORD")
);
return c;
}
Java
복사
접근제어자는 private로, Return type을 Connection으로
Abstract Class로 분리
UserDaoAbstract
양쪽 DB에서 모두 실행하고 싶다? Test할 때 LocalDB, 실제사용은 AWS DB에서
Implement Class
UserDaoTest
Class로 분리
AwsConnectionMaker 생성
UserDao 수정
UserDaoTest 확인
다시 UserDao와 특정 Class가 강하게 결합됨.
Interface로 분리
ConntectionMaker 인터페이스
implement class
UserDao 수정
JavaScript [Tech!t]
사용 방법
•
document.write(); 브라우저 화면에 쓰기
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>사용방법</title>
</head>
<body>
<h1>자바스크립트</h1>
<script>
document.write('안녕');
</script>
</body>
</html>
JavaScript
복사
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>JavaScript 사용 방법</title>
</head>
<body>
<h1>JavaScript 사용 방법</h1>
<script src='myScript.js'>코딩 짱짱</script>
</body>
</html>
JavaScript
복사
*세미콜론을 쓰지 않아도 된다!
자료형
변수선언 var
데이터타입 확인하기: typeof