반응형

# 상수 와 리터럴

상수 (constant)

  • 변수와 같이 값을 저장할 수 있는 공간이지만, 변수와 다르게 한 번 값을 저장하면 다른 값으로 변경할 수 없다.
  • 선언 방법은 변수를 선언하는 것과 동일하지만, 앞에 final 키워드가 붙는다.
  • 상수는 반드시 선언과 동시에 초기화 되어야 한다.
  • 상수의 이름은 모두 대문자로 하는 것이 암묵적인 관례이고, 여러 단어로 구성된 경우 '_'로 구분한다.
  • 키워드 : final
final int MAX_VALUE = 250;

리터럴 (literal)

  • 상수의 다른 이름.
  • 그 자체로 값을 의미하는 것.

 

반응형

'인프런 강의 학습 > 자바의 정석' 카테고리의 다른 글

변수  (0) 2022.06.01
반응형

# 변수 (Variable)

## 변수란?

  • 단 하나의 값을 저장할 수 있는 메모리상의 공간을 의미.
  • 하나의 변수에 단 하나의 값만 저장 할 수 있고, 새로운 값을 저장하면 기존 값은 사라진다.

## 변수 선언과 초기화

변수 선언

  • 변수를 사용하기 위해서는 변수를 선언해야 하고, 아래와 같이 선언 한다.
int age;	// 변수 선언.

=>
age 라는 이름의 변수를 선언.
*변수타입 : int
*변수이름 : age
  • 변수타입 : 저장될 값이 어떤 타입인지 지정하는 것으로 저장하는 값의 종류에 맞게 변수 타입을 선택해서 작성해야 한다.
  • 변수이름 : 변수에 붙이는 이름으로 중복된 변수명을 지정할 수 없다.
  • 변수 선언 시  메모리의 빈 공간에 변수타입에 맞는 크기의 저장 공간이 확보 되고, 해당 저장공간은 변수이름을 통해 사용할 수 있게 된다.

변수 초기화

  • 변수를 선언하면 변수를 사용할 수 있는데 사용 전 반드시 변수를 초기화 해야 한다. (메모리는 여러 프로그램이 공유하는 자원, 다른 프로그램에 의해 저장된 쓰레기 값이 남아있을 수 있기 때문에 초기화 필수)
  • 변수에 값 저장 시 대입 연산자('=') 사용하며, 변수 초기화는 아래와 같이 진행 한다.
int age = 15;

=>
변수 age를 선언하고 15로 초기화.
  • 타입이 같은 경우 콤마(',')를 구분자로 여러 변수를 한 줄에 선언 할 수 있다.
int a, b;
int x = 0, y = 0;
  • 변수의 종류에 따라 변수 초기화를 생략할 수 있는 경우도 있지만, 변수는 사용되기 전 적절한 값으로 반드시 초기화 되어야 한다.

## 두 변수 값 교환

  • 아래와 같이 두 변수에 담긴 값을 서로 바꾸기 위해서는 하나의 값을 임시 저장할 새로운 변수가 필요하다.
int a = 10;
int b = 6;

=>
두 값을 서로 변경하기 위해서는 새로운 변수 필요.
int a = 10;
int b = 6;
int temp = 0;

아래와 같이 임시 변수(temp)에 값을 저장 후 값 변경.
temp = a;	// temp에 10 저장.
a = b;		// a에 b의 값(6) 저장.
b = temp;	// b에 a의 값(temp에 담긴 값) 10 저장.

결과적으로 a와 b의 값이 서로 변경 됨.
a = 6
b = 10

