본문 바로가기

[멋쟁이사자처럼 12기] 백엔드 세션

[멋쟁이사자처럼 12기] 백엔드 세션 _ 2주차 자바 / 웹서버

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 구문은 다음과 같다. 

  1. try/ catch
  2. try/ finally
  3. 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. 여러 웹 애플리케이션 서비스 가능