JAVA(247)
-
[Tomcat] Tomcat, JSP, Servlet 개념 및 구조
1. Servlet과 JSP JSP(Java Server Page) 확장자가 .jsp 파일 html 문서안에 자바 언어를 삽입해 사용할 수 있도록함 Servlet을 사용해 웹을 만들 경우 화면 인터페이스 구현이 어렵다는 단점을 보완하기 위해 만든 스크립트 언어 Servlet 확장자가 java 파일 자바의 일반적인 클래스와 동일한 개념 웹을 다룰 수 있도록 해주는 “HttpServlet” 클래스를 상속받은 클래스를 의미함 웹 어플리케이션의 수행과정 사용자가 URL(또는 IP)을 통해 WEB 서버를 호출하고 요청사항을 객체(request)에 담아서 전송함 WEB 서버는 요청 객체(request)을 받아서 바로 처리하거나 어플리케이션 서버(WAS)로 객체를 전달함 WAS 서버는 요청에 대한 내용과 요청 객체(..
2022.05.23 -
[Java][Effective Java] item 6. 불필요한 객체 생성을 피하라
1. 불변 객체의 재사용 똑같은 기능의 객체를 매번 생성하기 보다는 객체 하나를 재사용하는 편이 날을때가 많습니다. 특히 불변 객체는 언제든지 재사용할 수 있습니다. String s1 = "hello"; // 권장하는 방법, 하나의 String 인스턴스를 사용함 String s2 = "hello"; String s3 = new String("hello") // 따라하지 말것, 쓸데없는 인스턴스를 생성함 위 코드를 그림으로 표현하면 다음과 같습니다. 위 그림을 보면 s1과 s2는 String Pool에 있는 hello 문자열 리터럴을 가리키고 s3 같은 경우는 인스턴스를 새로 생성했기 때문에 String pool 영역이 아닌 Heap 영역에 생성됩니다. 따라서 s3과 같이 인스턴스를 생성하지 말고 Stri..
2022.05.18 -
[Java][Effective Java] item 5, 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
많은 클래스가 하나 이상의 자원에 의존합니다. 예를 들어 맞춤법 검사기는 사전(dictionary)에 의존하는데, 이러한 의존성을 가지는 클래스를 다음과 같이 적절하지 못하게 정의한 사례가 있습니다. 1. 의존성을 가지고 있는 클래스를 적절치 못하게 정의한 사례 : 정적 유틸리티 클래스로 정의 public class SpellChecker { private static final Lexicon dictionary = new Lexicon(); // 객체 생성 방지 private SpellChecker() { throw new AssertionError(); } public static boolean isValid(String word) { return false; } public static List s..
2022.05.17 -
[Java][Effective Java] item 4, 인스턴스화를 막으려거든 private 생성자를 사용하라
인스턴스를 만들수 없는 클래스 사례 java.lang.Math java.util.Arrays java.util.Collections 인스턴스화를 막기 위한 방법 : private 생성자 추가 private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있습니다. // 객체를 만들 수 없는 유틸리티 클래스 public class UtilityClass { // 기본 생성자가 만들어지는 것을 막는다(인스턴스 방지용) private UtilityClass() { throw new AssertionError(); } // 나머지는 생략 } 인스턴스화를 막기 위한 부적절한 방법 : 추상 클래스로 정의 인스턴스화를 막기 위해서 추상 클래스로 정의하면 클래스 자체는 막을 수는 있지만 하위 클래스를 만들어 인스턴스화..
2022.05.17 -
[Java] 직렬화(Serialization)
1. 직렬화(Serialization)란 무엇인가? 직렬화란 자바의 객체의 상태에서 바이트 스트림으로 변환하는 기술을 말합니다. 비직렬화는 반대로 바이트 스트림에서 다시 자바의 객체로 변환하는 기술입니다. 우리는 이러한 바이트 스트림을 데이터베이스에 저장하거나 네트워크를 통해서 전송할 수 있습니다. 2. 직렬화(Serialization)와 비직렬화(Deserialization) 예를 들어 한 플랫폼에서 객체를 직렬화하고 다른 플랫폼에서 역직렬화할 수 있습니다. 직렬화하고자 하는 클래스는 직렬화 가능한 인터페이스를 구현해야합니다. 다음은 Person 클래스를 직렬화하고 역직렬화하여 필드값을 참조하는 예제입니다. import java.io.Serializable; public class Person impl..
2022.05.17 -
[Java] Java Reflection API
1. Reflection API란 무엇인가? Reflection API는 구체적인 클래스 타입을 알지 못해도 그 클래스의 정보(메서드, 타입, 변수 등등)에 접근할 수 있게 해주는 자바 API입니다. 2. Reflection API 사례 public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; }..
2022.05.16