1. JAVA란?
: 객체 지향 언어
하나의 기능을 객체 형태로 만들어, 객체들을 결합하여 하나의 프로그램을 만드는 언어이다.
: 독립적인 플랫폼 언어
자바는 JVM에 의해 실행되기 때문에, 어떠한 운영체제라도 독립적으로 자바 언어를 사용할 수 있다.
: 자동 메모리 관리가 되는 언어
자바는 객체 생성 시 자동적으로 메모리 영역을 찾아 바로 할당되기에, 개발자가 직접 메모리에 접근하지 않는다.
: 멀티 쓰레딩을 지원하는 언어
하나의 프로그램 단위가 동일한 스레드를 동시에 수행할 수 있다. (자바는 자바 API를 사용하기에 쉽게 구현 가능하다.)
1-1. class란?
: 객체를 정의하는 틀
| 클래스의 구성 요소 |
| 1. 필드(field) : 객체의 상태를 나타내는 클래스에 포함된 변수 |
| 2. 메소드(method) : 객체의 행동을 나타내는, 특정 작업을 수행하기 위한 명령문의 집합 |
*클래스를 사용하기 위해 주의할 점!
자바에서 클래스를 사용하기 위해서는 해당 클래스 타입의 객체를 선언해야 합니다.
1-2. 생성자란?
: 클래스로부터 객체를 만들어내는 메소드, 객체의 초기화를 위해 사용
| * 생성자의 특징 |
| 1. 생성자명 = 클래스명 |
| 2. 다른 멤버 함수와 달리, 리턴 타입 X |
| 3. 객체 생성시, 자동으로 한 번 호출 ! |
| 4. 매개 변수 조건에 따라 여러개 작성 가능 |
| 5. 클래스에 최소 1개는 존재해야 하며 생성자 코드가 없을 경우, 컴파일러가 기본 생성자를 자동 생성 |
1-3. 상속이란?
: 기존의 클래스에 기능을 추가 or 재정의 하여 새로운 클래스를 정의하는 것
* 기존에 정의되어 있는 클래스의 모든 필드(field)와 메소드(method)를 물려받아 새로운 클래스 생성
상속의 종류
| #1 기존에 정의 되어 있는 클래스 | #2 상속을 통해 새롭게 작성 되는 클래스 |
| 부모 클래스 (parent class) or 상위 클래스 (super class) |
자식 클래스 (child class) or 하위 클래스 (sub class) |
상속의 장점
: 기존에 작성된 클래스 재활용 가능, 클래스 간의 계층적 관계 구성 가능
*** 중요! 꼭 기억! 자바는 다중 상속이 불가능하다!
1-4. 접근제어자란?
: 자바에서 정보 은닉을 제공하는 기능
| [정보 은닉 : 객체 지향에서의 정보 은닉이란, 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨긴다는 개념] |
접근 제어자를 사용하면 클래스 외부에서 직접적인 접근을 허용하지 않는 멤버를 설정하여,
정보 은닉 구체화가 가능하다.
# 자바에서 제공하는 접근 제어자
| private | public | protected |
| 해당 멤버를 선언한 클래스에서만 접근 가능 | 해당 객체를 사용하는 프로그램 어디에서나 접근 가능 | 동일 패키지 or 해당 클래스의 자식 클래스에서만 접근 가능 -> 다른 패키지의 자식 클래스가 아닌, 클래스에서는 접근이 불가 |
** 자바에서 접근 제어자가 지정되지 않으면, 자동적으로 default 접근 제어를 가지게 된다.
default 접근 제어를 가지는 멤버는, 같은 클래스의 멤버와 같은 패키지에 속하는 멤버에서만 접근 가능
1-5. 오버로딩 이란?
| 메소드 시그니처 | 메소드 오버로딩의 핵심이 되는 개념 |
| 메소드 오버로딩 | 같은 이름으로 메소드를 중복하여 정의하는 것 |
메소드 시그니처
-> 메서드 선언부에 명시되는 매개변수의 리스트로,
두 개의 메소드의 매개변수 개수와 타입, 그 순서까지 모두 같다면 두 메서드의 시그니처는 같다.
메소드 오버로딩
: 자바에서는 원래 한 클래스 내에서, 같은 이름의 메소드를 둘 이상 가질 수 없다.
하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메소드를 작성하는 것이 가능하다.
'메소드 오버로딩'은 서로 다른 "시그니처"를 갖는 여러 메소드 같은 이름으로 정의하는 것이다.
# 메소드 오버로딩의 조건은?
| 1. 메소드의 이름이 같아야 한다. |
| 2. 메소드의 시그니처, 즉 매개변수의 개수 또는 타입이 달라야 한다. |
1-6. 오버라이딩 이란?
메소드 오버라이딩 : 상속 관계에 있는 부모 클래스에서 이미 정의된 메소드를,
자식 클래스에서 같은 시그니처를 갖는 메서드로 다시 정의하는 것
-> 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속받는다.
-> 메소드 오버라이딩이란, 상속 받은 부모 클래스의 메소드를 재정의 하여 사용하는 것!
# 메소드 오버라이딩의 조건은?
| 1. 메소드의 선언부는 기존 메소드와 완전히 같아야 한다. |
| 2. 부모 클래스의 메소드 보다 접근 제어자를 더 좁은 범위로 변경할 수 없다. |
# 오버라이딩과 오버로딩은 전혀 다른 개념! (혼동 주의!)
| 오버로딩 | 오버라이딩 |
| 서로 다른 시그니처를 갖는 여러 메소드를 하나의 이름으로 정의 |
부모 클래스에서 이미 정의된 메소드를 자식 클래스에서 같은 시그니처를 갖는 메소드로 재정의 |
1-7. Getter & Setter
private 멤버 변수의 문제점
: 멤버 변수를 private으로 설정하면 외부에서 1. 정보를 보지 못하거나 2. 변경하지 못한다는 문제가 발생
이를 해결하기 위해,
1. Getter & Setter를 이용하여 멤버 변수의 확인 or 변경을 접근제어자와 다르게 가능하여 객체의 무결성을 보장한다.
*객체의 무결성이란?
: 신뢰할 수 있는 서비스 제공을 위해 의도치 않은 요인에 의해 데이터가 변경되거나
손상되지 않고 안전성, 정확성, 일관성을 유지함을 보장하는 특성
Getter & Setter 기본 형태
| get or set + (원하는 데이터명) |
Getter & Setter 사용 시 주의할 점!
| 멤버 변수는 필요한 게 아니라면, 우선 private으로 만들고 필요할 때 변경하기! (public setter가 객체를 망가트릴 위험이 있기 때문에!) |
| 따라서, setter는 미리 만들어 놓지 말고 꼭 필요할 시에만 만들기! public getter는 비교적 자유롭게 추가해도 된다. |
1-8. 추상 클래스
추상 메서드 : 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메서드
추상 메서드의 선언
| 추상 메소드는 선언부만 존재 O , 구현부는 작성 X |
| 구현되어 있지 않은 구현부를 자식 클래스에서 오버라이딩 하여 사용 abstract 반환타입 메소드 이름(); |
추상 클래스 : 자바에서는 하나 이상의 추상 메서드를 포함하는 클래스
1-9. 인터페이스
인터페이스 vs 추상 클래스
| 인터페이스 | 추상 클래스 |
| : 추상 클래스 , 추상 메소드, 생성자 , 필드 , 일반 메소드 포함 가능 |
: 오로지 추상 메소드와 상수만을 포함 가능 |
* 중요! 인터페이스는 클래스와 다르게 다중상속(구현)이 가능하다.
인터페이스의 선언
| 접근제어자 interface 인터페이스 이름 { public static final 타입 상수이름 = 값; ... public abstract 메소드이름(매개변수 목록); ... } |
1-10. 예외처리
컴퓨터 시스템이 동작하는 도중에 예상하지 못한 사태가 발생하여
실행 중인 프로그램이 영향을 받는 것은, 오류 (Error)와 예외 (Exception) 두 가지로 구분이 가능합니다.
| Error (오류) | Exception (예외) |
| 시스템 레벨에서 프로그램에 심각한 문제를 야기하여 실행 중인 프로그램을 종료 시킨다. -> 이러한 오류는 개발자가 미리 예측하여 처리할 수 없는 것이 대부분이므로, 오류에 대한 처리는 할 수 없다. |
오류와 마찬가지로 실행 중인 프로그램을 비정상적으로 종료시키지만, 발생할 수 있는 상황을 미리 예측하여 처리할 수 있다. -> 개발자는 예외 처리를 통해 예외 상황을 처리할 수 있도록 코드의 흐름을 바꿀 필요가 있다. |
: 자바에서는 프로그램이 실행되는 도중 발생하는 예외를 처리하기 위해, try / catch / finally 문을 사용할 수 있다.
| try { 예외를 처리하길 원하는 실행 코드; |
| } catch (e1) { e1 예외가 발생할 경우에 실행될 코드; |
| } catch (e2) { e2 예외가 발생할 경우에 실행될 코드; }... |
| finally { 예외 발생 여부와 상관없이 무조건 실행될 코드; } |
#각 블록의 기능과 의미
try 블록 : 기본적으로 맨 먼저 실행되는 코드로, 여기에서 발생한 예외는 catch 블록에서 처리
catch 블록 : try 블록에서 발생한 예외 코드나 예외 객체를 인수로 전달받아 그 처리를 담당
finally 블록 : try 블록에서 예외가 발생하건 안 하건 맨 마지막에 무조건 실행되는 블록
catch 블록과 finally 블록은 선택적 옵션으로 반드시 사용할 필요는 없다.
따라서 사용할 수 있는 모든 적합한 try 구문은 다음과 같다.
- try/ catch
- try/ finally
- try/ catch/.../finally
1-11. 어노테이션
자바의 어노테이션 : 메타데이터
| 1. 컴파일러에게 문법 에러를 체크 |
| 2. 코드를 자동으로 생성하도록 정보 제공 |
| 3. 실행 시 특정 기능을 실행하는 정보 제공 |
| 4. 자동으로 파일을 생성 |
*메타데이터란?
: 애리케이션이 처리해야 할 데이터가 아닌, 컴파일 과정과 실행 과정에서
코드를 어떻게 컴파일하고 처리할 것인지를 알려주는 정보
-> 곧 데이터를 위한 데이터로, 데이터를 설명해 주는 데이터에 해당합니다.
| 어노테이션(Annotation(@)) |
| 사전적으로는 주석이라는 의미이며, 자바 코드에 @을 이용해 주석처럼 달아, 특수한 의미를 부여합니다. |
1-12. 컬렉션
: 많은 수의 데이터를 그 사용 목적에 적합한 자료 구조로 묶어 하나로 그룹화한 객체
-> 자바에서는 이러한 컬렉션을 위한 인터페이스와 클래스들이 있습니다.
컬렉션의 종류
| 1. List : 데이터를 순서에 따라 관리 |
| 2. Set : 중복이 허용되지 않는 데이터 관리 |
| 3. Map : 데이터를 Key와 Value로 짝을 이루어 관리하며, Key 값은 중복 허용 X |
| 4. Queue : 데이터를 IN & OUT 순서를 선입선출 방식으로 관리 |
| 5. Stack : 데이터를 IN & OUT 순서를 후입선출 방식으로 관리 |
2. Web 서버란?
| 정적 페이지 (Static Pages) | 동적 페이지 (Dynamic Pages) |
| 데이터베이스에서 정보를 가져오는 것과 같은 별도의 서버에서의 처리 없이, 사용자들에게 보여줄 수 있는 페이지 -> 어떤 사용자가 오던간에 동일한 페이지를 보여주게 됩니다. (ex. 서비스 로고) |
서버에서 DB에서 정보를 가져와 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 + 해당 결과가 포함된 파일을 보여주는 페이지 -> 사용자들마다 다른 페이지가 보여질 수 있습니다. (ex. 인터넷 쇼핑몰 장바구니) |
웹 서버 (Web Server)
- 클라이언트가 요청한 정적인 콘텐츠를 HTTP 프로토콜을 통해 제공해 주는 서버
- 동적인 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 웹 서버에서 처리할 수 없기 때문에 컨테이너(Container)로 보내주는 역할
웹 컨테이너 (Container)
- 동적인 데이터들을 처리하여 정적인 페이지로 생성해 주는 소프트웨어 모듈
WAS (Web Application Server)
- 웹 서버로부터 오는 동적인 요청을 처리하는 서버 (웹 서버 + 컨테이너)
웹 서버가 필요한 이유
- Web Server에서는 정적 콘텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄임!
WAS (Web Application Server)가 필요한 이유
- WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞는 결과를 만들어 제공함으로써 자원을 효율적으로 사용
웹 서버 (Web Server) + WAS 조합

출처 : 서울여자대학교 멋쟁이사자처럼 12기 교육 자료
1. 기능을 분리하여 서버 부하 방지
2. 물리적으로 분리하여 보안 강화
3. 여러 대의 WAS를 연결 가능
4. 여러 웹 애플리케이션 서비스 가능
'[멋쟁이사자처럼 12기] 백엔드 세션' 카테고리의 다른 글
| [멋쟁이사자처럼 12기] 백엔드 세션 _ 4주차 JPA (0) | 2024.04.10 |
|---|---|
| [멋쟁이사자처럼 12기] 백엔드 세션 _ 3주차 스프링 & 데이터베이스 기초 (0) | 2024.04.03 |