본문 바로가기
JavaWeb

자바 웹 공부13 - Generics, Annotation, Enums, Networking

by 넴넴L 2023. 1. 13.
728x90

오늘은 자바 기초 마지막 날이다.

중요한 개념들이 많으니 자세히 살펴보자

 

 

Generics
- 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능
- 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄임

코드로 만들어보자

위는 우리가 매일 했던 것이고

아래는 새로 공부하는 Generic이다

 

차이점은 그럼 뭐야?

제너릭을 사용하면 이미 다루고자 하는 데이터 타입을 알고 있기 때문에 따로 지정하지 안 해줘도 됨

위는 String을 썼지만 아래는 String을 안 쓰고도 사용이 가능하다

 

장점

1. 타입 안정성을 제공

2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 짐

 

제너릭 용어
People <T>
: 제너릭 클래스. ‘T의 People’ 또는 ‘T People’이라고 읽음
T : 타입 변수 혹은 타입 매개변수
People : 원시 타입

Type Variable(타입 변수)
- 특정 클래스 옆 <>에 있는 변수
- 타입 변수가 여러 개인 경우 ‘,’로 구분하여 나열

간단하게 생성해 보자

저기에 JI를 썼는데 어느 것이 와도 무방하다.

아까와 똑같다. (Developer)를 계속 만들어 줘야 하기 때문에 Generic을 만들어줘서

코드를 간결하게 만들어줬다.

빨간 게 뜨는 이유는 다른 package에 Developer가 있기 때문이다.

 

이렇게 2개 이상도 적을 수 있는데

적고 난 뒤에 아래에서 반드시 2개 이상 적어줘야 한다.

그리고 <> 안에는 기본 타입(int)은 안되고 객체형 타입만 들어올 수 있다.

 

 

제너릭 다형성
- 제너릭 클래스의 객체를 생성할 때 참조변수에 지정한 제너릭 변수의 타입과
생성자에서 지정한 제너릭 제너릭 타입은 일치해야 함
- 다형성이 성립하는 상속관계라도 적용되지 않음
- 원시 타입 간에는 다형성이 적용됨

기본적인 다형성이라면 Object안에 모두 있기 때문에 되는 게 맞지만 제네릭에서는 허용되지 않는다

제너릭 클래스의 타입 변수는 다형성이 적용되지 않기 때문에
선언 시 사용한 타입변수와 생성 시 사용하는 타입변수가 같아야 한다

 

 

와일드카드를 쓰면 다형성을 사용할 수 있게 된다.

와일드카드
- 타입변수에 다형성을 적용하기 위한 방법
- ‘?’ 키워드로 사용
- extends와 super로 상한과 하한 설정 가능
<? extends T> : 와일드카드의 상한 제한. T와 그 자손들만 가능
<? super T> : 와일드카드의 하한 제한. T와 그 조상들만 가능
<?> : 제한 없음 --> <? extends Object>

이런 형식이다.

제너릭 메서드
- 메서드의 선언부에 제너릭 타입 변수가 선언된 메서드
- 타입 변수의 선언 위치는 반환 타입 바로 앞

이렇게 쓰면 T를 몰라서 오류가 뜨는데

void 앞에 <T>를 써주면 해결이 된다

 

만약에 동일한 것이 있다면?

같을 때는 위의 TMP가 아닌 같은 줄에 있는 TMP를 지정하는 것이다.

지역 변수라고 생각하면 심플할 거 같다


Annotation
- 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것
- 주석처럼 프로그래밍 언어에 영향을 미치지 않으면서도 다른 프로그램에게 유용한 정보를 제공

@Override

- 메서드 앞에만 붙일 수 있는 어노테이션

- 조상의 메서드를 오버라이딩 하는 것이라는 걸 컴파일러에게 알려주는 역할

- 오버라이딩 시 메서드 명을 잘못 적는 것과 같은 실수를 막을 수 있음 (컴파일러가 에러를 반환)

 

@Deprecated

- 사용되지 않는 필드나 메서드에 붙은 어노테이션

- @Deprecated가 붙은 대상은 다른 것으로 대체되었으니 더 이상 사용하지 않을 것을 권장한다는 의미

- @Deprecated가 붙은 대상을 사용하는 코드를 작성하면 컴파일 시 메시지를 전달

 

@FunctionalInterface

- 함수형 인터페이스를 선언할 때, @FunctionalInterface를 붙이면 컴파일러가

함수형 인터페이스를 올바르게 선언했는지 확인함

 

@SupperessWarnings

- 컴파일러가 보여주는 경고메시지가 나타나지 않게 함


 

Enums(열거형)
- 여러 상수를 선언해야 할 때, 편리하게 선언할 수 있는 방법

 

Enum 정의와 사용
- {} 안에 상수의 이름을 나열
- 사용 방법: 열거형 이름. 상수명
- == 비교 연산자 사용가능, ‘<’, ‘>’ 비교연산자 사용 불가능, compareTo() 연산자 사용
- compareTo() : 두 비교 대상이 같으면 0, 왼쪽이 크면 양수, 오른쪽이 크면 음수 반환

이렇게 작성하거나

이렇게 작성해도 된다(아래처럼)

 

이렇게 나온다.

FIRST, SECOND는 다르니 false가 뜨는 것을 확인할 수 있다


지금 내가 배우는 게 웹을 위해서인데 이거 진짜 중요하다.

 

Server
Client에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램 또는 장치

1. Web Application Server (WAS)

- 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크

- 인터넷상에서 HTTP을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 줌

- 동적 서버 콘텐츠를 수행

- 대부분 자바 기반이지만 비 자바 계열도 존재

 

기능

1. 프로그램 실행 환경과 데이터베이스 접속 기능

2. 트랜잭션 관리

3. 비즈니스 로직 수행

 

2. Web Server

- 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고,

HTML 문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램

- HTTP 혹은 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나

오브젝트(미디어 파일 등)를 전송하는 서비스 프로그램

- 정적 서버 콘텐츠를 수행

 

기능

1. HTTP

2. 통신 기록

3. 인증

4. 정적 콘텐츠 관리

5. HTTPS 지원

 

차이점 - WAS는 동적(다 다른 데이터 반환) Web Server는 정적(항상 같은 페이지)인 HTML인 문서를 줌

 

3. Database Server

- 다수의 사용자가 공유하여 사용할 목적으로 체계화하여 통합, 관리하는 데이터들의 집합소

 

특징

1. 실시간 접근성

2. 지속적인 변화

3. 동시 공유

4. 내용에 대한 참조

5. 데이터 논리적 독립

 

4. Proxy Server

- 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는

컴퓨터 시스템이나 응용 프로그램

- Proxy : 서버와 클라이언트 사이에 중계기로써 대리로 통신을 수행하는 것

 

목적

1. 익명으로 컴퓨터 유지 (보안상의 이유)

2. 캐시를 사용하여 리소스로의 접근을 빠르게 하기 위함 (캐시 저장소 역할)

3. 네트워크 서비스나 콘텐츠로의 접근 정책을 적용하기 위함 (블랙리스트, 화이트리스트)

4. 사용률을 기록하고 검사하기 위함 (접근 로그)

5. 아웃바운드 콘텐츠를 검사하기 위함 (데이터 유출 보호)

 

HTTP (Hypertext Transfer Protocol)
- 애플리케이션 레벨의 네트워크 프로토콜
- WWW (World Wild Web)에서 데이터를 주고받도록 하는 프로토콜

- Hypertext : 다른 문서로 향하는 링크가 있는 텍스트
Transfer Protocol : 통신 규약

- HTTP는 초기에는 HTML 문서 통신을 위한 프로토콜이었음
- 기술의 발전으로 미디어 리소스 및 각종 데이터 전송이 가능

클라이언트 → http Request → 서버 → http Response → 클라이언트

HTTP Request 예시

HTTP Request Method
HTTP Response 예시

 

오늘이 자바 기초 마지막 공부였는데 또 개념이 부족하면 여기 다시 오겠지

이제 기초가 끝났으니 아마 DB 쪽 공부를 하고 진짜 웹 개발을 시작할 거 같다.

다른 것을 배워도 제목은 똑같이 자바 웹 개발(날짜)로 이어나갈 것이다.