📌 throw와 throws의 차이는 무엇인가? [ throw ] 예외를 명시적으로 발생시키는 데 사용한다. 예외가 발생하면 해당 예외 객체가 생성되고, 프로그램의 실행 흐름이 해당 예외를 처리할 수 있는 부분으로 전달된다. 일반적으로 메서드나 블록 내에서 예외 조건이 발생할 때 사용한다. throw new Exception("에러 발생~"); [ throws ] 메서드 선언부에 사용되며, 해당 메서드가 어떤 종류의 예외를 던질 수 있는지를 나타낸다. 메서드가 어떤 예외를 던질지 미리 선언함으로써, 메서드를 호출하는 클라이언트는 해당 예외에 대한 처리를 해야 한다. public void something() throws IOException { ... } throw는 예외를 발생시키는 데 사용하고, th..
java
📌 쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까? 세션은 서버 측에서 관리되며, 사용자의 브라우저에 저장되는 쿠키와 달리 사용자의 정보를 서버에 저장한다. 이는 쿠키가 비활성화되거나 사용자가 쿠키를 거부하는 경우에도 사용자의 세션을 유지할 수 있게 한다. 세션 ID는 일반적으로 쿠키를 통해 사용자의 브라우저에 전송되지만, 쿠키를 사용할 수 없는 경우에는 URL 매개변수나 폼 데이터, 세션 스토리지, 로컬 스토리지 등을 이용하여 보관할 수 있다. 📌 스프링 MVC와 struts의 차이는 무엇인가? Spring MVC와 Struts 모두 Java 기반의 웹 애플리케이션 개발을 지원하는 프레임워크이지만 몇 가지 차이점이 있다. [ 아키텍처와 설계 ] Spring MVC Spring 프레임워크의 일..
📌 JSP와 Servlet의 차이점은 무엇인가? JavaServer pages(JSP)와 Servlet은 모두 Java를 기반으로 하는 웹 애플리케이션 개발을 위한 기술이지만 몇 가지 차이점이 있다. [ 문법 및 구조 ] JSP HTML 안에 Java 코드를 삽입하는 방식으로 동적 웹 페이지를 생성한다. Servlet Java 코드 안에 HTML 코드를 삽입하는 방식으로 동적 웹 페이지를 생성한다. [ 유지보수 및 디자인 ] JSP 코드가 섞이기 쉽기 때문에 디자인과 비즈니스 로직을 분리하기 어렵다. Servlet 코드의 구조화와 분리가 더 쉽다. [ 방식 ] JSP 내부적으로 서블릿으로 변환되어 실행된다. Servlet 자바 클래스로 직접 작성되어 실행된다. 일반적으로 JSP는 프론트엔드와 백엔드의 통..
📌 복사가 사용되는 이유는 무엇인가? 원본 객체를 복사하지 않고 대입하여 사용하게 되면 원본 객체의 안전성을 보장하기 어렵기 때문이다. 📌 객체 복사는 어떻게 할 수 있나? [ Cloneable 인터페이스와 clone 메서드 사용 ] 이는 얕은 복사를 수행한다. class MyClass implements Cloneable { private int value; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } // 사용 예제 MyClass originalObject = new MyClass(); MyClass clonedObject = (MyClass) originalObject.c..
📌 reflection이란 무엇인가? reflection은 프로그램이 자기 자신의 구조를 검사하고 수정할 수 있는 능력을 나타낸다. Java에서는 java.lang.reflect 패키지를 통해 reflection을 지원한다. [ reflection으로 할 수 있는 작업 ] 클래스 정보 얻기 클래스의 이름, 메서드, 필드, 생성자 등에 대한 정보를 얻을 수 있다. 인스턴스 생성 및 메서드 호출 클래스의 인스턴스를 생성하고, 해당 인스턴스의 메서드를 호출할 수 있다. 필드에 접근 클래스의 필드에 접근하여 값을 읽거나 변경할 수 있다. [ reflection 사용처 ] 런타임에 클래스를 동적으로 로드해야 할 때 플러그인 아키텍처 구현 private 메서드 단위 테스트 reflection은 강력한 기능이지만 런..
📌 notify()와 notifyAll()의 차이는 무엇인가? notify()와 notifyAll()은 모두 스레드 간 통신을 위해 사용되는 메서드로 객체의 모니터 락을 소유한 스레드가 다른 스레드에게 신호를 보내는 데에 활용되지만 몇 가지 차이점이 있다. [ 대상 스레드 ] notify() 현재 객체의 모니터 락을 소유한 스레드 중에서 하나를 선택하여 깨운다. 선택된 스레드만이 대기 상태에서 깨어나고 나머지 대기 중인 스레드는 여전히 대기 한다. notifyAll() 현재 객체의 모니터 락을 소유한 스레드가 대기 중인 모든 스레드를 깨운다. 여러 개의 스레드가 대기 중이면 모든 스레드가 깨어나고 경쟁 상태에 진입하게 된다. [ 성능과 경쟁 상태 ] notify() 선택된 하나의 스레드만이 깨어나므로 경..
📌 병렬과 동시성의 차이점은 무엇인가? [ 병렬 ] 여러 작업이 실제로 동시에 실행되는 것이다. 컴퓨터 시스템에서는 여러 개의 프로세서나 코어를 사용하여, 여러 작업을 동시에 처리함으로써 성능을 향상하는 것이 일반적이다. 주로 하나의 큰 작업을 여러 부분으로 나누고, 각 부분을 병렬로 처리하여 전체 작업을 가속화하는 데 사용된다. [ 동시성 ] 동시성은 논리적으로 여러 작업이 동시에 진행되는 것처럼 보이도록 하는 것을 의미한다. 시스템이 여러 작업을 번갈아가면서 처리하거나, 각 작업이 병렬로 실행되지 않더라도 동시에 진행되는 것처럼 보이게 하는 기술이다. 병렬은 물리적인 동시성을 강조하며, 동시성은 논리적인 동시성을 강조한다. 병렬은 한번에 많은 `일`을 처리, 동시성은 한 번에 많은 `것`을 처리한다...
📌 HashSet의 구현 원칙은 무엇인가? HashSet은 자바의 Set 인터페이스를 구현한 자료 구조로, 중복을 허용하지 않는 요소들의 집합을 저장하는 데 사용한다. [ 해시 함수 사용 ] HashSet은 해시 함수를 사용하여 요소를 저장한다. 해시 함수는 요소의 해시 코드를 계산하는 역할을 한다. HashSet은 각 요소의 해시 코드를 기반으로 내부 배열에서 요소를 저장하고 검색한다. [ 동등성 비교 ] HashSet은 동일한 해시 코드를 가진 요소를 처리하기 위해 동등성 비교(equality comparison)를 수행한다. 동등성 비교는 equals() 메서드를 사용하여 요소 간의 동등성을 확인한다. 동등한 요소는 HashSet 내에서 중복을 허용하지 않기 때문에 저장되지 않는다. [ 해시 충돌 ..