티스토리 뷰

코딩

JAVA 정리 - 1

ehzim 2024. 4. 12. 23:13

 

💡 JAVA의 특징

- 객체지향 언어이다.

- 배우기 쉽다.

- 운영체제(플랫폼)에 독립적이다.

- 가비지 컬렉션을 지원한다.

- 동적이다.

- 스레드를 지원한다.

- 네트워크 프로그래밍과 분산처리를 지원한다.

 

 

 

 

💡 객체지향이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 개념을 컴퓨터 프로그래밍에 반영하여 프로그램을 구조화하는 프로그래밍 패러다임이다. 객체지향 프로그래밍에서는 모든 것을 객체(Object)로 간주하고, 객체 간의 상호 작용을 통해 프로그램을 구성한다.

객체(Object): 객체는 데이터와 데이터를 처리하는 메서드(Method)로 이루어진 소프트웨어의 기본 구성 요소이다. 예를 들어, 자동차 객체는 속도, 색상, 모델 등의 속성을 가지고 있을 수 있으며, 주행, 정지, 가속 등의 행위를 수행할 수 있다.

클래스(Class): 클래스는 객체의 설계도 또는 틀로, 객체를 생성하기 위한 일종의 템플릿입니다. 클래스는 객체의 속성을 나타내는 필드(Field)와 객체의 행위를 나타내는 메서드로 구성된다.

캡슐화(Encapsulation): 캡슐화는 객체의 상태(데이터)와 행위(메서드)를 하나로 묶고, 외부에서의 접근을 제한하는 것을 말한다. 캡슐화는 정보 은닉(Information Hiding)을 통해 객체 내부의 구현을 숨기고 외부에서는 객체의 인터페이스만 접근할 수 있도록 한다.

상속(Inheritance): 상속은 기존 클래스(부모 클래스 또는 슈퍼 클래스)를 확장하여 새로운 클래스(자식 클래스 또는 서브 클래스)를 생성하는 개념이다. 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있으며, 이를 통해 코드의 재사용성과 확장성을 높일 수 있다.

다형성(Polymorphism): 다형성은 같은 이름의 메서드나 연산자가 서로 다른 동작을 하는 것을 의미한다. 다형성을 통해 객체의 타입에 관계 없이 동일한 인터페이스를 사용하여 다양한 객체를 다룰 수 있다.

객체지향의 장점:

  1. 코드의 재사용성이 높아지고, 유지보수가 용이해진다.
  2. 코드의 가독성이 높아지며, 디버깅이 쉬워진다.
  3. 소프트웨어의 구조가 유연해져 변경에 대응하기 쉬워진다.
  4. 객체 단위로 코드를 구조화하므로 협업이 용이해진다.


객체지향의 단점:

  1. 객체 지향 설계를 잘못하면 복잡성이 증가할 수 있다.
  2. 객체 간의 상호 작용으로 인해 오버헤드가 발생할 수 있다.
  3. 객체 간의 상호 작용으로 인해 오버헤드가 발생할 수 있다.
  4. 객체지향 프로그래밍은 소프트웨어 개발에서 가장 널리 사용되는 프로그래밍 패러다임 중 하나이며, 현대 소프트웨어 개발에서 중요한 역할을 한다.

 

 

 

💡 가비지 컬렉션이란?

메모리 관리 기법 중 하나로, Heap 영역에 배치된 객체들을 관리하는 모듈이다.

 

가비지 컬렉션(Garbage Collection)은 프로그램에서 더 이상 사용되지 않는 메모리를 자동으로 해제하는 메모리 관리 기법이다. 주로 객체 지향 프로그래밍 언어에서 사용되며, 특히 자바와 C#과 같은 언어에서 널리 사용된다.

 

