[Spring] 메모장

박찬영·2024년 3월 19일

Spring

목록 보기
1/42
post-thumbnail

0. 패키지 (Package)

자바 패키지란 클래스들의 모음집 이다.
패키지를 통해서 라이브러리끼리 구분이 가능하다.
패키지를 사용하는 이유는 클래스명의 고유성을 보장하기 위함이다.

때로는 서로 다른 용도의 라이브러리를 도입할 때 이름이 충돌하는 클래스들이 있을 수 있는데 이럴 때 패키지 기능을 사용하여 클래스의 이름이 충돌하는 것을 방지할 수 있다.

1. 도메인

간단히 말하면 해결하고자 하는 문제의 영역을 도메인이라고한다.

2. 엔티티 (Entity)

엔터티(Entity)를 그대로 번역하면 실제, 독립체라는 뜻으로 데이터 모델링에서 사용되는 객체라고 생각하면 된다. 즉 엔터티(Entity)는 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 "어떤 것(Thing)"이라고 말할 수 있다. "어떤 것"이라고 부르는 것처럼 엔터티는 추상적인 의미를 가지며 학교나 학생처럼 현실 세계에서 눈에 보이는 개념일 수도 있고 주문이나 결제처럼 눈에 보이지 않는 개념일 수도 있다.

  • 엔터티(Entity) : 엔터티는 데이터베이스 테이블이라고 생각하시면 이해가 편합니다.

  • 인스턴스(Instance) : 인스턴스는 데이터베이스에 저장된 데이터 내용의 전체 집합을 의미합니다.

  • 속성(Attribute) : 속성은 인스턴스의 구성요소로써 더 이상 분리되지 않는 단위로, 업무에 필요한 데이터를 저장할 수 있습니다.

3. 레퍼지토리 (Repository)

레퍼지토리는 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들(예: findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 레퍼지토리이다.

4. Controller

  1. 사용자의 요청이 진입하는 지점(entry point)이며
  2. 요청에 따라 어떤 처리를 할지 결정해주며
    단, controller는 단지 결정만 해주고 실질적인 처리는 서비스에서 담당한다.
  3. 사용자에게 View를 응답으로 보내준다.

5. 객체, 인스턴스

  1. 클래스 (class)

소스코드를 작성하는 것은 어떠한 프로그램을 구현하기 위한 과정을 기술하는 것이다. 결국 우리가 작성한 내용대로 동작하게 되고 이것은 일종의 설계도 또는 설명서라고 볼 수 있다.

  1. 객체 (Object), 인스턴스 (Instance)

객체는 간단히 말하면 변수라고 이해하면 된다. int a, String s이 예이다. 단, 객체는 자료형이 클래스 타입인 것이고 일반 자료형과 비교하기 위해 변수라는 말 대신 객체라고 사용하는 것이다.

public class ObjEx01 {
	public static void main(String[] args) {
		String s; // String형 변수 s선언
		s = new String("인스턴스"); // 인스턴스화
		System.out.println(s);
	}
}

우선 String이라는 자료형은 문자열을 담는 자료형이라고 알고 있을 것이다. 덧붙이자면 String은 조금은 특별한, 참조형의 데이터타입이라고 한다. 기본 자료형(int, double 등)은 첫 글자가 소문자이지만 String은 대문자로 시작한다. 그 이유는 클래스이기 떄문이다. (대문자로 시작한다고 모든 것이 클래스인 것은 아니다) 그리고 String을 정의하는 방법은 두 가지가 있다. String s = " ";, String s = new String(" ");이다.

예제로 돌아와서 이제 내용을 알아보자. 먼저 String에 s변수(객체)를 선언하였다. s는 문자열이라는 데이터를 구현하기 위한 대상이고 이것이 객체(Object)를 의미한다. 그리고 s에 "인스턴스"라는 데이터를 new연산자(인스턴스 생성 역할)와 String(" ")을 이용하여 전달(정확히는 인스턴스라는 데이터를 저장하는 heap 메모리의 주소값)하였고 이러한 과정을 인스턴스화라고 한다. 이때 구체적인 실체를 갖게 된 s를 인스턴스라고 한다.

6. 메모리 구조

  1. Static area (스태틱 메모리 영역)

하나의 JAVA 파일은 크게 필드(field), 생성자(constructor), 메소드(method)로 구성된다. 그 중 필드 부분에서 선언된 변수(전역 변수)와 정적 멤버변수(static이 붙은 자료형) Static 영역에 데이터를 저장한다. Static 영역의 데이터는 프로그램의 시작부터 종료가 될 때까지 메모리에 남아있게 된다. 다르게 말하면 전역변수가 프로그램이 종료될 때까지 어디서든 사용가능하기 떄문에 메모리 부족 우려가 있다.

  1. Stack area (스택 메모리 영역)

우리가 현재까지 작성하던 메소드 내에서 정의하는 기본 자료형에 해당되는 지역변수의 데이터의 값이 저장되는 공간이 Stack(스택)영역이다. 해당 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.

  1. Heap area (힙 메모리 영역)

인스턴스를 생성하는 방법은 "클래스 변수 = new 클래스();"라는 것을 기억해야 한다.
참조형의 데이터 타입을 갖는 객체(인스턴스), 배열 등은 Heap 영역에 데이터가 저장된다. 이떄 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저장된 Heap 영역의 참조값을 new 연산자를 통해 리턴받는다. 다시 말하면 실제 데이터를 갖고 있는 Heap 영역의 참조 값을 Stack 영역의 객체가 갖고 있다. 이렇게 리턴 받은 참조 값을 갖고 있는 객체를 통해서만 해당 인스턴스를 핸들 할 수 있다.

7. new 연산자

클래스 객체 변수 = new 클래스();

new는 클래스 타입의 인스턴스(객체)를 생성해주는 역할을 담당한다. 여기에 조금 더 설명을 붙이면 new 연산자를 통해 메모리(Heap 영역)에 데이터를 저장할 공간을 할당받고 그 공간의 참조값을 객체에게 반환하여 주고 이어서 생성자를 호출하게 된다. 인스턴스를 핸들하기 위해서는 new 연산자를 통해 참조값을 저장한 객체로만 접근이 가능하다.

profile
블로그 이전했습니다 -> https://young-code.tistory.com

0개의 댓글