정적 컨텐츠, MVC와 템플릿 엔진, API 이 3가지는 웹 개발에서 가장 중요한 기초라고 볼 수 있습니다.

개발을 하게 된다면 필수적으로 알아야 하는 내용이므로 작성하였습니다.

 

1. 정적 컨텐츠

파일을 그대로 클라이언트에게 전달하는 것

Static Content

By default, Spring Boot serves static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath. It uses the ResourceWebHandler from Spring WebFlux so that you can modify that behavior by adding your own WebFluxConfigurer and overriding the addResourceHandlers method.

정적 콘텐츠
기본적으로 스프링 부트는 클래스 경로에 있는 /static(또는 /public 또는 /resources 또는 /META-INF/resources) 디렉토리의 정적 콘텐츠를 제공합니다. 스프링 웹플럭스의 ResourceWebHandler를 사용하여 자신만의 WebFluxConfigurer를 추가하고 addResourceHandler 메서드를 재정의하여 해당 동작을 수정할 수 있습니다.

 

2. MVC와 템플릿 엔진

서버에서 변형된 파일을 클라이언트에게 전달하는 것

MVC: Model, View, Controller

 

내장 톰캣 서버는 웹브라우저의 요청을 받아 스프링 컨테이너에 매핑되어있는 컨트롤러를 통해 메서드를 호출합니다

이때 Model에는 전달할 데이터를 key, value 형태로 값을 담아 리턴값(hello-template)으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리합니다

viewResolver는 view를 찾아주고 템플릿 엔진을 연결해주는 역할을 합니다 ( ex) template/hello-template.html )

Thymeleaf 템플릿 엔진 처리를 통해 렌더링 된 파일을 클라이언트에게 반환합니다

 

스프링 부트 템플릿엔진 기본 viewName 매핑

`resources:templates/`+{ViewName}+`.html`

 

3. API

JSON 데이터 포맷 형태로 클라이언트에게 전달 하는 것

 

@ResponseBody  사용 - Http 통신 프로토콜의 Body에 문자 내용을 직접 반환

`viewResolver` 대신에 `HttpMessageConverter` 동작

기본 문자처리(StringConverter): `StringHttpMessageConverter`

기본 객체처리(JsonConverter): `MappingJackson2HttpMessageConverter`

byte 처리 등등 기타 여러 HttpMessageConverter 기본으로 등록되어 있음

 

참고: 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 `HttpMessageConverter` 선택된다.

 

'Java' 카테고리의 다른 글

Math 관련 내장함수  (0) 2024.11.13
Array 관련 내장함수  (1) 2024.11.10
String 관련 내장함수  (0) 2024.11.08
디자인 패턴(Design Pattern)  (0) 2024.11.05
Java introduction  (7) 2024.11.04

Math.pow(2, 2);  // 4

Math.sqrt(4);  // 2

Math.abs(a - b);

'Java' 카테고리의 다른 글

웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API  (1) 2024.12.22
Array 관련 내장함수  (1) 2024.11.10
String 관련 내장함수  (0) 2024.11.08
디자인 패턴(Design Pattern)  (0) 2024.11.05
Java introduction  (7) 2024.11.04

Arrays 클래스: import java.util.Arrays;

 

1. Arrays.sort(array);

2. Arrays.copyOf(array, array.length + 1);

3. Arrays.copyOfRange(array, 0, array.length);

'Java' 카테고리의 다른 글

웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API  (1) 2024.12.22
Math 관련 내장함수  (0) 2024.11.13
String 관련 내장함수  (0) 2024.11.08
디자인 패턴(Design Pattern)  (0) 2024.11.05
Java introduction  (7) 2024.11.04

지속적인 업데이트...

String 클래스: import java.lang.String;

lib 디렉토리 내부 jar 파일 안에 Java에서 사용하는 클래스들이 압축되어 있습니다.

java.lang은 java에서 자동으로 기술되기 때문에 선언하지 않아도 사용할 수 있습니다.

1. String.valueOf() 와 toString()의 차이점