가비지 컬렉션의 작동 원리:

  1. 참조 계수(Reference Counting): 가비지 컬렉션의 초기 버전 중 하나는 참조 계수를 사용하는 방법이었다. 객체가 다른 객체에 의해 참조될 때마다 해당 객체의 참조 계수를 증가시키고, 참조가 해제될 때마다 감소시킨다. 참조 계수가 0이 되면 해당 객체가 사용되지 않는 것으로 간주하고 메모리에서 해제합니다. 그러나 이 방법은 순환 참조(circular references)와 같은 문제에 대처하기 어렵다.
  2. Reachability-Based 방법: 현대의 대부분의 가비지 컬렉션 기술은 도달 가능성(Reachability)에 기반하여 동작한다. 이 방법은 프로그램에서 사용되지 않는 객체를 찾기 위해 루트(root) 객체들로부터 시작하여 참조 체인을 탐색하고, 도달할 수 없는 객체를 가비지로 간주하여 해제한다. 이러한 방법은 순환 참조와 같은 복잡한 상황에서도 효과적으로 작동한다.

가비지 컬렉션의 장점:

  1. 메모리 누수를 방지한다: 가비지 컬렉션은 개발자가 메모리 할당과 해제를 수동으로 관리하는 것을 피하고, 메모리 누수를 방지한다.
  2. 프로그래머의 부담을 줄인다: 가비지 컬렉션은 자동으로 메모리 관리를 처리하므로 개발자는 메모리 관리에 대한 부담을 줄일 수 있다.
  3. 안전한 메모리 관리를 제공한다: 가비지 컬렉션은 다른 일반적인 메모리 오류들을 방지하고, 안전한 메모리 관리를 제공한다.

가비지 컬렉션의 단점:

  1. 성능 오버헤드: 가비지 컬렉션은 주기적으로 실행되어야 하며, 이 때문에 실행 시간에 성능 오버헤드가 발생할 수 있다.
  2. 예측 불가능한 지연: 가비지 컬렉션은 실행 시간에 발생하므로 일시적인 지연이 발생할 수 있다. 이는 실시간 시스템 또는 높은 성능 요구사항이 있는 시스템에서 문제가 될 수 있다.

가비지 컬렉션은 프로그래밍 언어의 편의성과 안정성을 높여주는 중요한 메모리 관리 기법 중 하나이다.

 

 

 

💡 JVM이란?

'Java Virtual Machine'의 약어로 자바 가상 머신을 뜻 한다.

자바를 실행하기 위한 환경을 제공하는데 자바 바이트 코드를 특정 플랫폼의 기계어로 변환하고 실행하는 역할을 한다.

또한 java와 운영체제 사이에서 중개자 역할을 하여 java가 운영체제에 구애받지않고 독립적으로 작동을 할 수 있도록 한다.

 

클래스 로더(Class Loader): JVM은 클래스 로더를 통해 필요한 클래스 파일을 로딩합니다. 클래스 로더는 클래스 파일을 찾아서 읽고 메모리에 로드하는 역할을 합니다.

런타임 데이터 영역(Runtime Data Areas): JVM은 런타임 데이터 영역을 통해 프로그램 실행 중에 사용되는 데이터를 관리합니다. 주요 데이터 영역으로는 메서드 영역(Method Area), 힙(Heap), JVM 스택(JVM Stack), 네이티브 메서드 스택(Native Method Stack), PC 레지스터(Program Counter Register)가 있습니다.

실행 엔진(Execution Engine): JVM은 실행 엔진을 통해 바이트 코드를 실제로 실행합니다. 주요 실행 엔진으로는 인터프리터(Interpreter)와 JIT 컴파일러(Just-In-Time Compiler)가 있다.

인터프리터(Interpreter): 바이트 코드를 한 줄씩 읽어서 해석하고 실행하는 방식으로 동작합니다. 실행 속도가 느릴 수 있지만, 빠른 시작 속도를 가진다.

JIT 컴파일러(Just-In-Time Compiler): 바이트 코드를 특정 플랫폼의 기계어로 변환하여 실행합니다. 인터프리터보다 빠른 실행 속도를 제공하지만, 초기 부하가 있을 수 있다.

 

