타입 추론하여 정해줌
/인 경우 다른 타입이 나올 수 있어서 사용 자제할 것 - float, int 등 애매함import java.util.HashSet;
class Solution {
public int solution(int[] nums) {
int minValue = nums.length / 2;
HashSet<Integer> set = new HashSet<>();
// set 기능을 통한 중복 제거
for (int num : nums) {
set.add(num);
}
// 뽑을 수 있는 N/2와 폰켓몬의 고유값 중 작은 값을 리턴
if (set.size() < minValue){
minValue = set.size();
}
return minValue ;
}
}
["119", "97674223", "1195524421"] ➡ ["119", "1195524421", "97674223"]["12","123","1235","567","88"] ➡ ["12","123","1235","567","88"]🟢 "전화번호".startsWith("전화") : 전화번호의 앞부분이 전화인지 확인하고 맞으면 true 리턴
import java.util.Arrays;
class Solution {
public boolean solution(String[] phone_book) {
/*
정렬하여 인덱스 차이가 1인 것끼리만 비교 가능
문자열 정렬이기 때문에 아래와 같이 정렬됨 (오름차순이 아닌 첫째자리부터 더 작은 수가 오는 것이 앞에)
["119", "97674223", "1195524421"] -> ["119", "1195524421", "97674223"]
["12","123","1235","567","88"] -> ["12","123","1235","567","88"]
*/
Arrays.sort(phone_book);
// starsWith : phone_book[i]가 phone_book[i-1]로 시작하는지 확인
for (int i = 1; i < phone_book.length; i++) {
if(phone_book[i].startsWith(phone_book[i-1])){
return false;
}
}
return true;
}
}

| TRACE | DEBUG | INFO | WARN | ERROR |
|---|---|---|---|---|
| 다 나옴 | 조금 덜 나옴 | 덜 나옴 | 조금 나옴 | 에러만 나옴 |
너무 많이 Log를 남기면 많은 값을 모두 볼 수 없기 때문
application.yml에 코드 추가
logging:
level:
root: debug
@RestController
@RequestMapping("/api/v1/get-api")
@Slf4j
public class GetController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
log.info("hello로 요청이 들어왔습니다");
return "Hello World";
}
@GetMapping(value = "/name")
public String getName() {
log.info("getName으로 요청이 들어왔습니다");
return "Kwanwun";
}
@GetMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
log.info("getVariable1으로 요청이 들어왔습니다. variable: {}", variable);
return variable;
}
}
ORM(Object Realational Mapping)
자바 오프젝트(Class)하고 관계형 데이터베이스의 테이블과 매핑해주는 기능
장점
단점
목적
실습 SpringBoot와 jdbcTemplate을 이용해 기능 만들기
(https://github.com/Kyeongrok/springboot-jdbc-userdao 참고)
실습하기 전 유용한 코드
1. 아래 두 코드는 같음
@Autowired
private UserDao userDao
private final UserDao userDao
@AllArgsConstructor : 모든 변수를 갖고있는 생성자@Getter : 모든 변수 getter 생성실습 시작
dependencies 추가
UserDao, User추가 (DAO에서 했던 것 가져오기)
🟢 User
public class User {
private String id;
private String name;
private String password;
public User(String id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
🟢 UserDao
import com.springboot.springbootcoreguide.domain.dao.User;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@Component
public class UserDao {
private final DataSource dataSource;
private final JdbcTemplate jdbcTemplate;
public UserDao(DataSource dataSource, JdbcTemplate jdbcTemplate) {
this.dataSource = dataSource;
this.jdbcTemplate = jdbcTemplate;
}
RowMapper<User> rowMapper = new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User(rs.getString("id"), rs.getString("name"),
rs.getString("password"));
return user;
}
};
public void add(User user) {
this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES (?, ?, ?)",
user.getId(), user.getName(), user.getPassword());
}
public User findById(String id) {
String sql = "SELECT * FROM users WHERE id = ?";
return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
}
public List<User> getAll() {
String sql = "SELECT * FROM users order by id";
return this.jdbcTemplate.query(sql, rowMapper);
}
public void deleteById(String id) {
this.jdbcTemplate.update("delete from users where id = ?", id);
}
public void deleteAll() {
this.jdbcTemplate.update("delete from users");
}
public int getCount() {
return this.jdbcTemplate.queryForObject("select count(*) from users", Integer.class);
}
}
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/likelion-db
username: root
password: password
🔴 만약 환경변수 설정 옵션이 보이지 않는다면

🔴 입력할 값 : SPRING_DATASOURCE_URL=jdbc:mysql://<db_host>:3306/likelion-db
(SPRING_DATASOURCE_URL : 이것이 application.yml의 경로를 나타내는 것이기 때문에 꼭 대문자로 작성)
import com.springboot.springbootcoreguide.dao.UserDao;
import com.springboot.springbootcoreguide.domain.dao.User;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/v1/user")
public class UserController {
private final UserDao userDao;
public UserController(UserDao userDao) {
this.userDao = userDao;
}
@PostMapping("")
public String add(@RequestBody User user) {
userDao.add(user);
return String.format("%s번에 정보가 등록되었습니다.", user.getId());
}
@DeleteMapping(value = "/delete/{id}")
public String deleteById(@PathVariable String id) {
userDao.deleteById(id);
return String.format("%s번의 정보가 삭제되었습니다.", id);
}
@DeleteMapping(value = "/delete/all")
public String deleteAll() {
userDao.deleteAll();
return "모든 정보가 삭제되었습니다.";
}
@GetMapping(value = "/select/{id}")
public String selectById(@PathVariable String id) {
User selectedUser = userDao.findById(id);
return String.format("id : %s\nname : %s\npassword : %s",
selectedUser.getId(), selectedUser.getName(), selectedUser.getPassword());
}
@GetMapping(value = "/select/all")
public String selectAll() {
List<User> users = userDao.getAll();
String str = "";
for (User user : users) {
str += String.format("id : %s\nname : %s\npassword : %s\n\n",
user.getId(), user.getName(), user.getPassword());
}
return str;
}
}