코드 리뷰
package week6.hash;
import java.util.ArrayList;
public class HashTable3 {
// 내장 클래스
class Node {
private String key;
private Integer value;
Node(String key, Integer value){
this.key = key;
this.value = value;
}
public String getKey(){
return this.key;
}
public Integer getValue(){
return value;
}
}
// ArrayList<Node> 배열
// 배열의 크기: 1000
// 배열의 각 요소는 초기에 null (insert 메서드에서 ArrayList 생성)
private ArrayList<Node>[] table = new ArrayList[1000];
// ASCII 코드로 해싱 처리
public int hash(String str) {
int ascii = 0;
for (int i = 0; i < str.length(); i++) {
ascii += str.charAt(i);
}
return ascii % 1000;
}
// insert 메서드
public void insert(String key, int value) {
int hashIdx = hash(key);
// 초기에 해시 인덱스에 해당하는 요소가 null일 때 ArrayList<>() 생성 및 삽입
if (this.table[hashIdx] == null) {
this.table[hashIdx] = new ArrayList<>();
}
// 해당 해시 인덱스에 새 Node 생성 및 삽입
this.table[hashIdx].add(new Node(key, value));
}
// key 값으로 value 가져오기
public Integer get(String key) {
// 해당 key에 해당하는 ArrayList 가져오기
ArrayList<Node> nodes = this.table[hash(key)];
// for-each문을 돌면서 파라미터 'key'와 같은 값을 가진 Node를 탐색
for (Node node : nodes) {
if (key.equals(node.getKey())) {
return node.value;
}
}
// value는 Integer 타입이므로, 탐색 실패시 null 반환
return null;
}
public static void main(String[] args) {
HashTable3 ht = new HashTable3();
ht.insert("Yoonseo", 1);
ht.insert("Seoyoon", 2);
int result = ht.get("Yoonseo");
if (result == 1) {
System.out.println("테스트 성공");
} else {
System.out.printf("테스트 실패 value:%d", result);
}
result = ht.get("Seoyoon");
if (result == 2) {
System.out.println("테스트 성공");
} else {
System.out.printf("테스트 실패 value:%d", result);
}
}
}
Java
복사
Spring Boot 빌드 및 설명
IntelliJ Ultimate
•
Language: Java
•
Type: Maven
IntelliJ Community
빌드 후, 실행
실행 시, 다음과 같은 글을 확인할 수 있다.
Maven - package 실행
•
package 더블 클릭 후 실행하면 다음과 같은 파일이 생성된 것을 확인할 수 있다.
•
Terminal에서 java -jar [파일이름] 명령어를 통해 실행시킬 수 있다.
◦
jar파일은 개발한 소스코드가 실행가능 형태로 패키징 된 파일
◦
pacakge를 하기 위해 아래 Life cycle을 거친다.
Springboot 동작 테스트와 API 작성하는 다양한 방법
스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(WAS 중 하나)을 사용하는 스프링 MVC구조를 기반으로 동작합니다.
참고
1. Hello Spring boot 출력하기
컨트롤러 작성
컨트롤러의 역할
•
컨트롤러에 포함된 로직들은 사용자/클라이언트가 입력한 값에 대한 응답Response 를 수행한다.
•
특별한 경우를 제외하고는 모든 요청이 컨트롤러를 통해 진행되어야 한다.
•
실습
Controller 패키지를 생성하고, HelloController.java 라는 이름의 컨트롤러를 생성한다.
import org.springframework.web.bind.annotation.*;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
}
Java
복사
•
@RestController, @RequestMapping(“path”)
1) @RestController - dispatcherServlet이 매핑해줄 Controller를 등록
2) @RequestMapping - controller가 할당 된 후 어떤 method를 실행할지 연결해주는 어노테이션 입니다. ex) path “/hello” 를 통해 hello 메소드 실행함을 알려주었다.
애플리케이션 실행
Spring boot 프로그램 실행
(WAS) 서버가 포함되어 있기 때문에 서버가 같이 실행된다.
실행을 누르면 아래와 같이 8080번 포트를 통해 웹 서버가 열린 것을 확인할 수 잇다.
웹 브라우저를 통한 동작 테스트
웹 브라우저로 스프링 부트가 설정한 URL에 접속하면 간단하게 실행 결과를 확인할 수 있다.
2. API 작성
Talend API Tester을 통한 동작테스트
•
Chrome 확장 도구에서 추가할 수 있다
•
API를 만들고 테스트 할 수 있는 Tool.
•
특히 웹브라우저에서는 Post테스트가 안되기 때문에 API Tester 툴을 쓴다.
Get형식
Post형식
@RequestMapping 어노테이션
별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다.
그러나 GET형식의 요청만 받기 위해서는 별도 설정이 필요하다.
•
방법1
◦
@RequestMapping 어노테이션의 method 요소 값을 RequestMethod.Get으로 설정
@RestController
@RequestMapping("/api/v1/get-api")
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
return "Hello World";
}
}
Java
복사
•
방법 2
◦
어노테이션 @GetMapping() 사용
각 HTTP메서드에 맞게 또다른 어노테이션도 사용할 수 있다
@RestController
@RequestMapping("/api/v1/get-api")
public class HelloController {
@GetMapping(value = "/name")
public String getName() {
return "Jung sang hee";
}
Java
복사
@PathVariable을 활용한 Get 메서드 구현
주소의 path를 통해 variable을 넘기고 싶을 때 사용한다.
•
메소드 로직1
@GetMapping(value="variable1/{variable}")
public String getVariable1(@PathVariable String variable){
return variable;
}
Java
복사
•
메소드 로직2
어노테이션에서 지정한 이름과 메서드 매개변수 이름을 동일하게 맞추는게 원칙이지만,
@PathVariable 뒤에 괄호를 열어 GetMappgin어노테이션의 변수명을 지정한다.
@GetMapping(value="variable2/{variable}")
public String getVariable2(@PathVariable(value="variable") String var){
return var;
}
Java
복사
어노테이션 @GetMapping과 @PathVariable로 값이 잘 넘겨진 것을 확인할 수 있다.