본문 바로가기

분류 전체보기

(68)
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 익명 클래스의 한 가지 문제점은, 인터페이스에 하나의 메서드만 포함되어 있는 등 구현이 매우 간단한 경우에는 익명 클래스의 구문이 다소 복잡하고 이해하기 어려울 수 있다는 것입니다. 이러한 경우에는 주로 다른 메서드에 특정 기능을 아규먼트로 전달하려고 할 때(예: 버튼을 클릭했을 때 어떤 동작을 수행해야 하는지) 사용됩니다. 람다 표현식을 사용하면 기능을 메서드 아규먼트로 취급하거나 코드를 데이터로 취급할 수 있습니다. 이전 섹션에서는 이름을 지정하지 않고 베이스 클래스를 구현하는 방법을 보여줍니다. 이는 일반적으로 이름이 있는 클래스보다 더 간결하지만, 하나의 메서드만 있는 클래스의 경우에는 익명 클래스조차도 다소 과도하고 번거로울 수 있습니다. 람다 표현식을 사용하면..
Java Advanced Programming Quiz 퀴즈 1: 제너릭 인터페이스 구현 문제: Transformer라는 제너릭 인터페이스를 정의하고, 이를 구현하는 StringToLengthTransformer 클래스를 작성하세요. Transformer 인터페이스는 하나의 메소드 T transform(F from)을 가집니다. StringToLengthTransformer 클래스는 문자열을 받아 그 길이를 반환해야 합니다. public interface Transformer { T transform(F from); } public class StringToLengthTransformer implements Transformer { @Override public Integer transform(String from) { return from.length();..
Scope Scope 프로그래밍 언어에서 scope(범위)는 변수와 함수의 유효 범위를 의미합니다. 즉, 어떤 부분에서 변수나 함수를 사용할 수 있는지를 결정합니다. 일반적으로 프로그램은 여러 개의 블록(block)으로 구성됩니다. 블록은 중괄호({})로 둘러싸인 코드의 영역을 말하며, 주로 조건문(if문, switch문 등)이나 반복문(for문, while문 등), 함수 등에서 사용됩니다. scope는 변수와 함수의 선언 위치와 관련이 있습니다. 주요한 scope 유형은 다음과 같습니다: 전역 범위(Global scope): 전역 범위에 선언된 변수와 함수는 프로그램의 어느 곳에서든지 접근할 수 있습니다. 전역 변수는 프로그램 전체에서 공유되며, 전역 함수는 어디서든 호출할 수 있습니다(자바는 전역변수를 지원하지..
Package Package 자바에서 `package` 키워드는 클래스를 패키지에 속하도록 정의하는 데 사용됩니다. 패키지는 클래스들을 논리적으로 그룹화하고, 클래스들 간의 이름 충돌을 방지하고, 코드의 구조화를 도와주는 역할을 합니다. 여러 가지 이유로 `package` 키워드를 사용하는 이유는 다음과 같습니다: 이름 충돌 방지: 패키지는 동일한 이름을 가진 클래스들을 구분할 수 있도록 해줍니다. 서로 다른 패키지에 속한 클래스들은 같은 이름을 가질 수 있습니다. 이를 통해 다른 패키지에서 동일한 이름의 클래스를 사용할 때 이름 충돌을 방지할 수 있습니다. 코드 구조화: 패키지는 클래스들을 그룹화하여 코드를 구조화하는 데 도움을 줍니다. 관련된 클래스들을 하나의 패키지에 포함시킴으로써 코드의 가독성과 유지 보수성을 ..