본문 바로가기

Java

(31)
Class 클래스와 Constructor 클래스 Class 클래스 Class는 자바의 내장 클래스로, 클래스의 메타데이터를 나타내는 데 사용됩니다. Class 클래스는 클래스의 구조, 필드, 메서드, 생성자 등의 정보를 동적으로 검사하고 조작할 수 있는 기능을 제공합니다. Class에서의 Class는 클래스 객체를 참조하는 변수의 타입을 나타내는 것입니다. Class 객체는 해당 클래스의 정보를 담고 있으며, 클래스의 인스턴스를 생성하거나 메서드를 호출하는 등의 작업을 수행할 수 있습니다. 이를 통해 리플렉션(Reflection)을 사용하여 런타임에 클래스의 동작을 조사하고 조작할 수 있습니다. MyObject obj = new MyObject(); Class clazz = obj.getClass(); System.out.println("The cla..
Abstract 자바에서의 추상화는 객체 지향 프로그래밍에서 중요한 개념입니다. 추상화는 복잡한 시스템을 단순화하고 모델링하는 과정을 의미합니다. 이를 통해 개발자는 구체적인 구현 세부 사항을 감추고 핵심 개념에 집중할 수 있습니다. 자바에서 추상화를 실현하기 위해 '추상 클래스'와 '인터페이스'를 사용할 수 있습니다. 이 둘은 구체적인 구현을 갖지 않는 추상적인 개념이며, 이를 상속받거나 구현함으로써 추상화를 활용할 수 있습니다. 아래는 추상 클래스와 인터페이스를 사용한 간단한 예시 코드입니다: // 추상 클래스 abstract class Animal { String name; public Animal(String name) { this.name = name; } public abstract void sound(); ..
String Class 1. A Brief Summary of the String Class 자바의 String은 변경할 수 없는(immutable) 유니코드 문자의 시퀀스를 포함합니다. 이는 C/C++와 달리 자바의 String은 단순한 char 배열이 아닌 java.lang.String 클래스의 객체입니다. 그러나 자바의 String은 특별합니다. 일반적인 클래스와는 다른 점이 있습니다: String은 "hello, world"와 같은 이중 따옴표로 둘러싸인 문자열 리터럴과 관련이 있습니다. String 변수에 문자열 리터럴을 직접 할당할 수 있으며, String 인스턴스를 생성하기 위해 생성자를 호출할 필요가 없습니다. '+' 연산자는 두 개의 String 피연산자를 연결하는 데 사용됩니다. '+' 연산자는 Point나 ..
Call by Value / Call by Reference 자바에서 메소드를 호출할 때 파라미터를 전달하는 방법에는 크게 두 가지가 있습니다. 이는 값에 의한 전달(Call by Value)과 참조에 의한 전달(Call by Reference)입니다. 각각의 전달 방식에 대해 설명하고, 샘플 코드를 통해 자세히 알아보겠습니다. 1. 값에 의한 전달 (Call by Value): 값에 의한 전달은 메소드에 파라미터로 전달되는 값의 복사본을 전달하는 방식입니다. 메소드 내에서 전달된 값을 변경하더라도 원본 변수에는 영향을 주지 않습니다. 아래는 값에 의한 전달의 예시 코드입니다: public class Main { public static void main(String[] args) { int x = 10; System.out.println("Before metho..
try-catch-finally try-catch-finally try-catch-finally는 자바에서 예외 처리를 위한 구문입니다. 이 구문은 예외가 발생할 수 있는 코드 블록을 지정하고, 예외가 발생했을 때 예외를 처리하는 코드를 작성하며, 예외 발생 여부와 관계없이 항상 실행되어야 하는 코드를 정의하는 데 사용됩니다. try-catch-finally 구문 형식은 다음과 같습니다 try { // 예외가 발생할 수 있는 코드 } catch (예외 타입1 변수1) { // 예외 처리 코드 } catch (예외 타입2 변수2) { // 예외 처리 코드 } finally { // 항상 실행되어야 하는 코드 } try 블록: 예외가 발생할 수 있는 코드를 포함합니다. 이 블록 안에서 예외가 발생하면 해당 예외를 처리할 catch 블록으로..
Anonymous Class 자바에서 익명 클래스(anonymous class)는 이름이 없는 내부 클래스로서, 주로 인터페이스나 추상 클래스의 인스턴스를 구현하거나 상속을 받는 데 사용됩니다. 익명 클래스는 클래스 정의와 동시에 인스턴스를 생성하므로 일회성으로 사용되는 간단한 구현이 필요한 경우 유용하게 활용됩니다. ※추상 클래스는 인스턴스화할 수 없는데... 익명 클래스는 다음과 같은 형태로 작성됩니다: 인터페이스명 변수명 = new 인터페이스명() { // 인터페이스의 메서드 구현 // 추가적인 필드나 메서드 정의 가능 }; 또는 부모클래스명 변수명 = new 부모클래스명() { // 부모 클래스의 메서드 오버라이딩 // 추가적인 필드나 메서드 정의 가능 }; 여기서 인터페이스명은 구현하고자 하는 인터페이스의 이름이며, 부모클..
Nested Classes(중첩 클래스) 자바 프로그래밍 언어에서는 한 클래스 내에 다른 클래스를 정의할 수 있습니다. 이러한 클래스를 Nested Class라고 하며, 여기서 그 예를 보여줍니다. class OuterClass { ... class NestedClass { ... } } 용어: 중첩 클래스는 두 가지 범주로 분류됩니다: non-static 과 static. Non-static 중첩 클래스는 inner 클래스라고 합니다. static으로 선언된 중첩 클래스들은 static nested 클래스라고 합니다. class OuterClass { ... class InnerClass { ... } static class StaticNestedClass { ... } } 중첩 클래스는 중첩 클래스를 포함하고 있는 클래스의 멤버입니다. 비정..
Method Class Method Class 자바의 Method 클래스는 java.lang.reflect 패키지에 속해 있으며, 개별 클래스의 메소드를 나타냅니다. 이 클래스를 사용하면 리플렉션(reflection)을 통해 클래스의 메타데이터를 조사하고, 런타임에 동적으로 메소드를 호출할 수 있습니다. [https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html ] Method 객체는 다음과 같은 주요 기능을 제공합니다: 1. 메소드 정보 조회: 메소드 이름, 리턴 타입, 파라미터 타입, 접근 제한자 (public, private 등)와 같은 정보를 얻을 수 있습니다. 2. 메소드 실행: invoke 메소드를 사용해 특정 객체에 대한 메소드 호출을 동적으로..
Java Collection Framework Java Collections Framework 자바의 컬렉션 프레임워크는 데이터를 저장, 관리, 조작하기 위한 다양한 자료 구조와 알고리즘을 제공합니다. 이를 사용하면 데이터를 효율적으로 조작할 수 있으며, 반복문과 같은 일반적인 작업을 단순화할 수 있습니다. Java Collection Framework의 View 자바 컬렉션 프레임워크에서 view는 컬렉션을 특정한 방식으로 보여주는 개념을 의미합니다. View는 기존 컬렉션을 읽기 전용 또는 필터링된 형태로 제공하여 컬렉션을 제한하거나 변형할 수 있는 방법을 제공합니다. 기본 컬렉션과는 별개의 객체로써, 원본 컬렉션에 대한 변경이 해당 view에 반영됩니다. 컬렉션 프레임워크에서 제공하는 몇 가지 주요한 view 개념은 다음과 같습니다: 1. su..
Lambda Expressions Lambda Expressions 익명 클래스의 한 가지 문제점은, 인터페이스에 하나의 메서드만 포함되어 있는 등 구현이 매우 간단한 경우에는 익명 클래스의 구문이 다소 복잡하고 이해하기 어려울 수 있다는 것입니다. 이러한 경우에는 주로 다른 메서드에 특정 기능을 아규먼트로 전달하려고 할 때(예: 버튼을 클릭했을 때 어떤 동작을 수행해야 하는지) 사용됩니다. 람다 표현식을 사용하면 기능을 메서드 아규먼트로 취급하거나 코드를 데이터로 취급할 수 있습니다. 이전 섹션에서는 이름을 지정하지 않고 베이스 클래스를 구현하는 방법을 보여줍니다. 이는 일반적으로 이름이 있는 클래스보다 더 간결하지만, 하나의 메서드만 있는 클래스의 경우에는 익명 클래스조차도 다소 과도하고 번거로울 수 있습니다. 람다 표현식을 사용하면..