## 변수 명명 규칙

  • 식별자(identifier) : 변수 이름처럼 프로그래밍에서 사용하는 모든 이름, 같은 영역 내에서 서로 구분(식별)될 수 있어야 한다.
  • 변수의 이름은 짧을수록 좋지만, 용도를 알기 쉽도록 의미있는 이름으로 명명 하는것이 적합하다. (변수 선언문에 주석으로 변수에 대한 정보를 작성하는 것도 적합하다.)
  1. 대소문자 구분되며 길이에 제한이 없다.
  2. 예약어를 사용해서는 안 된다. (예약어는 키워드(keyword) 또는 리져브드 워드(reserved word) 라고 함)
  3. 숫자로 시작해서는 안 된다.
  4. 특수문자는 '_' 와 '$'만 허용.
  • 그외 자바 프로그래머들에게 권장하는 규칙.
  1. 클래스 이름의 첫 글자는 항상 대문자로 시작.
  2. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 지정.
  3. 상수의 이름은 모두 대문자로 지정. 여러 단어인 경우 '_'로 구분.

## 변수의 타입

  • 자료형 : 값의 종류에 따라 값이 저장될 공간의 크기와 저장형식을 정의한 것으로 문자형, 정수형, 실수형 등이 존재.
  • 자료형은 크게 기본형과 참조형으로 나눌 수 있다.

기본형 변수 (primitive type)

  • 실제 값(data)을 저장.
  • 기본형에는 모두 개의 자료형(타입)이 존재한다. (논리형, 문자형, 정수형, 실수형 으로 구분)
  • 논리형 : boolean
  • 문자형 : char
  • 정수형 : byte, short, int, long
  • 실수형 : float, double

참조형 변수 (reference type)

  • 특정 값이 저장되어있는 주소(memory address)를 값으로 갖는 것. (자바의 경우 C언어와 달리 참조형 변수 간 연산을 할 수 없다.)
  • 참조형 변수 선언 시 변수의 타입으로 클래스 이름을 사용, 클래스의 이름이 참조변수의 타입이 된다. 그렇기 때문에 새로운 클래스를 작성한다는 것은 새로운 참조형을 추가하는 것과 같다고 할 수 있다.
  • 참조형 변수는 아래와 같이 선언.
클래스이름 변수이름; 	// 변수 타입이 기본형이 아닌 것들은 모두 참조형 변수임.

 

반응형

'인프런 강의 학습 > 자바의 정석' 카테고리의 다른 글

상수와 리터럴  (0) 2022.06.01
반응형

# HTTP 메서드 활용

## 클라이언트에서 서버로 데이터 전송

데이터 전달 방식은 크게 2가지

1. 쿼리 파라미터를 통한 데이터 전송

  • 주로 GET, 정렬 필터(검색어) 에서 사용.

2. 메시지 바디를 통한 데이터 전송

  • POST, PUT, PATCH 등
  • 회원가입, 상품 주문,리소스 등록, 리소스 변경 등에 사용.

클라이언트에서 서버로 데이터 전송

1. 정적 데이터 조회

  • 이미지, 정적 텍스트 문서 등 조회는 GET 사용.
  • 정적 데이터는 일반적으로 쿼리 파라미터 없이, 리소스 경로로 단순하게 조회 가능.

2. 동적 데이터 조회

  • 쿼리 파라미터 사용.(GET /search?q=hello&hl=ko)
  • 주로 검색, 게시판 목록에서 정렬 필터(검색어)에 사용.
  • 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용.
  • 조회는 GET 사용. (GET은 쿼리 파라미터를 사용해 데이터를 전달)

3. HTML Form 을 이용한 데이터 전송

  • POST 전송 - 저장
  • HTML Form submit 시 POST 전송. (회원가입, 상품주문, 데이터 변경 등에 사용)
  • Content-Type : application/x-www-form-rulencoded 사용.
form 의 내용을 메시지 바디를 통해 전송(key=value, 쿼리 파라미터 형식)

전송 데이터를 url encoding 처리 
예) aaa김 -> aaa%EA%B9%80
  • HTML Form은 GET 전송도 가능 (하지만 저장 등에는 POST 사용)
  • Content-Type : multipart/form-data
파일 업로드 같은 바이너리 데이터 전송 시 사용.

다른 종류의 여러파일과 폼 내용을 함께전송 가능 (그래서 이름이 multipart)
  • 참고사항 : HTML Form 전송은 GET, POST만 지원.

4. HTTP API 전송

  • 서버 to 서버로 백엔드 시스템 통신 시 사용.
  • 앱 클라이언트에서 전송 시에도 사용 (안드로이드, 아이폰)
  • 웹 클라이언트 : HTML에서 Form 전송 대시 자바 스크립트를 통한통신에 사용 (AJAX 통신) - 예) React, VueJs 같은 웹 클라이언트와 API 통신
  • 메시지 바디를 통한 데이터 전송 (POST / PUT / PATCH)
  • GET : 조회, 쿼리 파라미터를 데이터로 전달
  • Content-Type : application/json을 주로 사용 (사실상 표준) - TEXT, XML(과거에 많이 사용), JSON 등등

## HTTP API 설계 예시

1. HTTP API (컬렉션)

  • POST 기반 등록
  • 예 : 회원 관리 API 제공

회원 관리 시스템 (POST 기반 등록 - 컬렉션) : 대부분의 실무에서 사용.

  • API 설계 - POST 기반 등록.
회원 목록 : /members -> GET

회원 등록 : /members -> POST

회원 조회 : /members/{id} -> GET

회원 수정 : /members/{id} -> PATCH / PUT / POST
(PATCH : 부분 수정 / PUT : 완전히 덮어쓰기)
(PATCH 사용 권장, PUT은 게시판 수정 등에 사용)

회원 삭제 : /members/{id} -> DELETE
  • POST - 신규 자원 등록 특징
클라이언트는 등록될 리소스의 URI를 모름. 
- 회원 등록 /members -> POST
- POST /members

서버가 새로 등록된리소스 URI를 생성해준다.
- HTTP/1.1 201 Created
  Location: /members/100


* 컬렉션 (Collection)
- 서버가 관리하는리소스디렉토리
- 서버가 리소스의URI를 생성하고 관리
- 여기서 컬렉션은 /members

2. HTTP API (스토어)

  • PUT 기반 등록
  • 예 : 정적 컨텐츠 관리, 원격 파일 관리

 

파일 관리 시스템 (PUT 기반 등록 - 스토어)

  • API 설계 - PUT 기반 등록
파일 목록 : /files -> GET

파일 조회 : /files/{filename} -> GET

파일 등록 : /files/{filename} -> PUT
(PUT : 없으면 새로 생성, 있으면 덮어쓰기)

파일 삭제 : /files/{filename} -> DELETE

파일 대량 등록 : /files -> POST
  • PUT - 신규 자원 등록 특징
클라이언트가리소스 URI 를 알고 있어야 함
- 파일등록 : /files/{filename} -> PUT
- PUT /files/star.jpg

클라이언트가 직접 리소스의 URI를 지정한다.


* 스토어 (Store)
- 클라이언트가 관리하는 리소스 저장소
- 클라이언트가 리소스의 URI를 알고 관리
- 여기서 스토어는 /files

3. HTML FORM 사용 (컨트롤 URI)

  • HTML FORM은 GET, POST만 지원 (제약 존재)
  • AJAX같은 기술을 사용해서해결 가능 -> 회원 API 참고.
회원 목록 : /members -> GET

회원 등록폼 : /members/new -> GET

회원 등록 : /members/new 또는 /members -> POST

회원 조회 : /members/{id} -> GET

회원 수정 폼 : /members/{id}/edit -> GET

회원 수정 : /members/{id}/edit 또는 /members/{id} -> POST

회원 삭제 : /members/{id}/delete ->POST


* 컨트롤 URI
- GET, POST 만 지원하므로 제약 존재.
- 제약을 해결하기 위해 동사로 된 리소스 경로 사용.
- POST의 /new, /edit, /delete 가 컨트롤 URI.
- HTTP 메서드로 해결하기 애매한 경우 사용 함 (HTTP API 포함)

정리.

  • HTTP API - 컬렉션 : POST 기반 등록, 서버가 리소스 URI 결정.
  • HTTP API - 스토어 : PUT 기반 등록, 클라이언트가 리소스 URI 결정.
  • HTML FORM 사용 : 순수HTML + HTML FORM 사용, GET 과 POST 만 지원.

참고하면 좋은 URI설계 개념 (중요 팁!) 

 

REST Resource Naming Guide

In REST, having a strong and consistent REST resource naming strategy – will prove one of the best design decisions in the long term.

restfulapi.net

1. 문서 (document)

  • 단일 개념 (파일 하나, 객체 인스턴스, 데이터베이스 row)
  • 예 : /members/100, files/star.jpg

2. 컬렉션(collection)

  • 서버가관리하는 리소스 디렉터리
  • 서버가 리소스의 URI를 생성, 관리
  • 예 : /members

3. 스토어 (store)

  • 클라이언트가 관리하는 자원 저장소
  • 클라이언트가 리소스의 URI를 알고 관리
  • 예 : /files

4. 컨트롤러(controller), 컨트롤 URI (최후의 수단)

  • 문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행
  • 동사를 직접 사용
  • 예 : /members/{id}/delete
반응형
반응형

# HTTP 메서드

## HTTP API 생성

  • 요구사항 : 회원 정보 관리 API 생성 (회원 목록 조회 / 회원 조회 / 회원 등록 / 회원 수정 / 회원 삭제)

API URI 설계 (Uniform Resource Identifier)

회원 목록 조회 : /read-member-list
회원 조회 : /read-member-by-id
회원 등록 : /create-member
회원 수정 : /update-member
회원 삭제 : /delete-member
  • 과연, 이건 좋은 URI 설계일까?
  • URI 설계의 가장 중요한 건 '리소스 식별' 이다.

리소스의 의미?

회원을 등록하고 수정하고 조회하는게 리소스가 아니다.

예를 들어미네랄을 캐라에서 리소스는 미네랄. (즉, 회원이라는 개념 자체가 바로 리소스)

리소스를 어떻게 식별?

회원을 등록하고 수정하고 조회하는 것을 모두 배제.

회원이라는 리소스만식별하면 됨. (회원 리소스를 URI에 매핑)

API URI 설계 (리소스 식별, URI 계층 구조 활용)

회원 목록 조회 : /members
회원 조회 : /member/{id}
회원 등록 : /members/{id}
회원 수정 : /members/{id}
회원 삭제 : /members/{id}

참고 : 계층 구조상 상위를 컬렉션으로 보고 복수 단어 사용 권장함.
(member -> members)
  • 위와 같이 했을 때 문제 : 회원 조회 / 회원 등록 / 회원 수정 / 회원 삭제 구분을 어떻게 할지?....

리소스와 행위를 분리. (가장 중요한 것은 리소스를 식별하는 것)

URI는 리소스만 식별. (URI는 리소스를 판별할때 사용)

리소스와 해당 리소스를 대상으로 하는 행위를 분리.

리소스 : 회원

행위 : 조회 / 등록 / 삭제 / 변경

리소스는 명사, 행위는 동사(미네랄을 캐라)
  • 그렇다면 행위(메서드)는 어떻게 구분?.. -> HTTP 메서드가 식별.

## HTTP 메서드 (GET, POST)

  • GET : 리소스 조회
  • POST : 요청 데이터 처리 (주로 등록에 사용)
  • PUT : 리소스를 대체, 해당 리소스가 없으면 생성
  • PATCH  : 리소스 부분 변경
  • DELETE : 리소스 삭제
  • HEAD : GET 과 동이랗지만 메시지 부분을 제외, 상태 줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션 (메서드)을 설명 (주로 CORS에서 사용)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행

1. GET (리소스 조회)

서버에 전달하고 싶은 데이터는 query (쿼리 파라미터, 쿼리 스트링)를 통해 전달.

메시지바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아 권장하지 않음.

2. POST (요청 데이터 처리)

  • 핵심 : 메시지 바디를 통해 서버로 요청 데이터 전달.
  • 서버는 요청 데이터를 처리.
  • 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능 수행.
  • 주 용도 : 주로 전달된 데이터로 신규 리소스 등록 / 프로세스 처리에 사용.
  • 스팩 : POST 메스드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 쵸어 한다.
POST는 다음의 기능에 사용.
1. HTML 양식에 입력 된 필드와 같은 데이터 블록을 데이터 처리 프로세스에 제공.
- 예) HTML, FROM에 입력한 정보로 회원가입, 주문 등에 사용

2. 게시판, 뉴스 그룹, 메일링 리스트, 블로그 또는 유사한 기사 그룹에 메시지 게시.
- 예) 게시판 글쓰기, 댓글 달기

3. 서버가아직 식별하지 않은 새 리소스 생성.
- 예) 신규 주문 생성

4. 기존 자원에 데이터 추가.
- 예) 한 문서 끝에 내용 추가하기 등

참고 : 이 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야 한다.
(정해진 것이 없다.)
  • POST 정리
1. 새 리소스 생성(등록)
 서버가 아직 식별하지 않은 새 리소스 생성
 
2. 요청 데이터처리
- 단순히 데이터를 생성하거나, 변경하는 것을 넘어 프로세스를 처리해야 하는 경우
예) 주문에서 결제완료 > 배달시작 > 배달완료 처럼 단순히 값 변경을 넘어 프로세스의 상태가 변경되는 경우
- POS의 결과로 새로운 리소스가 생성되지 않을 수도 있다.
예) POST/orders/{orderId}/start-delivery (컨트롤 URI)

3. 다른 메서드로처리하기 애매한 경우
- 애매하면 POST 사용
예) JSON으로 조회 데이터를 넘겨야 하는데, GET 메서드를 사용하기 어려운 경우

3. PUT (리소스를 완전히 대체)

  • 리소스가 있으면 '완전히' 대체, 리소스가 없으면 생성 (덮어쓰기)
  • 주의 : 리소스를 '완전히' 대체한다. 
  • 중요 : 클라이언트가 리소스를 식별. (클라이언트가 리소스 전체 위치를 알고 URI 지정 - POST와의 가장 큰 차이)

4. PATCH (리소스 부분 변경)

  • 리소스를 부분적으로 변경할 때 사용. (PATCH 지원 안될 경우에는 POST 사용)

5. DELETE (리소스 제거)

  • 리소스를 제거할 때 사용.

## HTTP 메서드의 속성

1. 안전 (Safe Methods)

  • 호출해도 리소스를 변경하지 않는 것.
  • 계속 호출해서 로그가 쌓여장애가 발생한다면? -> 안전은 해당 리소스만을 고려.
  • 멱등 (Idempotent Methods)
  • 몇 번을 호출해도 결과가 동일.

2. 멱등 메서드

GET : 여러번 조회해도 같은 결과 조회.

PUT : 결과를 대체. (같은 요청 여러번 해도 최종 결과는 동일)

DELETE : 결과를 삭제. (같은 요청 여러번 해도 삭제된 결과 동일)

POST : 멱등이 아님!!!!!!! 두 번 호출하면 같은결제가 중복해서 발생할 수 있다.
  • 멱등 활용 : 자동 복구 메커니즘에 활용.
  • 재 요청 중간에 다른 곳에서 리소스를변경해 버리면? -> 멱등은 외부 요인으로 중간에 리소스가 변경되는 것은 고려하지 않음.

3. 캐시가능 (Cacheable Methods)

  • 응답 결과 리소스를 캐시해서 사용해도 되는지?
  • GET / HEAD / POST / PATCH 에서 캐시 가능.
  • 실제로는 GET / HEAD 정도만 캐시로 사용. (POST, PATCH는 본문 내용까지 캐시 키로 고려해야 하는데, 구현 쉽지 않음)
반응형

+ Recent posts