두 메소드 모두 Object의 값을 String으로 변환하지만 변경하고자 하는Object가 null인 경우 다르다.
toString()과 같은 경우 Null PointerException(NPE)을 발생시키지만 
valueOf는 "null"이라는 문자열로 처리하고, 숫자의 경우 문자열로 형변환한다.

 

String.repeat(n);

String.replace(str, "");

String.replaceAll("[str]", ""); - "[str]" 정규식 표현

String.contains();

String.toCharArray();

String.charAt(n);

String.toLowerCase();

String.toUpperCase();

String.split(" ");

String.substring(0, n);

String.equals();

String.equalsIgnoreCase();

String.compareTo();

String.compareToIgnoreCase();

String.join("", arr);

String.startsWith(String prefix);

String.endsWith(String suffix);

String.indexOf(String);

-- 숫자를 문자열로 변환
class Solution {
    public String solution(int age) {
        String answer = "";
        for(char c : String.valueOf(age).toCharArray()) {
            answer += (char)('a' + (c - '0'));
        }
        return answer;
    }
}

'Java' 카테고리의 다른 글

웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API  (1) 2024.12.22
Math 관련 내장함수  (0) 2024.11.13
Array 관련 내장함수  (1) 2024.11.10
디자인 패턴(Design Pattern)  (0) 2024.11.05
Java introduction  (7) 2024.11.04

지속적인 업데이트...

 

생성 패턴(Creational Pattern)

Singleton(싱글톤 패턴):

하나의 클래스 인스턴스를 전역에서 접근 가능하게 하면서 해당 인스턴스가 한 번만 생성되도록 보장하는 패턴이다.

static 변수, 메서드를 활용하여 구현 할 수 있음

 

- 클래스 다이어그램

Singleton
- instance
- Singleton
+ getInstance

 

예를 들어 하나의 회사만 존재해야하는 경우

public class Company {
	
    private static Company instance = new Company();
    
    private Company() {}
    
    public static Company getInstance() {
    	if(instance == null) {
        	instance = new Company();
        }
        return instance;
    }
}

---------------------------------------------------------
import java.util.Calendar;

public class CompanyTest {

	public static void main(String[] args) {
            Company company1 = Company.getInstance();
            Company company2 = Company.getInstance();

            System.out.println(company1);
            System.out.println(company2);
            Calendar calendar = Calendar.getInstance();
    }
}

// 결과는 둘다 동일 -> 패키지.Company@참조값

 

 

 

구조 패턴(Structural Pattern)

 

 

행위 패턴(Begavioral Pattern)

 

 

'Java' 카테고리의 다른 글

웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API  (1) 2024.12.22
Math 관련 내장함수  (0) 2024.11.13
Array 관련 내장함수  (1) 2024.11.10
String 관련 내장함수  (0) 2024.11.08
Java introduction  (7) 2024.11.04

표기법

프로그래밍 언어 가이드라인으로 공통된 표기법이 있으며,

개발자들이 개발하는 데 있어서 코딩컨벤션이 존재하여 일관된 코딩 스타일을 가져 생산성을 높이는 것과 코드 분석에 대한 이점을 가질 수 있다. 

 

카멜표기법(Camel Case) - userInfo

스네이크표기법(Snake Case) - User_Info

케밥 표기법(Kebab Case) - User-Info

파스칼 표기법(Pascal Case) - UserInfo

헝가리안 표기법(Hungurian Notation) - userInfo

 

용어

객체: 객체 지향 프로그램의 대상, 생성된 인스턴스

클래스: 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태

멤버 변수: 클래스의 속성, 특성

함수: 호출해서 사용하는 단독 모듈

메서드: 객체의 기능을 구현하기 위해 클래스 내부의 멤버변수를 활용하여 구현되는 함수

인스턴스:

  - 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨

    (new 키워드를 사용하여 인스턴스 생성)

  -  생성된 인스턴스는 동적 메모리(heap memory)에 할당됨

  - 자바에서 Gabage Collector 가 주기적으로 사용하지 않는 메모리를 수거

참조 변수: 메모리에 생성된 인스턴스를 가리키는 변수

참조 값: 생성된 인스턴스의 메모리 주소 값

생성자: 생성자는 반환값이 없고, 클래스 이름과 동일

  - new 키워드와 함께 사용 - new Student();

