GiYeong

Java - 6 본문

CS/Java

Java - 6

gy2710 2022. 6. 13. 23:02

스크립트 언어와 컴파일 언어

스크립트 언어(Scripting Language)

소스 코드를 컴파일하지 않고 인터프리터로 소스 코드를 한줄한줄 읽어 바로 실행하는 방식으로 동작하는 언어

인터프리터(Interpreter)
소스 코드를 바로 실행하는 컴퓨터 프로그램 또는 환경

컴파일을 하지 않고 소스 코드를 읽으면서 바로 실행하기 때문에 속도가 느리다.

ex) Python

 

컴파일 언어(Compiled Language)

소스 코드를 컴파일한 수, 기계어를 CPU/Memory를 통해 읽어 실행하는 방식으로 동작하는 언어

규모가 큰 프로그램이라면 컴파일에 시간이 오래 걸릴 수 있지만, 컴파일 후 실행속도는 빠르다.

ex) C++, Java

 

  Imterpreter Compiler
번역 단위 전체 행(줄)
번역 속도 빠르다 느리다
실행 속도 느리다 빠르다

 

싱글톤 패턴(Singleton pattern)

어플리케이션이 시작될 때, 어떤 클래스가 최초 한번만 메모리를 할당하고(static), 해당 메모리에 인스턴스를 만들어 사용하는 디자인 패턴

즉, 객체의 인스턴스가 오직 1개만 생성되는 디자인 패턴

 

사용 이유

1. 메모리 낭비 방지

최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근할 때, 메모리 낭비를 방지할 수 있다.

2. 빠른 속도

이미 생성된 인스턴스를 활용하기 때문에 객체 로딩 시간이 줄어, 속도 측면에서의 이점이 있다.

3. 데이터 공유가 쉽다.

싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용할 수 있다.

여러 클래스의 인스턴스에서 싱글톤 인스턴스의 데이터에 동시에 접근하게 되면 동시성 문제가 발생할 수 있기 때문에 주의해야 한다.

4. 인스턴스가 절대적으로 한 개만 존재하는 것을 보증할 수 있다.

 

문제점

1. 코드가 길어진다.

2. 동시성 문제

syncronized 키워드를 사용해 해결할 수 있지만, 성능저하가 발생한다.

3. 테스트하기 어렵다.

자원을 공유하고 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행되려면 매변 인스턴스의 상태를 초기화해야한다.

4. private 생성자를 가지기 때문에 상속이 불가능하다.

5. 서버 환경에서는 객체가 1개만 생성됨을 보장하지 못한다.

6. 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, 다른 클래스의 인스턴스들 간의 결합도가 높아져 "개방-폐쇄 원칙"을 위배하게 된다.

7. new 키워드를 직접 사용하여 클래스 안에서 객체를 생성하고 있으므로, SOLID 원칙 중 DIP를 위반하게 되고, OCP 원칙 또한 위반할 가능성이 높다.

 

Java 싱글톤과 Spring 싱글톤의 차이

Spring 싱글톤은 Spring 프레임워크를 통해 객체(Bean)들을 싱글톤으로 관리함으로서 자바 클래스에 불필요한 코드를 제거하여 객체를 재사용하고 객체지향스러운 개발을 할 수 있도록 해준다.

 

Spring 싱글톤의 장점

1. private 생성자가 필요없어 상속이 가능하다.

2. 테스트하기 편리하다.

3. 프레임워크를 통해 1개의 객체 생성을 보장받을 수 있다.

 

Web 작동 원리

1. 사용자가 웹 브라우저의 검색창에 특정 사이트의 주소를 입력

2. 웹 브라우저가 DNS에게 특정 사이트의 (도메인)주소를 요청

3. DNS가 웹 브라우저에게 사이트의 IP주소를 응답

4. 웹 브라우저가 웹 서버에게 IP 주소를 이용하여 HTML 문서를 요청

5. 웹 서버가 WAS(웹 어플리케이션 서버)와 DB에서 웹 페이지 작업을 처리

6. 작업 처리 결과를 웹 서버에 전송

7. 웹 서버가 웹 브라우저에게 HTML 문서 결과를 응답

8. 화면에 웹 페이지 출력

웹 클라이언트
웹 서버에 자료를 요청하기 위해 http를 사용하는 클라이언트 프로그램
웹 서버
웹 서버 소프트웨어가 동작하는 컴퓨터로, 클라이언트가 요청하는 HTML 문서나 각종 리소스를 전달
WAS(웹 어플리케이션 서버)
브라우저와 DBMS(데이터 베이스 관리 시스템)사이에서 동작하는 미들웨어(중개 역할)로서, 프로그램 실행 환경과 DB 접속 기능을 제공하고, 여러 트랜잭션을 관리하며, 비즈니스 로직을 수행한다.

'CS > Java' 카테고리의 다른 글

Builder Pattern  (0) 2022.09.07
Singleton Pattern  (0) 2022.09.07
Java - 5  (0) 2022.06.11
Java - 4  (0) 2022.06.10
Java - 3  (0) 2022.06.08
Comments