Programming 65

HTTP 요청과 응답

HttpServletRequest 메서드 참고 Ctrl + Shift + O: 자동 import HttpServletRequest클라이언트가 서버에 요청을 보낼 때, 요청에 관한 정보를 담고 있다주요 역할:요청 데이터 가져오기클라이언트가 보낸 데이터(쿼리 파라미터, 폼 데이터 등)를 읽을 수 있다.request.getParameter("name") → URL이나 폼에서 전달된 name 값을 가져옴.요청 메타데이터 확인어떤 HTTP 메서드인지(GET, POST, 등) 확인 가능 → request.getMethod()요청 URL, 헤더 정보, 세션 정보 등도 조회 가능 → request.getHeader("User-Agent")String name = request.getParameter("name"); /..

Programming/Spring 2024.11.21

원격 프로그램 실행

@Controller: 원격 호출 가능한 프로그램으로 등록@RequestMapping: URL과 메서드를 연결 왜 static이 아닌데 호출이 가능할까?public void main은 인스턴스 메서드인데 인스턴스 메서드는 객체생성 후 호출이 가능하다. 톰캣이 객체로 생성 해준다. Reflection API의 중요성https://velog.io/@alsgus92/Java-Reflection%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B8%EC%A0%9C%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B4-%EC%A2%8B%EC%9D%84%EA%B9%8C  스프..

Programming/Spring 2024.11.20

13-3 쓰레드의 구현과 실행

1. Thread클래스를 상속class MyThread extends Thread { public void run() { // Thread클래스의 run()을 오버라이딩 /* 작업내용 */ }} 2. Runnable인터페이스를 구현 - 더 유연함class MyThread2 implements Runnable { public void run() { // Runnable인터페이스의 추상메서드 run()을 구현 /* 작업내용 */ }} 쓰레드의 실행- 쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작한다.*start()는 실행가능한 상태가 되는것이지 반드시 실행하는것은 아니다. 언제 실행될지는 OS의 스케줄러가 결정한다. (start 했다고 즉시 실행되..

13-1 프로세스와 쓰레드

프로세스: 실행 중인 프로그램, 자원(resources - 메모리, CPU)과 쓰레드로 구성쓰레드: 프로세스 내에서 실제 작업을 수행. 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다.프로세스: 쓰레드  = 공장 : 일꾼싱글 쓰레드 프로세스 = 자원 + 쓰레드멀티 쓰레드 프로세스 = 자원  + 쓰레드 + 쓰레드 + 쓰레드.... + 쓰레드 프로세스와 쓰레드(process & thread)하나의 새로운 프로세스를 생성하는 것보다 하나의 새로운 쓰레드를 생성하는 것이 더 적은 비용이 든다.  프로세스는 독립적인 실행 단위로, 각자의 메모리 공간을 가진다. 프로세스 간 통신은 복잡하며, 생성 및 관리 비용이 크다.쓰레드는 프로세스 내의 경량 실행 단위로, 메모리 공간을 공유하며, 생성과 관리 비용이 적다...

12-23 애너테이션이란?

- 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공한다.  애너테이션의 사용 예Junit이라는 단위테스트 프로그램을 위한 애너테이션 @Test 표준 애너테이션- 자바에서 제공하는 애너테이션*노란색 부분은 메타에너테이션 - 애너테이션을 만들때 사용하는 애너테이션 @Override- 오버라이딩을 올바르게 했는지 컴파일러가 체크하게 한다.- 오버라이딩할 때 메서드 이름을 잘못 적는 실수를 하는 경우가 많다.  @Deprecated- 앞으로 사용하지 않을 것을 권장하는 필드나 메서드에 붙인다. - @Deprecated의 사용 예, Date 클래의 getDate() @FunctionalInterface- 함수형 인터페이스에 붙이면, 컴파일러가 올바르게 작성했는지 체크  함수형 인터페이스에는 ..

12-17 열거형

- 관련된 상수들을 같이 묶어 놓은 것. Java는 타입에 안전한 열거형을 제공 열거형의 정의와 사용- 열거형을 정의하는 방법 enum 열거형이름 { 상수명1, 상수명2, ... }  - 열거형 타입의 변수를 선언하고 사용하는 방법enum Direction { EAST, SOUTH, WEST, NORTH }    class Unit {            int x, y;             // 유닛의 위치            Direction dir     // 열거형 인스턴스             void init() {                  dir = Direction.EAST;  // 유닛의 방향을 EAST로 초기화              }        } - 열거형 상수의 비교에 ..

12-12 와일드 카드 / 제네릭 메서드

와일드 카드-하나의 참조 변수로 대입된 타입이 다른 객체를 참조 가능 와일드 카드의 상한 제한. T와 그 자손들만 가능 와일드 카드의 하한 제한. T와 그 조상들만 가능 제한 없음. 모든 타입이 가능와 동일 -메서드의 매개변수에 와일드 카드를 사용 +++와일드카드는 읽기 전용이다와일드카드를 사용하면, 해당 변수가 다양한 타입을 참조할 수 있지만, 새로운 객체를 추가하는 것은 허용되지 않는다.이게 중요한 차이점인데, 와일드카드는 타입을 유연하게 참조할 수 있게 해주는 반면, 그 안에 무언가를 추가하거나 변경하는 작업에 대해서는 불확실성을 발생시킬 수 있기 때문에 금지된다.(* 타입 안정성을 보장하기 위해서 쓰기를 제한함.    자바 컴파일러는 FruitBox2에 어떤 구체적인 타입이 들어갈지 확실하게 알지..

12-9 제한된 제네릭 클래스 / 제네릭스의 제약

제한된 제네릭 클래스- extends로 대입할 수 있는 타입을 제한- 인터페이스인 경우에도 extends를 사용class FruitBox extends Box { //Eatable은 interface} 제네릭스의 제약- 타입 변수에 대입은 인스턴스 별로 다르게 가능- static 멤버에 타입변수 사용 불가* static은 모든 인스턴스에 공통이기때문- 배열 생성할 때 타입 변수 사용 불가. 타입 변수로 배열 선언은 가능* 쉽게말해 new연산자 다음에 T를 쓸 수 없음. // 제네릭 배열 생성 불가