web.xml 파일의 구조(1) Welcome file web.xml 을 열어보면 위와 같은 기본 구조를 갖는다 에는 현재 프로젝트의 이름이 작성되어 있다 그리고 안에는 Welcome File이 여러 개 나열되어있다 Welcome File : 웹 어플리케이션이 실행되기위한 디렉토리의 기본 웹 페이지 클라이언트가 디렉토리까지만 지정해서 요청한다면 웹 서버는 해당 디렉토리에서 웰컴 파일을 찾아서 응답한다. 웹 클라이어트가 프로젝트 디렉토리까지만 지정해서 요청하면 404에러가 발생한다. 웹 페이지를 찾을 수 없다고 말한다 만약 프로젝트 안에 index.html 이 있다면 요청을 원하는 파일을 지정하지 않아도 자동으로 index.html이 실행된다 위와 같이 index.html 을 생성하고, 다시한번 프로젝트 ..
제어의 역전 (Inversion of Control) 개발자가 객체를 생성하고, 메서드를 호출하던 JVM에서와는 다르게 WAS는 직접 객체를 생성하고 메서드를 호출한다. 이를 제어의 역전이라고 한다 제어의 역전(Inversion of Control)은 프로그램의 제어 흐름 구조가 거꾸로 되는 것이다 프로그램은 main() 에서 시작해 사용할 오브젝트를 결정하고 그 오브젝트를 만들어 메서드를 호출하는 일을 반복한다. main() 이 어떤 객체를 생성하고, 메소드를 호출하는 등 개발자가 능동적으로 결정하고 만드는 구조이다 반면, 제어의 역전은 기능만 구현해 놓으면 알아서 호출되어 사용되는 수동적인 구조를 갖는다 객체의 생성부터 소멸까지 객체의 모든 생명주기를 개발자가 아닌 컨테이너(WAS)가 담당한다 컨테이..
✏️ 프로세스(Process) 프로세스 : 어플리케이션을 실행하면 OS로부터 메모리의 일정 영역을 할당받아 동작한다 멀티 프로세스 : OS는 동시에 여러 프로세스를 실행할 수 있다 프로세스는 동작하기위해 데이터, 메모리 등의 자원과 하나 이상의 스레드(Thread)로 구성된다 멀티 프로세스가 동작하고, 동일한 어플리케이션을 실행하더라도 프로세스 간의 자원 및 스레드 공유는 발생하지 않는다 ✏️ 스레드(Thread) 프로세스 동작의 최소 단위를 말한다. 프로세스는 하나 이상의 스레드로 구성된다 둘 이상의 스레드로 구성된 프로세스를 멀티 스레드 프로세스라고 말한다 예를 들면 카카오톡은 채팅을 하는 동시에 파일을 전송할 수 있다 단일 스레드 프로세스였다면, 파일을 전송하는 동안 채팅을 할 수 없다 이처럼 스레..
✏️ Collection API 여러 객체를 담아내는 인터페이스들의 특징을 말한다 Collection API : 자료를 저장하는 방식 (HashSet, ArrayList, HashMap) Collection 인터페이스는 가장 원시적인 방법으로 객체를 저장하는 특징을 가진다 Collection API에서는 toString()이 데이터를 리턴하도록 자체적으로 오버라이딩 되어있다 ✏️ Collection Interface Collection 인터페이스는 가장 원시적이므로, 순서가 없고 중복을 허용한다 Set 인터페이스는 Collection 다음으로 원시적이고, 순서가 없고 중복을 허용하지 않는다 List 인터페이스는 내부에서 index로 관리되므로, 순서를 가지고 중복을 허용한다 Map 인터페이스는 key-v..
✏️ static 키워드 - 객체 생성 없이 접근할 수 있는 멤버임을 의미하며, 변수나 메서드에 키워드로 사용된다 - static 키워드를 통해 생성한 멤버는 클래스가 메모리에 올라갈 때 자동으로 생성된다 = 객체 생성 없이 접근 가능하다 - 변하지 않고 유지되는 값은 매번 메모리에 로딩하는 과정을 거치는 것보다, 자동으로 올라가도록 하는 것이 더 효율적! - 즉, 인스턴스 없이 사용이 가능하므로 프로그램 내에서 공통으로 사용되는 데이터들을 관리할 때 사용된다 - static은 공통으로 값을 일정하게 유지하고 싶은 경우에만 사용하고 남발해서는 안된다 (예) 상수, 싱글톤 패턴... // 객체 생성할 필요가 없다 System.out.println(Math.abs(-10)); // 10 - java.lang..
✏️ 싱글톤 패턴 - 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다 - 최초 생성 이후에 호출된 생성자는 최초에 생성자가 생성한 객체를 리턴한다. - 고정된 메모리 영역을 얻으면서 동시에 단 한 번만 new를 사용하여 메모리 낭비를 방지할 수 있다. ✏️ 구현하기 private static BankService instance; 객체의 인스턴스를 저장할 필드를 생성한다. 싱글톤 패턴의 인스턴스는 단 하나만이 허용되므로, 모든 객체에서 공유하도록 static 필드로 생성한다. 접근 지정자는 private로 지정하여, 외부 접근을 막는다 private BankService() { customers = new Customer[MAX_CUSTOMERS]; numberOfCustomers = 0; } 객..
👉 String 배열 1. String 배열의 선언/생성/초기화 String[] str = new String[3];//3개의 문자열을 담을 수 있는 배열 생성 ✔ String 배열의 선언과 생성도 다른 자료형의 선언, 생성 방법과 다르지 않다. ✔ String 배열은 별도의 초기화를 하지 않으면 null로 자동 초기화된다. String[] name = new String[2]; name[0] = "짱구"; name[1] = "치타"; String[] address = new String[2] {"서울", "제주"}; String[] className = {"해바라기반", "장미반"}; ✔ 초기화도 일반 변수와 마찬가지이다. ✔ 첨자를 사용해 하나하나의 요소에 저장된 값을 초기화할 수 있다. ✔ 선언/생..
📌 배열 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 배열이라고 한다. 여러 데이터를 저장하고 다루어야 한다면 배열로 좀 더 간편하게 사용할 수 있다. 👉 배열 (array) 1. 배열의 선언과 생성 int[] score;//타입[] 배열명; int score[];//타입 배열명[]; ✔ 대괄호를 배열명의 앞에 사용해도 되고, 뒤에 사용해도 된다. ✔ 대괄호가 배열명의 일부라기보다, 타입의 일부라고 볼 수 있기 때문에 전자를 추천한다. int[] scoreA = new int[5]; int[] scoreB; scoreB = new int[5]; ✔ 배열의 선언은 단지 생성된 배열을 다루기 위해 참조 변수를 위한 공간을 만드는 것 ✔ 이렇게 배열을 선언해 저장 공간을 만들었다면, 배열을 생성할 수..
📌 조건문 조건식과 문장을 포함하는 {블록}으로 구성되어 있으며, 조건식의 연산 결과에 따라 실행문이 달라져 프로그램의 실행 흐름을 변경할 수 있다. 조건식의 결과는 반드시 참이나 거짓 이어야 한다. 조건문 마지막에는 세미콜론을 붙이지 않으니 주의하자. 👉 if 문 1. if 문 if (조건식) { // 조건식이 참일 때 실행될 문장 } ✔ 조건식이 참이라면, if문 내부의 명령문이 실행. ✔ 조건식이 거짓이라면, if문 내부의 명령문이 실행되지 않고 다음 명령문으로 이동한다. 2. if-else문 if (조건식) { // 조건식이 참일 때 실행될 문장 }else { // 조건식이 거짓인 경우 실행될 문장 } ✔ 조건식이 참이라면, if문 내부의 명령문이 실행. ✔ 조건식이 거짓이라면, if문 내부의 명..