JVM의 장점은 플랫폼의 독립성, 메모리 관리, 보안, 실행 속도 개선 등이 있다.

단점으로는 일부 언어에 비해 느릴 수 있다는 성능적 문제와 메모리를 많이 사용할 수 있으므로 메모리 사용에 있어 단점이 존재한다.

 

 

💡 자바의 접근제한자의 종류 및 설명

public

외부클래스가 자유롭게 사용 가능하다. 모든 접근을 허용한다.

protect

같은 패키지 이거나 자식 클래스 즉 상속 받은 클래스일때 접근이 가능하다.

default

기본제한자로 자신 클래스 또는 같은 패키지 내에서만 접근이 가능하다.

private

외부에서 사용할 수 없다. 같은 클래스 내에서만 접근이 가능하다.

 

 

 

 

💡 MVC 구조란?

 

MVC(Model-View-Controller)는 소프트웨어 디자인 패턴 중 하나로 웹 애플리케이션을 구축하는 데 널리 사용되는 아키텍처 모델이다.

비즈니스 처리 로직과 사용자 인터페이스를 구분시켜 서로 영향없이 개발이 가능하다는 장점이 있다.

MVC는 애플리케이션을 모델, 뷰, 컨트롤러 세 가지 구성 요소로 분리하여 개발하고 유지보수하는 데 도움을 준다.

모델(Model):
모델은 애플리케이션의 데이터와 비즈니스 로직을 담당한다.
데이터베이스에서 데이터를 가져오거나 조작하고, 이를 컨트롤러에게 전달한다.
스프링에서는 POJO(Plain Old Java Object)를 사용하여 모델을 구현한다.

 

어플리케이션이 "무엇"을 할 지에 대한 정의한다. 처리되는 데이터, 데이터베이스, 내부 알고리즘 등 내부 비즈니스에 관한 로직의 처리를 수행한다. 즉 사용자에게 보이지 않는 로직이다.


뷰(View):
뷰는 사용자에게 보여지는 부분으로, 화면(UI)을 담당한다.
클라이언트로부터 요청을 받은 컨트롤러가 모델을 이용하여 동적인 데이터를 생성하고, 이를 뷰에 전달한다.
뷰는 이 데이터를 HTML, XML, JSON 등의 형식으로 렌더링하여 사용자에게 제공한다.
스프링에서는 JSP, Thymeleaf, FreeMarker 등의 템플릿 엔진을 사용하여 뷰를 구현할 수 있다.

 

말 그대로 사용자에게 보여지는 영역이다. JSP등 사용자 인터페이스를 담당한다.

 

 

컨트롤러(Controller):
컨트롤러는 클라이언트의 요청을 받아들이고, 해당 요청을 처리하는 역할을 한다.
요청에 따라 적절한 모델을 호출하고, 그 결과를 적절한 뷰에 전달한다.
주로 사용자의 액션을 받아들이고, 이를 바탕으로 비즈니스 로직을 처리하고 데이터를 조작하는 역할을 한다.
스프링에서는 @Controller 어노테이션을 사용하여 컨트롤러를 정의하고, @RequestMapping 어노테이션 등을 사용하여 요청 매핑을 처리한다.
스프링의 MVC는 이러한 구성 요소들을 통해 웹 애플리케이션을 간단하게 구축하고, 유지보수하기 쉽도록 도와준다. 이 모델은 각 구성 요소들 간의 의존성을 낮추고, 유연성을 높이는 데 도움을 준다.

모델에게 "어떻게"할 것인지를 알려주며, 모델과 뷰 사이를 연결하는 역할을 한다. 사용자의 입출력을 받아 데이터를 처리한다.

 

 

 

'코딩' 카테고리의 다른 글

이번주 리뷰  (0) 2024.07.05
AOP  (0) 2024.06.25
[19주 4일차] 프로젝트  (1) 2024.02.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday