공부하면서 생긴 질문들/Java21 정적 팩터리 메서드 Static Factory Method 객체를 생성하는 패턴 중 하나로, 디자인 패턴의 하나인 팩터리 메서드 패턴의 일부. 정적 팩터리 메서드는 클래스의 인스턴스를 생성하는 정적인 메서드를 의미한다. 이러한 정적인 메서드를 사용하여 객체를 생성하고 반환하는 방법은 일반적인 생성자와 다르다. 특징 1. 이름을 가진다 생성자와 달리 정적 팩터리 메서드는 개발자가 자유롭게 이름을 지정할 수 있다. 이로 인해 객체를 생성하는 해당 코드의 의미를 전달할 수 있다. 2.반복 가능한 객체 생성 같은 인자를 가지고 여러 번 호출하면 항상 동일한 객체를 반환하는 것이 가능하다. 이는 객체를 캐싱하는 용도로 사용될 수 있다. 3.반환 타입의 다양화 반환 타입을 클래스의 하위 타입으로 자유롭게 선택할 수 있다. 이는 인터페.. 2023. 7. 29. Inner class 다른 클래스의 내부에 정의된 클래스. 내부 클래스는 외부 클래스의 멤버로 간주되며, 외부 클래스와 밀접한 관련이 있는 경우 사용된다 1. 인스턴스 내부 클래스 외부 클래스의 인스턴스와 연결되어 있으며, 외부 클래스의 인스턴스 변수 및 메서드에 접근할 수 있다. 해당 내부 클래스는 외부 클래스의 멤버 변수나 메서드와 같은 범위 내에서 선언되며 인스턴스 내부 클래스의 인스턴스를 생성하려면 외부 클래스의 인스턴스가 우선적으로 생성되어야 한다 2.정적 내부 클래스 외부 클래스와 독립적으로 존재하며 외부 클래스의 정적 멤버 변수나 정적 메서드에만 접근할 수 있다. 외부 클래스의 인스턴스 없이도 직접 생성할 수 있다 3. 지역 내부 클래스 메서드나 블럭 내부에서 선언되는 클래스로 해당 블럭 내부에서만 사용할 수 있.. 2023. 7. 18. Generic Generic - 타입에 대한 추상화를 제공하는 기능 Generic을 사용하면 클래스나 함수를 작성할 때 특정한 타입에 종속되지 않고 다양한 타입에 대해 재사용 가능한 코드를 작성할 수 있음, 이로 인해 코드의 유연성과 재사용성이 증가하며 타입 안정성이 보장될 수 있음. 장점 1.재사용성 다양한 타입에서 동작하는 재사용 가능 코드 작성. 예를 들어 Generic을 이용한 List 클래스를 작성하면, 정수, 문자열 또는 사용자 정의 객체와 같은 다양한 타입의 요소를 담을 수 있는 리스트를 생성할 수 있음 2.타입 안정성 컴파일 시점에서 타입 검사를 수행하므로 잘못된 타입 사용에 의한 오류를 컴파일 단계에서 잡아낼 수 있음. 이는 런타임 오류를 사전에 방지하고 코드의 안정성을 높여줌 3.컬렉션 프레임워크 대.. 2023. 7. 12. Enum Enum은 enumeration의 약자로, 변하지 않는 열거형 상수를 정의하는 데 사용. 열거형 상수는 프로그램에서 고정된 값의 집합으로 사용되며, 일반적으로 제한된 선택지를 나타내는 데 유용하다. 특징 1.제한된 상수 집합 - 사전에 정의된 상수의 집합. 이러한 상수는 Enum 클래스 내부에서 정적인 방식으로 정의됨. 예를 들어 .권한을 나타내는 Enum 클래스는 "USER", "ADMIN"과 같은 상수 값을 가질 수 있음 2.인스턴스화 불가능 - new 연산자를 사용하여 새로운 Enum 객체를 생성할 수 없음. Enum 상수는 클래스 정의 내부에서 미리 정의되며 이들은 프로그램 실행 중에 변경될 수 없음 3.독립성과 안정성 - Enum 클래스 내 상수는 고정된 값이므로 다른 클래스에서 해당 상수 값을.. 2023. 7. 9. Type Casting 형변환(Type Casting)은 변수나 객체의 타입을 다른 타입으로 변환하는 과정, 기본형과 참조형 모두 적용될 수 있음 기본형 형변환 작은 크기의 데이터 타입을 큰 크기의 데이터 타입으로 변환, 혹은 큰 크기의 데이터 타입을 작은 크기의 데이터 타입으로 변환하는 것 자바에서는 작은 크기의 데이터 타입이 큰 크기의 데이터 타입에 자동으로 형변환이 적용. 그러나 큰 크기의 데이터 타입을 작은 크기의 데이터 타입으로 변환할 때는 명시적인 형변환이 필요 예시 int num = 10; byte b = (byte) num; // 명시전 Type Casting 참조형 형변환 상속 관계에 있는 클래스나 인터페이스 사이에서 발생. 상속 관계에서 자식 클래스의 객체를 부모 클래스의 타입으로 변환하는 것을 업캐스팅이라 .. 2023. 7. 1. Wrapper 클래스 Wrapper 클래스는 말 그대로 기본 데이터 유형을 wrap, 즉 객체로 감싸주는 클래스다. 대표적으로 Integer, Long 등을 들 수 있는데 이들은 int, long과 같은 기본형 타입들을 객체로 다룰 수 있게 감싸준다. 처음에 보고 굳이? 라는 생각이 들었지만 Wrapper 클래스는 다음의 주요 용도가 존재한다. 보다 정확히 말하자면 요즘 공부하는 스프링에서 객체들의 PK를 모두 Wrapper 클래스로 설정하는 것에 의문이 생겼다. 단순히 기본형 타입을 감싸고 있는 객체를 만들어주는 클래스라고 생각했는데 이 기회에 Wrapper 클래스에 대해서 좀 더 알아보자. Wrapper 클래스 사용 이유 1. 기본 데이터 유형을 컬렉션 프레임워크와 같은 객체 기반의 자료구조에 저장할 수 있게 한다. 컬렉.. 2023. 6. 29. JVM 자바 가상 머신의 약자 JVM은 Java 언어를 실행하기 위한 실행 환경으로, Java 플랫폼의 핵심 요소 자바 언어의 특징인 이식성과 보안성을 제공하며 자바 프로그램을 기존 플랫폼과 독립적으로 실행 1.자바 바이트코드 자바 언어로 작성된 소스 코드는 컴파일러를 통해 자바 바이트코드로 변환, 자바 바이트코드는 플랫폼에 독립적인 중간 언어로 JVM에서 실행 2.클래스로더 JVM은 클래스로덜르 통해 필요한 클래스 파일을 동적으로 로드 클래스 파일을 검색하고 메모리에 로드 3.실행 엔진 바이트코드를 해석하고 실행. 주로 두 가지 방식으로 바이트코드를 실행 인터프리터 - 바이트코드를 한 줄식 해석하고 실행. 실행속도가 느리지만 플랫폼 독립성 제공 JIT(Just-in-Time) - 인터프리터 방식의 느린 속도를.. 2023. 6. 22. String을 변경할 수 없는 이유 - 불변 객체와 가변 객체 불변 객체 상태 변경 불가 불변 객체는 생성된 후에 내부 상태를 변경할 수 없음. 객체의 필드 값은 초기화 시에 설정되고 이후에는 변경할 수 없음. 이로 인해 객체의 일관성과 안정성이 보장. 스레드 안전성 불변 객체는 여러 스레드에서 동시에 사용될 수 있음, 상태 변경이 없으므로 스레드 간의 동기화나 동시 접근에 대한 고려가 필요하지 않음. 스레드 안전성을 보장. 해시와 비교 가능성: 불변 객체는 내부 상태가 변경되지 않으므로, 객체의 해시 코드와 동치 비교 결과가 불변. 이를 통해 불변 객체는 해시 테이블이나 집합(Set)과 같은 자료구조에서 안정적으로 사용 불변 객체는 캐싱이나 재사용을 통해 성능상의 이점을 가져올 수 있음 캐싱 데이터나 계산 겨로가를 임시 저장하여 이후에 빠르게 액세스할 수 있는 기.. 2023. 6. 21. instanceOf instanceOf 연산자는 객체가 특정 클래스나 인터페이스의 인스턴스인지를 확인하는 데 사용. 이 연산자는 객체의 유형을 동적으로 확인하는 데 유용하며 객체의 타입체크와 클래스 간의 상속 관계를 검사하는데 도움이 됨. object instanceof Class object는 확인하고자 하는 객체, Class는 확인하려는 클래스 혹은 인터페이스. instanceOf는 object가 Class의 인스턴스라면 true, 그렇지 않으면 false를 반환한다 아래의 예시를 살펴보자 public interface Animal { void sound(); } public class Dog implements Animal{ @Override public void sound() { System.out.println(".. 2023. 6. 18. 객체지향 디자인 원칙, SOLID SOLID 객체지향 프로그래밍에서 좋은 소프트웨어 디자인 원칙을 나타내는 기준. 1, 단일 책임 원칙(Single responsibility principle) 클래스나 모듈은 하나의 주요 책임만 가져야 한다는 원칙. 클래스가 변경되어야 하는 이유는 하나여야 하며, 여러 책임을 갖는 클래스는 수정이나 확장이 어려울 수 있다. 중요한 기준은 변경. 변경이 있을 때 파급효과가 적으면, 단일 책임 원칙을 잘 따른 것. 2.개방-폐쇄 원칙(Open/closed principle) 클래스,모듈,함수와 같은 소프트웨어의 개체는 확장에는 열려있지만 수정에는 폐쇄되어야 한다는 원칙. 즉 기존의 코드를 수정하지 않고도 기능을 추가하거나 변경할 수 있어야 함. 이를 위해 추상화, 다형성,인터페이스의 개념을 활용할 수 있음.. 2023. 6. 16. 이전 1 2 3 다음