JAVA(247)
-
[Java][Effective Java] item 10. equals는 일반 규약을 지켜 재정의하라 (대칭성, 추이성)
1. equals를 재정의하지 않아도 되는 상황 각 인스턴스가 본질적으로 고유한 경우 인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없는 경우 상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는 경우 클래스가 private이거나 package-private이고 equals 메서드를 호출할 일이 없는 경우 equals를 호출하는 것을 막고 싶다면 다음과 같이 재정의할 수 있습니다. @Override public boolean equals(Object o){ throw new AssertionError();// 호출금지 } 2. equals를 재정의해야 하는 상황 equals를 재정의해야 할때는 객체 식별성(object identity; 두 객체가 물리적으로 같은..
2022.06.07 -
[Java][Effective Java] item 9. try-finally 보다 try-with-resources를 사용하라
1. try-finally 방식의 용도 자바 라이브러리에는 InputStream, OutputStream, java.sql.Connection 등과 같은 입출력 클래스는 close 메서드를 호출해 직접 닫아줘야 하는 자원이 많습니다. 전통적으로 자원이 제대로 닫힘을 보장하는 수단으로 try-finally 방식을 사용하여 인스턴스가 실행 도중 예외가 발생하거나 메서드에서 반환되는 경우를 포함하여 자원을 안정적으로 회수할 수 있도록 합니다. 다음 예제는 try-finally 방식을 사용하여 일반적으로 자원을 회수하는 방식입니다. // try-finally 구문을 활용한 일반적인 자원 회수 static String firstLineOfFile(String path) throws IOException { // ..
2022.06.03 -
[Java] 메서드를 종료하는 방법 : finalizer
1. Finalizer의 사용 finalize() 메서드는 finalizer에 의해 호출됩니다. Finalizer는 JVM이 특정 인스턴스를 회수해야 한다고 판달될 때 호출합니다. 이러한 finalizer는 인스턴스를 되살리는 것을 포함하여 임의의 동작을 수행할 수 있습니다. finalizer의 주목적은 인스턴스가 사용하는 자원을 메모리에서 제거하기 전에 해제하는 것입니다. finalizer는 자원 해제 작업을 위한 주요한 메커니즘을 작동하거나 다른 메서드들이 실패할 경우 안전망으로써 작동할 수 있습니다. finalizer 작업이 어떻게 수행되는지 이해하기 위해서 다음 클래스 정의를 볼 수 있습니다. public class Finalizable { private BufferedReader reader; ..
2022.06.03 -
[Java][Effective Java] item 7. 다 쓴 객체 참조를 해제하라
C, C++언어 같은 경우 인스턴스를 전부 사용한다음 수동으로 해제를 해주어야 합니다. 하지만 Java 언어 같은 경우는 가비지 컬렉터가 있기 때문에 해제를 명시하지 않아도 인스턴스가 영역 밖으로 나가게 되면 가비지 컬렉터는 자동으로 회수해갑니다. 하지만 이러한 가비지 컬렉터도 객체를 회수하지 못하고 메모리 누수가 발생할 수 있습니다. 1. 메모리 누수 사례 : Stack public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 10; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACIT..
2022.05.24 -
[Java] 7. 객체지향 프로그래밍 2 #8 내부 클래스(Inner Class)
1. 내부 클래스란 무엇인가? 내부 클래스란 클래스 안에 선언된 클래스 내부 클래스를 정의하는 이유는 무엇인가? 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있기 때문입니다. 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤버(필드멤버, 메서드)들을 쉽게 접근할 수 있음 외부에 내부 클래스 자체를 감추어 코드의 복잡성을 줄일 수 있음 (캡슐화) // before class A{ ... } class B{ ... } // after class A{ // 외부 클래스 class B{ // 내부 클래스 } } 2. 내부 클래스의 종류와 특징 내부 클래스 종류와 특징 인스턴스 클래..
2022.05.23 -
[Java][Servlet] Servlet & JSP의 MVC 패턴
1. Servlet & JSP Servlet과 JSP는 클라이언트가 URL 또는 링크 등을 통해서 서버에 서비스 요청을 하면 서버쪽에서 요청에 따른 서비스를 처리하고 결과에 맞는 웹 페이지를 동적으로 응답하는데 사용됩니다. 보통 Servlet 쪽에서 자바 언어를 이용한 복잡한 연산을 수행하고 JSP에는 클라이언트가 볼 화면을 구성합니다. Servlet 또는 JSP에서 한쪽으로도 클라이언트에게 응답을 할 수 있지만 Servlet에서는 웹 페이지의 html 코드를 구성하는데 번거로움이 존재하고 JSP에서는 자바 언어 로직을 구현하는데 가독성이나 유지보수 측면에서 낮아지기 때문에 보통 Servlet과 JSP로 분리하여 구현합니다. Servlet과 JSP를 분리하여 구현하기 위해서 디자인 패턴 중 MVC(Mod..
2022.05.23