기본 생성자(default constructor): 클래스에는 반드시 적어도 하나 이상의 생성자가 존재

  - 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음

  - 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌

  - 매개 변수가 없음, 구현부가 없음

생성자 오버로딩(overloading): 클래스에 생성자를 따로 구현하면 기본 생성자(default constructor)는 제공되지 않음

 

참조 자료형 변수

변수의 자료형

1. 기본 자료형

int

long

float

double

...

2. 참조자료형

String

Date

Student

...

 

접근 제어 지시자(access modifier)

클래스 외부에서 클래스의 멤버 변수, 메서드, 성성자를 사용할 수 있는지 여부를 지정하는 키워드

private: 같은 클래스 내부에서만 접근 가능 (외부 클래스, 상속 관계의 클래스에서도 접근 불가)

default(아무것도 없음): 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)

protected: 같은 패키지나 상속관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근할 수 없음

public: 클래스의 외부 어디서나 접근 할 수 있음

 

  Class 내부 동일 Package 상속받은 Class 이외의 나머지
private: - O X X X
default: ~ O O X X
protected: # O O O X
public: + O O O O

 

get() / set() 메서드(정보은닉)

private 으로 선언된 멤버 변수 (필드)에 대해 접근 시 수정할 수 있는 메서드를 public으로 제공

 

캡슐화(encapsulation)

정보은닉을 활용한 캡슐화

대부분의 멤버 변수와 메서드를 감추고 외부에 통합된 인터페이스만은 제공하여 일관된 기능을 구현 하게 함

각각의 메서드나 멤버변수를 접근함으로써 발생하는 오류를 최소화 한다.

 

static 변수

여러 인스턴스에서 공통으로 사용하는 변수가 필요한 경우

인스턴스가 생성될때 만들어지는 변수가 아닌, 처음 프로그램이 메모리에 로딩될 때 메모리를 할당

클래스 변수, 정적변수라고도 함

인스턴스 생성과 상관 없이 사용 가능하므로 클래스 이름으로 직접 참조

 

 

static 변수는 프로그램이 프로세스가되어 스레드 형태로 메모리에 로딩되는 순간,

code 영역과 data영역(상수, literal, static) 중에 data영역에 할당되고 프로그램이 다 끝나고 메모리에 언로드 되는 순간 없어진다.

 

(지역 변수)스택 메모리에 생성되고 참조되는 인스턴스가 생성될 때마다 사용하는 메모리는 heap(동적) 메모리 영역에 생성되었다가 인스턴스가 사라지는 순간 gabage collector에 의해 메모리가 수거된다.

 

데이터 영역 <-> 스택 메모리 <-> 힙 메모리

serialNum   <-> studentLee  <-> studentLee 인스턴스

                   <-> studentKim  <-> studentKim 인스턴스

 

tip. 생성자를 활용하여 static변수 값을 다르게 사용할 수 있다.

 

변수의 유효 범위와 메모리

변수의 유효 범위(scope)와 생성과 소멸(life cycle)은 각 변수의 종류마다 다름

지역 변수, 멤버 변수, 클래스 변수는 유효범위와 life cycle, 사용하는 메모리도 다름

변수 유형 선언 위치 사용 범위 메모리 생성과 소멸
지역 변수
(로컬 변수)
함수 내부에 선언 함수 내부에서만 사용 스택 함수가 호출될 때 생성되고 끝나면 소멸함
멤버 변수
(인스턴스 변수)
클래스 멤버 변수로 선언 클래스 내부에서 사용하고 private이 아니면 참조 변수로 다른 클래스에서 사용 가능 인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터가 메모리를 수거할 때 소멸됨
static 변수
(클래스 변수)
static 예약어를 사용하여 클래스 내부에 선언 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서 사용 가능 데이터 영역 프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸함

'Java' 카테고리의 다른 글

웹 개발 기초 - 정적 컨텐츠, MVC와 템플릿 엔진, API  (1) 2024.12.22
Math 관련 내장함수  (0) 2024.11.13
Array 관련 내장함수  (1) 2024.11.10
String 관련 내장함수  (0) 2024.11.08
디자인 패턴(Design Pattern)  (0) 2024.11.05

+ Recent posts