제네릭을 사용하면 담을 수 있는 타입을 컴파일러에 알려주어 클래스나 인터페이스가 사용할 데이터 타입을 나중에 지정할 수 있다. 이러면 컴파일러가 알아서 형변환 코드를 추가해주어 코드의 재사용성을 높이고 엉뚱한 타입 객체를 넣으려는 시도를 차단해 안정성 높은 프로그램을 만들어준다.제네릭 지원 전의 컬렉션import java.util.ArrayList;public class NonGenericExample { public static void main(String[] args) { // 비제네릭 컬렉션 생성 ArrayList list = new ArrayList(); // 컬렉션에 요소 추가 list.add("Hello"); ..
Java
Exception 내용Duplicate key 001 (attempted merging values sample.cafekiosk.spring.domain.product.Product@6b5fdbd0 and sample.cafekiosk.spring.domain.product.Product@2100b770)java.lang.IllegalStateException: Duplicate key 001 (attempted merging values sample.cafekiosk.spring.domain.product.Product@6b5fdbd0 and sample.cafekiosk.spring.domain.product.Product@2100b770) at java.base/java.util.stream.Co..

서론 프로그래밍을 하다 보면 메모리 관리는 필수적인 작업이다. 프로그램이 실행되는 동안 새로운 객체를 생성하고 데이터를 저장하기 위해서는 메모리 공간이 지속적으로 필요하기 때문이다. 하지만 일정 시간이 지나면서 더 이상 사용되지 않는, 불필요한 메모리 공간들이 발생하게 된다. 이렇게 남아있는 사용되지 않는 메모리를 '가비지(garbage)'라고 부른다. 과거에는 프로그래머가 직접 이러한 가비지 메모리를 수동으로 해제해야 했다. 하지만 수동 메모리 관리에는 메모리 해제를 잊어버리면 메모리 누수(memory leak)가 발생하고, 이는 시스템 성능 저하와 심지어 프로그램 다운까지 초래하는 등의 문제점이 있다. 가비지 컬렉터(Garbage Collector) 수동 메모리 관리의 어려움을 해결하기 위해 등장한 ..

메서드 오버라이딩(Overriding)과 메서드 오버로딩(Overloading)은 객체 지향 프로그래밍에서 다형성을 구현하는 두 가지 중요한 개념이다. 오버라이딩과 오버로딩에 대해서 알아보자. 메서드 오버라이딩 (Method Overriding) 메서드 오버라이딩은 서브클래스(subclass)에서 부모 클래스(superclass)의 메서드를 재정의하는 것이다. 서브클래스에서 부모 클래스의 메서드를 동일하게(메서드 이름, 매개변수 유형 및 반환 유형) 다시 구현하는 것이다. 오버라이딩은 런타임 시에 메서드 호출 시 객체의 실제 유형에 따라 동적으로 결정된다. class Animal { public void sound() { System.out.println("Animal makes a sound"); } ..

인터럽트(Interrupt) 인터럽트(Interrupt)는 프로그램 실행 중 예외상황이 발생했을 때 하던 작업을 중단하고 우선 순위가 높은 다른 작업을 처리한 후 원래 작업으로 복귀하는 것을 말한다. interrupt() / interrupted() 스레드를 즉시 종료시키기 위한 stop()메소드가 있었지만 deprecated되었다. 이는 스레드를 갑자기 종료하면 사용중인 자원들이 제대로 해제되지 않고 남겨지기 때문이다. void interrupt() // 쓰레드의 interrupted상태를 false에서 true로 변경 = 인터럽트 예약 boolean isInterrupted()// 쓰레드의 interrupted상태를반환 = 인터럽트가 예약되어 있는지 확인 static boolean interrupte..