분류 전체보기
-
<Spring 입문> 3.3 스프링 웹 개발 기초_APISpring 입문 2025. 4. 17. 12:32
경로: src > main > java > ... > controller > HelloController@Controllerpublic class HelloController { // 문자가 반환 될 경우 @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name) { return "hello" + name; } // 객체가 반환 될 경우 @GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name) { ..
-
<Spring 입문> 3.2 스프링 웹 개발 기초_MVCSpring 입문 2025. 4. 16. 20:40
Spring MVCModel-View-Controller 패턴을 기반으로 한 웹 프레임워크 아래 코드는 다음과 같은 구조로 작동한다 요청 → 컨트롤러(Controller) → 모델에 데이터 담기(Model) → 뷰(template)로 전달 → 응답 경로: src > main > java > ... > controller > HelloController@Controllerpublic class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("key") String value, Model model) { model.addAttribute("key", value); return ..
-
<Spring 입문> 3.1 스프링 웹 개발 기초_정적 콘텐츠Spring 입문 2025. 4. 16. 14:51
정적 콘텐츠 (Static Content)src/main/resources/static/ 폴더 안에 있는 파일들예: hello.html, style.css, logo.png 등브라우저가 /hello.html 요청 → 가공하지 않은 파일 그대로 응답 정적 콘텐츠 확인해 보기src > main > resources > static > hello.html 파일을 만들고 다음 코드를 입력했다.정적 컨텐츠 입니다. URL에 localhost:8080/hello.html 를 입력하고 페이스 소스보기를 클릭해 보면 hello.html 파일 그대로가 View에 전달되었음을 확인 할 수 있다. 정적 콘텐츠랑 Welcome Page는 같은 것일까?결론 부터 말하면 아니다.Welcome Page는 정적 콘텐츠 wndd..
-
<Spring 입문> 1. View 환경 설정Spring 입문 2025. 4. 15. 11:43
스프링 프로젝트를 만들면 기본적으로 HelloSpringApplication 파일이 다음과 같이 구성되어 있을 것이다.아래 코드는 Spring Boot 애플리케이션을 시작하는 가장 기본적인 형태의 코드이다. import 는 다른 클래스나 기능을 불러오는 문장이다. 자바에서 Scanner 라는 기능을 사용하기 위해 import java.util.Scanner; 임폴트를 추가하는 것처럼 다음 문장도 같다.import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication 과 SpringApplication.run() 메소드를..
-
<Java> Thread 상속과 Runnable 구현의 차이점 및 동기화 메소드 선언JAVA 2025. 3. 4. 20:28
🔹 Thread와 Runnable의 차이1️⃣ Thread를 상속하는 경우 ✅ 특징Thread 클래스를 직접 상속받음.run() 메서드를 오버라이드하여 실행할 코드 작성.start() 메서드를 호출하면 run()이 실행됨.❌ 단점자바는 다중 상속을 지원하지 않아서 이미 다른 클래스를 상속받고 있다면 Thread를 상속할 수 없음.객체를 생성할 때마다 새로운 Thread 인스턴스를 만들어야 하므로 재사용이 어렵고 성능이 떨어질 수 있음. 2️⃣ Runnable을 구현하는 경우 ✅ 특징Runnable 인터페이스를 구현하고 run() 메서드를 오버라이드.Thread 객체를 생성할 때 Runnable 구현체를 인자로 넘겨줘야 함.❇️ 장점다른 클래스를 상속받을 수 있음(유연성 높음).쓰레드 객체를 재사..
-
<Java> 로컬 클래스와 지역 변수의 생명 주기JAVA 2025. 2. 25. 23:10
1. 클래스 선언부에서 실행 코드는 허용되지 않음클래스 선언부에서 변수 값 재할당할 수 없는 이유에 대해서는 선언부에 실행 코드를 작성할 수 없기 때문이라고 설명하였다. 2. 클래스 선언부에서 실행 코드는 허용되지 않음 참고로 JDK 8부터는 final이 생략된다. 로컬 클래스의 객체는 메소드 실행이 종료되면 없어지는 것이 일반적이지만, 메소드가 종료되어도 계속 실행 상태로 존재할 수 있다. 예로 들어 로컬 스레드 객체를 사용하는 것이다. 메소드를 실행하는 스레드와 다르므로 메소드가 종료된 후에도 로컬 스레드 객체는 실행 상태로 존재할 수 있다. 하지만, 로컬 클래스에서 지역변수 var를 참조하고 있다면 var가 사라진 후에도 접근해야 하는 문제가 생긴다. JAVA 이를 해결하지 위해 로컬 클래..
-
<Java> 클래스 선언부에서 변수 값 재할당할 수 없는 이유JAVA 2025. 2. 25. 14:09
클래스 단순한 설계도일 뿐 실제 실행되는 코드가 아니다. 클래스 선언부에서 실행 코드는 허용되지 않음클래스는 단순한 설계도이므로, 클래스 선언부에서 변수를 변경하는 실행 코드를 작성할 수 없다.변수 선언 시 int num = 10;처럼 초기화는 가능하지만, num = 20; 같은 재할당은 허용되지 않는다.자바의 클래스 내부에는 "실행 코드"가 올 수 없고, "멤버 변수 선언"만 가능하기 때문이다. 그렇다면 "클래스에서 선언된 변수는 final 특성을 가지는게 아닌가?" 라는 생각을 해보았다. final 과 "클래스 선언부에서 값 재할당 불가"의 차이점자바에서 멤버 변수는 자동으로 final이 되지 않는다.즉, 클래스 선언부에서 값을 바로 재할당할 수 없다고 해서, 해당 변수가 final처럼 동작하는 것..
-
<Spring> 스프링 의존관계란?Spring 입문 2025. 2. 20. 19:32
스프링에서 의존관계(Dependency)란?스프링 프레임워크에서 의존관계(Dependency) 란, 하나의 객체가 다른 객체를 필요로 하는 관계를 의미한다. 예를 들어, A 클래스가 B 클래스를 사용해야 한다면, A는 B에 의존한다고 말할 수 있다. 1. 의존관계의 종류(1) 강한 결합 (Tightly Coupled)A가 B를 직접 생성하고, 직접 관리하는 경우.예제:문제점: A 클래스가 B 클래스에 강하게 의존하여, B가 변경되면 A도 수정해야 함.(2) 느슨한 결합 (Loosely Coupled)A가 B를 직접 생성하지 않고, 외부에서 주입받는 방식.스프링에서는 의존성 주입(Dependency Injection, DI) 을 사용해 구현 가능. 2. 의존성 주입(Dependency Injection, ..