반응형

JAVA 374

자바 내부 클래스(inner class)

자바의 내부 클래스(Inner Class)는 다른 클래스 내에 선언된 클래스를 의미합니다. 내부 클래스는 외부 클래스의 멤버 변수 및 메서드에 쉽게 접근할 수 있으며, 코드를 논리적으로 구조화하고 캡슐화하는 데 도움을 줍니다. 다양한 종류의 내부 클래스가 있습니다. 1. 멤버 내부 클래스 (Member Inner Class) 멤버 내부 클래스는 다른 멤버 변수와 마찬가지로 외부 클래스의 멤버로 선언되는 클래스입니다. 멤버 내부 클래스는 다른 클래스에서도 사용할 수 있습니다. class OuterClass { private int outerVar; class InnerClass { void innerMethod() { outerVar = 10; // 외부 클래스의 멤버 변수에 접근 가능 } } } 2. 정..

JAVA/포스팅 2023.11.13

자바 인터페이스의 이해

인터페이스(Interface)는 자바에서 다양한 클래스들이 특정 메서드들을 구현하도록 강제하는 역할을 하는 추상형(abstract type)입니다. 1. 인터페이스의 정의 인터페이스는 interface 키워드를 사용하여 정의됩니다. 인터페이스 내에는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드가 포함될 수 있습니다. interface MyInterface { // 추상 메서드 void myMethod(); // 상수 (public static final이 생략됨) int MY_CONSTANT = 42; // 디폴트 메서드 (Java 8 이후) default void defaultMethod() { // 구현 } // 정적 메서드 (Java 8 이후) static void staticMethod() ..

JAVA/포스팅 2023.11.13

자바 인터페이스의 장점

자바 인터페이스는 객체지향 프로그래밍에서 중요한 개념 중 하나로, 다양한 장점을 제공합니다. 아래는 자바 인터페이스의 주요 장점들에 대한 설명입니다. 1. 다중 상속 지원 클래스는 다중 상속을 지원하지 않지만, 인터페이스는 다중 상속을 지원합니다. 클래스가 이미 어떤 클래스를 상속받았더라도 여러 인터페이스를 구현할 수 있습니다. 이를 통해 클래스에 여러 기능을 추가하거나 다양한 기능을 조합할 수 있습니다. 2. 코드의 유연성과 확장성 인터페이스는 추상 메서드의 집합을 정의하므로, 구현 클래스에서 이 메서드들을 구현해야 합니다. 이는 코드의 유연성과 확장성을 높여줍니다. 새로운 클래스가 같은 인터페이스를 구현한다면, 해당 클래스를 사용하는 코드는 변경하지 않고도 새로운 기능을 활용할 수 있습니다. 3. 계..

JAVA/포스팅 2023.11.13

자바 인터페이스를 이용한 다형성

자바에서 인터페이스를 이용한 다형성은 객체지향 프로그래밍의 핵심 개념 중 하나입니다. 다형성은 한 가지 형태의 동작이 여러 다른 형태로 구현될 수 있는 능력을 의미합니다. 인터페이스를 통해 다형성을 구현하면 코드의 유연성과 확장성을 높일 수 있습니다. 다형성은 주로 다음과 같은 상황에서 사용됩니다. 1. 객체의 교체 가능성 코드에서는 특정 인터페이스를 구현한 여러 클래스의 객체를 사용할 수 있습니다. 이로써 동일한 인터페이스를 구현하는 다양한 객체를 교체하면서 사용할 수 있습니다. 2. 코드의 간결성 다형성을 활용하면 하나의 코드 블록이 여러 타입의 객체에 대해 동작할 수 있습니다. 이는 코드의 간결성을 높이고, 중복을 줄여줍니다. 다형성을 이해하기 위해 간단한 예제를 살펴보겠습니다. 아래는 동물을 나타..

JAVA/포스팅 2023.11.13

자바 인터페이스를 이용한 다중상속

자바에서는 클래스는 하나의 클래스만을 상속할 수 있지만, 여러 개의 인터페이스를 구현할 수 있습니다. 이를 통해 자바에서는 다중 상속을 구현할 수 있습니다. 다중 상속은 여러 개의 클래스로부터 상속받는 것을 의미합니다. 예를 들어, 다음과 같이 여러 인터페이스를 구현하는 클래스를 만들 수 있습니다. interface Interface1 { void method1(); } interface Interface2 { void method2(); } class MyClass implements Interface1, Interface2 { public void method1() { System.out.println("Implementation of method1"); } public void method2() {..

JAVA/포스팅 2023.11.13

자바 인터페이스의 구현

자바에서는 인터페이스를 구현하기 위해 implements 키워드를 사용합니다. 인터페이스를 구현하는 클래스는 인터페이스에서 선언된 모든 메서드를 구현해야 합니다. 인터페이스를 구현하는 구문은 다음과 같습니다. interface MyInterface { void method1(); void method2(); } class MyClass implements MyInterface { // MyInterface에서 선언된 메서드들을 구현 public void method1() { // 구현 내용 작성 } public void method2() { // 구현 내용 작성 } } 위의 예제에서 MyClass 클래스는 MyInterface 인터페이스를 구현하고 있습니다. MyInterface에서 선언된 method1..

JAVA/포스팅 2023.11.13

자바 인터페이스의 상속

자바에서는 인터페이스도 다른 인터페이스로부터 상속을 받을 수 있습니다. 이를 "인터페이스의 확장" 또는 "인터페이스의 상속"이라고 합니다. 인터페이스 간의 상속은 extends 키워드를 사용합니다. 예를 들어, 다음과 같이 두 개의 인터페이스 A와 B가 있을 때, B가 A를 상속한다고 가정해보겠습니다. // 인터페이스 A interface A { void methodA(); } // 인터페이스 B가 A를 상속 interface B extends A { void methodB(); } 이제 B 인터페이스는 A 인터페이스를 상속하고 있습니다. 이 경우, B 인터페이스를 구현하는 클래스는 A 인터페이스의 메서드인 methodA()와 B 인터페이스의 메서드인 methodB()를 모두 구현해야 합니다. // B ..

JAVA/포스팅 2023.11.13

자바 인터페이스의 작성

자바에서 인터페이스를 작성하는 방법은 다음과 같습니다. 인터페이스는 일종의 계약(Contract)으로, 특정 메서드의 구현을 강제하고, 클래스가 해당 인터페이스를 구현하면 해당 메서드를 반드시 제공해야 합니다. 1. 인터페이스 선언 interface 키워드를 사용하여 인터페이스를 선언합니다. 메서드는 기본적으로 추상 메서드로 선언됩니다. interface MyInterface { // 추상 메서드 void myMethod(); // 디폴트 메서드 default void defaultMethod() { System.out.println("Default implementation"); } // 정적 메서드 static void staticMethod() { System.out.println("Static m..

JAVA/포스팅 2023.11.13

자바 인터페이스

자바에서 인터페이스(interface)는 추상 메서드와 상수(static final 변수)의 집합을 정의하는데 사용됩니다. 인터페이스는 일종의 추상 클래스로 생각할 수 있으며, 클래스와 달리 다중 상속이 가능합니다. 인터페이스를 구현하는 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다. 인터페이스를 선언할 때에는 interface 키워드를 사용합니다. 메서드는 추상 메서드로 선언되며, 따로 몸체를 가질 수 없습니다. Java 8부터는 디폴트 메서드(default method)와 정적 메서드(static method)를 인터페이스에 추가할 수 있게 되었습니다. 다음은 간단한 인터페이스의 예시입니다. // 인터페이스 선언 interface Printable { // 추상 메서드 void print..

JAVA/포스팅 2023.11.13

자바 추상클래스의 작성

1. 추상클래스의 정의 추상클래스를 정의하려면 abstract 키워드를 사용해야 합니다. abstract class MyAbstractClass { // 추상 메서드, 일반 메서드, 멤버 변수 등이 올 수 있음 } 2. 추상 메서드의 정의 추상클래스는 하나 이상의 추상 메서드를 가질 수 있습니다. 추상 메서드는 본체가 없는 메서드로, 하위 클래스에서 반드시 구현되어야 합니다. abstract class MyAbstractClass { abstract void abstractMethod(); } 3. 일반 메서드와 멤버 변수 추상클래스는 추상 메서드 외에도 일반 메서드와 멤버 변수를 가질 수 있습니다. 이들은 하위 클래스에서 공통적으로 사용되는 로직이나 속성을 포함할 수 있습니다. abstract clas..

JAVA/포스팅 2023.11.12

자바 추상클래스

자바에서 추상 클래스는 하나 이상의 추상 메서드를 포함할 수 있는 클래스입니다. 추상 메서드는 선언만 되어 있고 구현은 없는 메서드입니다. 추상 클래스는 일반 메서드뿐만 아니라 추상 메서드도 포함할 수 있습니다. 추상 클래스는 객체를 직접 생성할 수 없으며, 상속을 통해 하위 클래스에서 추상 메서드를 구현하도록 유도하는 역할을 합니다. 추상 클래스를 선언하기 위해서는 abstract 키워드를 사용합니다. 추상 메서드 역시 abstract 키워드를 사용하여 선언합니다. 하위 클래스에서는 추상 메서드를 반드시 구현해야 합니다. 다음은 간단한 추상 클래스와 그것을 상속받은 하위 클래스의 예시입니다. // 추상 클래스 abstract class Shape { // 일반 메서드 void display() { Sy..

JAVA/포스팅 2023.11.12

자바 매개변수의 다형성

자바에서 매개변수의 다형성은 메소드나 생성자에 다양한 자료형을 전달할 수 있는 특징을 의미합니다. 다형성은 객체 지향 프로그래밍의 핵심 원리 중 하나로, 하위 클래스의 인스턴스가 상위 클래스 타입으로 다뤄질 수 있는 특징을 갖습니다. 이는 코드의 유연성과 확장성을 높여줍니다. 다형성을 이해하기 위해 먼저 다음과 같은 예제를 살펴보겠습니다. class Animal { void sound() { System.out.println("Some sound"); } } class Dog extends Animal { void sound() { System.out.println("Bark"); } } class Cat extends Animal { void sound() { System.out.println("Meo..

JAVA/포스팅 2023.11.12

자바 참조변수와 인스턴스의 연결

자바에서 참조 변수(reference variable)와 인스턴스(instance) 사이의 연결은 객체 지향 프로그래밍의 기본 원리 중 하나입니다. 1. 참조 변수 (Reference Variable) 자바에서 객체를 사용하려면 해당 객체에 대한 참조 변수가 필요합니다. 참조 변수는 객체의 메모리 주소를 저장하고 해당 주소를 통해 객체에 접근합니다. 예를 들어, class Car { String model; int year; } public class Main { public static void main(String[] args) { // Car 클래스의 객체 생성 Car myCar = new Car(); // myCar 변수가 해당 객체를 참조 myCar.model = "Toyota"; myCar.y..

JAVA/포스팅 2023.11.12

자바 업캐스팅(Upcasting)

자바에서 업캐스팅(Upcasting)은 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 것을 말합니다. 업캐스팅은 자동으로 이루어지며, 컴파일러가 자동으로 처리합니다. 이는 객체 지향 프로그래밍의 다형성을 구현하는 중요한 개념 중 하나입니다. 아래는 업캐스팅의 예제입니다. class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void bark() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { // 업캐스팅: Dog 클래스의 객체를 Anim..

JAVA/포스팅 2023.11.12

자바 다운캐스팅(Downcasting)

다운캐스팅(Downcasting)은 상위 클래스 타입으로 형변환된 객체를 다시 하위 클래스 타입으로 형변환하는 것을 말합니다. 다운캐스팅은 업캐스팅과는 다르게 명시적으로 형변환을 해주어야 합니다. 다운캐스팅은 주로 업캐스팅된 객체를 다시 원래의 하위 클래스로 변환하여 하위 클래스의 특정 메서드나 속성에 접근하기 위해 사용됩니다. 그러나 주의해야 할 점은 업캐스팅된 객체가 정말로 해당 하위 클래스의 객체인지를 확인한 후에 다운캐스팅을 수행해야 합니다. 이를 위해 instanceof 연산자를 사용할 수 있습니다. 다음은 다운캐스팅의 예제입니다. class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog exte..

JAVA/포스팅 2023.11.12

자바 참조변수의 형변환

자바에서 참조 변수의 형변환은 크게 두 가지로 나뉩니다. 업캐스팅(upcasting)과 다운캐스팅(downcasting). 1. 업캐스팅(Upcasting) 업캐스팅은 하위 클래스의 객체를 상위 클래스 타입으로 변환하는 것을 말합니다. 이는 자동으로 이루어집니다. 업캐스팅은 안전하게 이루어지며, 컴파일러가 자동으로 처리합니다. 업캐스팅을 통해 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있습니다. class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void bark() { System.out.println("Dog barks"); } } public ..

JAVA/포스팅 2023.11.12

자바 strictfp 제어자

strictfp는 자바에서 부동소수점 연산의 특정 규칙을 강제로 적용하는 제어자입니다. 이는 특정한 부동소수점 연산 결과를 얻기 위해 플랫폼에 독립적인 방식으로 부동소수점 연산을 수행하도록 보장합니다. 기본적으로 자바는 IEEE 754 부동소수점 표준을 따르기 때문에, 대부분의 경우 부동소수점 연산에서는 동일한 결과를 얻을 수 있습니다. 그러나 특정 플랫폼에서 IEEE 754 표준을 따르지 않는 경우, 부동소수점 연산에서 약간의 차이가 발생할 수 있습니다. strictfp 사용 예제 public strictfp class StrictfpExample { // strictfp 메서드 선언 public strictfp double performCalculation(double x, double y) { re..

JAVA/포스팅 2023.11.12

자바 native 제어자

native 제어자는 자바 프로그램에서 네이티브 코드(원시 코드)로 작성된 메서드를 가리킬 때 사용됩니다. 네이티브 코드란 특정 플랫폼의 기계어 코드를 의미하며, 이 코드는 자바 가상 머신(JVM)에서 직접 실행됩니다. native 메서드는 주로 성능 향상이 필요한 부분에서 사용되며, 특정 하드웨어와 네이티브 라이브러리와 상호 작용할 때 유용합니다. native 사용 예제 public class NativeExample { // Native 메서드 선언 public native void nativeMethod(); // 정적 블록에서 라이브러리 로딩 static { System.loadLibrary("NativeLibrary"); } public static void main(String[] args) ..

JAVA/포스팅 2023.11.12

자바 transient 제어자

transient는 자바의 직렬화(serialize) 과정에서 특정 멤버 변수를 직렬화에서 제외하도록 하는 제어자입니다. 직렬화는 객체를 데이터 스트림으로 변환하는 프로세스로, 이 과정에서 객체의 상태를 저장하고 나중에 다시 복원할 수 있습니다. transient 제어자는 특정 필드가 직렬화에서 제외되어야 함을 나타냅니다. transient 사용 예제 import java.io.*; class MyClass implements Serializable { private String normalField; private transient String transientField; public MyClass(String normalField, String transientField) { this.normalFi..

JAVA/포스팅 2023.11.12

자바 volatile 제어자

volatile은 자바에서 변수의 가시성과 순서에 관련된 특성을 제어하기 위한 제어자입니다. 이것을 사용하면 여러 스레드 간에 변수의 변경 사항이 즉시 반영되며, 컴파일러나 CPU의 최적화에 의해 발생할 수 있는 순서 문제를 방지할 수 있습니다. volatile의 주요 특징 가시성 (Visibility): volatile 변수를 읽거나 쓰는 모든 스레드는 항상 메모리에서 최신 값을 읽게 됩니다. 순서 (Ordering) volatile 변수를 통해 변수에 대한 모든 쓰기와 읽기는 순서가 지켜집니다. 다시 말해, 이전의 모든 쓰기 연산이 완료된 후에 다음 쓰기 연산이 수행되고, 이전의 모든 읽기 연산이 완료된 후에 다음 읽기 연산이 수행됩니다. volatile 사용 예제 public class Volati..

JAVA/포스팅 2023.11.12

자바 synchronized 제어자

synchronized 키워드는 자바에서 스레드 간의 동기화를 제어하기 위해 사용되는 제어자입니다. 이를 이용하여 특정 메서드 또는 블록을 임계 영역으로 지정하여 여러 스레드 간에 공유되는 자원에 대한 동시 접근을 제어할 수 있습니다. 1. 메서드에 synchronized 적용 예제 public class SynchronizedExample { private int count = 0; // synchronized 메서드 public synchronized void increment() { count++; } public int getCount() { return count; } public static void main(String[] args) { SynchronizedExample example = ..

JAVA/포스팅 2023.11.12

자바 abstract 제어자

abstract 제어자는 자바에서 추상 클래스와 추상 메서드를 선언할 때 사용됩니다. 추상 클래스는 객체를 직접 생성할 수 없으며, 추상 메서드는 선언만 되고 구현은 하위 클래스에서 이루어집니다. 1. 추상 클래스 (Abstract Class) 예제 // AbstractShape.java public abstract class AbstractShape { // 추상 메서드 선언 public abstract void draw(); // 일반 메서드도 포함할 수 있습니다. public void displayInfo() { System.out.println("This is a shape."); } } // Circle.java public class Circle extends AbstractShape { //..

JAVA/포스팅 2023.11.12

자바 static 제어자

static 제어자는 자바에서 변수, 메서드, 블록, 중첩 클래스 등에 적용할 수 있는 제어자입니다. static으로 선언된 멤버는 클래스에 속하게 되어 객체의 생성과 상관없이 사용할 수 있습니다. 클래스 변수, 클래스 메서드 등을 선언할 때 주로 사용되며, 객체 간에 공유되는 자원을 표현하는 데 유용합니다. 1. static 제어자의 사용 예제 1.1. 변수에 static 제어자 사용 (클래스 변수) // Example.java public class Example { // 클래스 변수 (static 변수) private static int staticVar = 0; public Example() { // 생성자에서 클래스 변수(static 변수) 사용 가능 staticVar++; } public st..

JAVA/포스팅 2023.11.12

자바 final 제어자

final 제어자는 자바에서 변수, 메서드, 클래스 등에 적용할 수 있는 제어자로, 한 번 초기화된 후에는 값을 변경할 수 없음을 나타냅니다. final 제어자는 상수, 메서드 오버라이딩 방지, 클래스 상속 방지 등 다양한 상황에서 사용됩니다. 1. final 제어자의 사용 예제 1.1. 변수에 final 제어자 사용 (상수로 사용) // Example.java public class Example { // 상수는 대문자로 작성하는 것이 관례 private static final int MAX_VALUE = 100; public void printMaxValue() { System.out.println("Max Value: " + MAX_VALUE); } } 위의 예제에서 MAX_VALUE는 한 번 초기..

JAVA/포스팅 2023.11.12

자바 private 제어자

private 제어자는 자바에서 가장 강력한 접근 제어자 중 하나로, 해당 멤버(변수, 메서드 등)를 선언한 클래스 내부에서만 접근 가능하도록 합니다. 다른 클래스나 외부에서는 접근할 수 없습니다. 1. private 제어자 사용 예제 1.1. 변수에 private 제어자 사용 // Example.java public class Example { private int privateVar; public Example(int initialValue) { this.privateVar = initialValue; } public void printPrivateVar() { System.out.println("Private Variable: " + privateVar); } } private 제어자를 가진 변수는..

JAVA/포스팅 2023.11.11

자바 default 제어자

default 제어자는 자바에서 접근 제어를 설정하는 데 사용되며, 해당 멤버(변수, 메서드 등)를 동일 패키지 내에서만 접근 가능하도록 합니다. default 제어자는 별도의 제어자를 명시하지 않으면 기본적으로 적용되는 제어자입니다. 1. default 제어자 사용 예제 1.1. 변수에 default 제어자 사용 // Example.java class Example { int defaultVar; Example(int initialValue) { this.defaultVar = initialValue; } } default 제어자를 가진 변수는 해당 클래스 내부와 동일 패키지 내의 클래스에서만 접근할 수 있습니다. 1.2. 메서드에 default 제어자 사용 // Example.java class Ex..

JAVA/포스팅 2023.11.11

자바 protected 제어자

protected 제어자는 자바에서 접근 제어를 설정하는 데 사용되며, 해당 멤버(변수, 메서드 등)를 동일 패키지 내의 클래스와 해당 클래스를 상속받은 하위 클래스에서만 접근 가능하도록 합니다. 1. protected 제어자 사용 예제 1.1. 변수에 protected 제어자 사용 // Example.java public class Example { protected int protectedVar; public Example(int initialValue) { this.protectedVar = initialValue; } } protected 제어자를 가진 변수는 해당 클래스 내부와 동일 패키지 내의 클래스, 그리고 이 클래스를 상속받은 하위 클래스에서 접근할 수 있습니다. 1.2. 메서드에 prot..

JAVA/포스팅 2023.11.11

자바 public 제어자

public 제어자는 자바에서 접근 제어를 설정하는 데 사용되며, 해당 멤버(클래스, 변수, 메서드 등)를 어떤 클래스에서든 접근 가능하도록 합니다. 1. public 제어자 사용 예제 1.1. 클래스에 public 제어자 사용 // Example.java public class Example { public int publicVar; public void publicMethod() { System.out.println("This is a public method."); } } 위의 예제에서 Example 클래스는 public으로 선언되어 있습니다. 따라서 다른 패키지에 속한 클래스에서도 접근할 수 있습니다. 1.2. 변수에 public 제어자 사용 // Example.java public class E..

JAVA/포스팅 2023.11.11

자바 제어자(modifier)

자바에서 제어자(modifier)는 클래스, 변수, 메서드 등의 선언부에 사용되어 해당 선언의 특성을 조정하는 키워드입니다. 제어자를 사용하여 선언된 대상의 속성이나 행동을 변경하거나 제한할 수 있습니다. 주로 접근 제어, 상속, 다형성 등을 조절하기 위해 사용됩니다. 주요 제어자의 종류 1. 접근 제어자(Access Modifiers) - public : 어떤 클래스에서든 접근 가능. - protected : 동일 패키지 또는 하위 클래스에서 접근 가능. - default (package-private) : 동일 패키지에서만 접근 가능. - private : 동일 클래스에서만 접근 가능. public class Example { public int publicVar; protected int prote..

JAVA/포스팅 2023.11.11

자바 static import문

자바에서 static import 문은 클래스의 정적(static) 멤버를 사용할 때 패키지 및 클래스 이름을 생략하고 직접 사용할 수 있게 해주는 기능입니다. 이를 통해 코드의 가독성을 높이고 정적 멤버를 직관적으로 사용할 수 있습니다. 1. 기본 형식 import static 패키지이름.클래스이름.정적멤버; 예시 import static java.lang.Math.PI; import static java.lang.Math.sqrt; public class Circle { public static void main(String[] args) { double radius = 5.0; // 정적 멤버를 패키지 및 클래스 이름을 생략하여 직접 사용 double area = PI * sqrt(radius); ..

JAVA/포스팅 2023.11.11