🔸 단, 이 방법에서는 동명이인에 대한 작업이 없기 때문에 문제 발생
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> memo = new HashMap<>();
for (String eachParticipant : participant) {
memo.put(eachParticipant, 1);
}
for (String eachCompletion : completion) {
memo.put(eachCompletion, 0);
}
for (String key : memo.keySet()) {
if (memo.get(key) == 1){
return key;
}
}
return null;
}
}
🟢 getOrDefault : key값이 없으면 default, 있으면 매핑되는 value 리턴
import java.util.HashMap;
import java.util.Map;
class Solution {
public String solution(String[] participant, String[] completion) {
Map<String, Integer> memo = new HashMap<>();
for (String eachParticipant : participant) {
memo.put(eachParticipant, memo.getOrDefault(eachParticipant, 0)+1);
}
for (String eachCompletion : completion) {
memo.put(eachCompletion, memo.get(eachCompletion)-1);
}
for (String key : memo.keySet()) {
if (memo.get(key) == 1){
return key;
}
}
return null;
}
}


API 문서 : API쓰는 법을 써놓은 문서
Github에 적용
👀 Github.api 👀 접속하면 원하는 api를 가져오는 법을 알 수 있음
Commit api 가져오기
https://api.github.com/repos/{OWNER}/{REPO}/commits의 형태로 적용
ex) https://api.github.com/repos/KoKwanwun/LikeLion/commits
API 문서의 Path parameters, Query parameters 기능
@PathVariable)@RequestParam)?since=시간 : 시간 이후의 데이터만 보겠다)http://localhost:8081/api/v1/get-api/request1?name=Kwanwun&email=dkfajflsla@naver.com&organization=likelion& 사용) @GetMapping(value = "/request1")
public String getRequestParam1(@RequestParam String name,
@RequestParam String email,
@RequestParam String organization) {
return name + " " + email + " " + organization;
}
🔸 Talend에서 QUERY PARAMETERS 기능을 사용하면 조금 더 쉽게 입력 가능

@GetMapping(value = "/request2")
public String getRequestParam2(@RequestParam Map<String, String> param) {
StringBuilder sb = new StringBuilder();
param.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
클래스를 따로 생성하여 객체를 받아 출력
실습 전 개념
실습
MemberDto를 VO로 하나 만듦
public class MemberDto {
private String name;
private String email;
private String organization;
public MemberDto(String name, String email, String organization) {
this.name = name;
this.email = email;
this.organization = organization;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public String getOrganization() {
return organization;
}
@Override
public String toString() {
return String.format("%s %s %s", this.name, this.email, this.organization);
}
}
🔸 객체를 입력받고 오버라이딩된 toString으로 출력
🔴 이 방법을 사용할 때는 @RequestParam을 쓰지 않음.
@GetMapping(value = "/request3")
public String getRequestParam3(MemberDto memberDto) {
return memberDto.toString();
}
JavaScript Object Notation(자바스크립트에서 Object(Class) 표현법)
{"name":"Kwanwun", "email":"dkfajflsla@naver.com"}으로 표현
JSON 코드
let user = {"name":"Kwanwun", "email":"dkfajflsla@naver.com"}
user['email']
👉 dkfajflsla@naver.com
@PostMapping(value = "/member")
public String postMember(@RequestBody Map<String, String> postData){
StringBuilder sb = new StringBuilder();
postData.entrySet().forEach(map -> {
sb.append(map.getKey() + " : " + map.getValue() + "\n");
});
return sb.toString();
}
🔸 Body 부분에 json 형식으로 넣어 해당 정보를 출력하도록

@PostMapping(value = "/member2")
public String postMemberDto(@RequestBody MemberDto memberDto){
return memberDto.toString();
}
put은 post와 비슷하지만 주로 Update하는데 사용함
.status(HttpStatus.ACCEPTED) : 응답코드가 202로 변경됨import com.springboot.springbootcoreguide.domain.dto.MemberDto;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/put-api")
public class PutController {
@PutMapping(value = "/member3")
public ResponseEntity<MemberDto> putMemberDto3(@RequestBody MemberDto memberDto){
return ResponseEntity
.status(HttpStatus.ACCEPTED)
.body(memberDto);
}
}
🔸 ResponseEntity 사용 유무 차이
content-type : text/plain
content-type : application/json
해당 API가 어떤 로직을 수행하는지 설명하고 어떤 값을 요청하며, 이에 따른 응답값으로는 무엇을 받을 수 있는지를 정리하여 보여주는 오픈소스 프로젝트
1.pom.xml에서 Alt + Enter로 Add Dependency(🔸 단, dependencies 사이에 넣기)
2. springfox-boot-starter, springfox-swagger-ui 추가 후 새로 고침
3. 실행 후 http://localhost:8081/swagger-ui/ 접속
(자신의 포트가 8080이면 8080으로 변경 후 사용)
4. 아래 화면과 같이 뜨면 성공!

<artifactId>spring-boot-maven-plugin</artifactId> 이 코드에서 오류가 난다면<version>${parent.version}</version> 코드를 아래 코드 위치에 추가 <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${parent.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
실행하면 오류 발생 (SpringBoot 2.5.X이상에서 발생하는 것 같음)
1. application.properties를 application.yml로 이름 변경 필요
2. application.yml에 아래와 같이 추가
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
(기존 포트 변경 코드를 살리고 싶다면)
server:
port: 8081
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher