아래 글은 스프링 프레임워크 첫걸음 책을 기반하여 작성한 글입니다.
인터페이스는 추상 메서드만을 가질 수 있고 구현메서드는 가질 수 없는 일종의 추상 클래스이다.
public interface Greet {
/**
* 인사
*/
void greeting();
}
public class MorningGreet implements Greet {
@Override
public void greeting() {
System.out.println("좋은 아침입니다.");
}
}
위 코드를 보고 생각해야 할 것이 있다.
1. 추상클래스
가 들어가야 하는데 void greeting();이라고 선언하였다. 실은 암묵적으로 인터페이스에 함수를 선언하게 되면 public abstract
가 앞에 붙게 되어서 그런것이다. 동일한 경우로 interface에 변수를 선언하면 앞에 public static final
이 자동으로 붙게 된다.
2. @Override
가 붙으면 메서드를 재정의한 것을 의미한다.
3. implements
라는 키워드를 통하여서 인터페이스를 구현한다.
우리는 자바에서 생각해보면 배열이라는 친구도 있는데 따로 컬렉션 프레임워크라는 것이 존재하고 되도록이면 그것을 사용한다. 왜 그럴까?
등등의 문제가 존재하기에 그래서 컬렉션 프레임워크를 사용하여 널리 알려진 자료구조 바탕으로 하여 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장) 할 수 있는 자료구조들을 만들어 놓게 되었다.
일단 책에서 설명한 내용인 List에 대해서 자세히 알아보자.
ArrayList는 List 인터페이스를 구현한 클래스로, 컬렉션 프레임워크에서 가장 많이 사용되는 컬렉션 클래스이다.
LinkedList는 불연속적으로 저장된 데이터를 서로 연결한 형태로 구성된 자료구조이자 컬렉션이다.
컬렉션 | 읽기 (접근시간) | 추가/삭제 | 비고 |
---|---|---|---|
ArrayList | 빠르다 | 느리다 | 순차적 추가삭제는 더 빠르다. 메모리를 비효율적으로 쓴다. |
LinkedList | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어진다. |
List<String> names = new ArrayList<>();
보통 이런식으로 선언을 하는데 <String>
인 곳을 List에 넣을 수 있는 형태를 제한하는 제네릭
이라고 부른다.
클라이언트 서버는 두 개의 컴퓨터 프로그램 사이에 이루어지는 역할 관계를 의미한다.
- 클라이언트 : 서비를 요청하는 쪽
- 서버 : 서비스를 제공하는 쪽
브라우저 : 인터넷을 이용할 때 사용하는 소프트웨어이다.
브라우저 예시
- 구글 크롬
- 파이어 폭스
- 마이크로소프트 엣지
- 인터넷 익스플로러
- 사파리
- 등등
- 애플리케이션 : 응용 소프트웨어의 약어이다. -> 프로그래밍 언어로 작성한 소프트웨어이다.
- 웹 애플리케이션 : 인터넷을 통해 사용되는 응용 프로그램이다. -> 검색 엔진, e-커머스, e-러닝 등등
애플리케이션 코드를 제공한다면 그것은 WAS
자바에서는 서블릿 컨테이너 기능을 제공하면 WAS라고 부른다.
클라이언트와 웹 서버는 HTTP 요청(request), HTTP 응답(response)로 사호작용한다. 이것을 HTTP 통신이라고 한다.
큰 흐름은 다음과 같다.
GET method는 클라이언트에서 서버로 어떠한 리소스로부터 정보를 요청하기 위해 사용되는 메서드입니다.
데이터를 읽거나, 검색하는데 사용하는 method라고 생각하면 될 거 같다.
GET은 요청을 전송할 때 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(QueryString)이라고 부른다.
e.g.) www.example-url.com/resources?name1=송유현&name2=곽철용위 예는 앞서 말한 쿼리스트링을 포함한 URL이다. 파라미터인 name1과 name2를 통해 값을 전달받을 수 있습니다.
만약, 요청 파라미터가 여러 개이면 &로 연결한다.
POSTmethod는 리소스를 생성/업데이트하기 위해 서버에 데이터를 보내는 데 사용된다.
POST는 GET과는 다르게 request body에 값을 담아서 보내게 된다. 이렇게 되면 GET과는 다르게 URL에는 보이지 않게 리소스를 보내게 된다.
그리고 GET과는 다르게 길이의 제한 없이 데이터를 전송할 수 있다.
idempotent : 멱등 이라는 뜻이며 똑같은 요청을 계속 했을때 값이 똑같이 나오면 멱등하다고 표현한다.
보통 이런 주제로 질문들이 많이 나오는데 그럼 차이는 어떤것일까?
일단 영어 뜻부터 다르다. GET은 받는다, POST은 보낸다의 의미가 있다.
흔히 나오는 예제로는 브라우저의 즐겨찾기에 등록할 수 있는가?
에 대한 예로 자주 설명을 한다.
GET에서는 URL에 연결해 송신하기 때문에 '즐겨찾기'에 등록하는 URL 자체에 쿼리 스트링으로 검색 데이터를 포함할 수 있다.
POST에서는 검색 데이터를 요청 본문에 저장하기 때문에 '즐겨찾기'에 등록할 수 없다. POST로 요청을 보내려면 HTML의 <form>
태그 속성의 method=POST 를 지정해야 한다.
그래서 브라우저의 즐겨찾기에서 URL에 액세스하는 것으로는 GET 메서드로 요청을 보낸다.
Lombok(롬복)은 Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리입니다.
코드를 작성하는데 도와주는 라이브러리라고 생각하면 좋을 거 같다.
Gradle은 빌드 도구이다.
빌드 도구가 뭘까?
위와 같은 설정들을 gradle이 지원해준다.