Java / / 2024. 7. 3. 17:29

Access Modifiers, Reference Types, and Abstract Classes

🗑️ The Garbage Collector: Java의 메모리 관리 🗑️

 

📌 참조 유형 (Reference Types) in Java

 

1. 강한 참조 (Strong Reference)

기본 참조 유형으로, 객체가 가비지 컬렉션의 대상이 되지 않도록 합니다.

객체가 강한 참조를 가지고 있는 한, 가비지 컬렉터는 그 객체를 수거하지 않습니다.

2. 약한 참조 (Weak Reference)

객체가 약한 참조만 가지고 있으면, 가비지 컬렉터가 그 객체를 언제든지 수거할 수 있습니다.

주로 메모리 누수를 방지하기 위해 사용되며, 캐시와 같은 상황에서 활용됩니다.

3. 소프트 참조 (Soft Reference)

약한 참조와 유사하지만, 메모리가 충분한 한 가비지 컬렉터가 수거하지 않습니다.

주로 메모리 민감한 캐시에서 사용됩니다.

4. 유령 참조 (Phantom Reference)

객체가 가비지 컬렉션의 대상이 된 후, 특정 작업을 수행하기 위해 사용됩니다.

PhantomReference 객체와 함께 ReferenceQueue를 사용해야 합니다.

 

📝 요약

 

강한 참조 (Strong Reference): 기본 참조, 가비지 컬렉션의 대상이 되지 않음.

약한 참조 (Weak Reference): 객체가 가비지 컬렉션에 의해 수거될 수 있음.

소프트 참조 (Soft Reference): 메모리가 충분할 때 가비지 컬렉션에 의해 수거되지 않음.

유령 참조 (Phantom Reference): 객체가 수거된 후 특정 작업을 수행하기 위해 사용.

 

🛠️ 추상 클래스와 abstract 키워드 🛠️

 

추상 클래스 (Abstract Class)

인스턴스화할 수 없는 클래스입니다.

다른 클래스들이 상속받아야 하며, 필요한 경우 추상 메서드를 구현해야 합니다.

일반 메서드와 필드도 가질 수 있습니다.

abstract 키워드

추상 클래스추상 메서드를 정의하는 데 사용됩니다.

유연성재사용성을 높이는 데 중요한 역할을 합니다.

 

🔍 자바의 어노테이션 (Annotations)

 

표준 어노테이션

@Override: 메서드가 상위 클래스의 메서드를 오버라이드하고 있음을 나타냅니다.

@Deprecated: 해당 요소가 더 이상 사용되지 않음을 나타냅니다.

@SuppressWarnings: 컴파일러 경고를 무시합니다.

 

🚦 Access Modifiers in Java

 

Public: 모든 클래스에서 접근 가능.

Protected: 동일 패키지 또는 하위 클래스에서 접근 가능.

Default: 동일 패키지 내에서만 접근 가능.

Private: 해당 클래스 내에서만 접근 가능.

 

🚀 클래스 메서드와 final 메서드 🚀

 

클래스 메서드 (Static Methods)

static 키워드를 사용하여 선언되며, 객체 생성 없이 클래스 이름을 통해 호출할 수 있습니다.

this 키워드를 사용할 수 없습니다.

final 메서드

하위 클래스에서 오버라이딩할 수 없는 메서드입니다.

클래스의 보안 및 신뢰성을 높이는 데 사용됩니다.

 

🧩 문제 풀이: IdentifyMyParts 클래스 🧩

public class IdentifyMyParts {
    public static int x = 7; 
    public int y = 3; 
}

IdentifyMyParts a = new IdentifyMyParts();
IdentifyMyParts b = new IdentifyMyParts();
a.y = 5;
b.y = 6;
a.x = 1;
b.x = 2;
System.out.println("a.y = " + a.y);
System.out.println("b.y = " + b.y);
System.out.println("a.x = " + a.x);
System.out.println("b.x = " + b.x);
System.out.println("IdentifyMyParts.x = " + IdentifyMyParts.x);

 

출력 결과:

 

a.y = 5

b.y = 6

a.x = 2

b.x = 2

IdentifyMyParts.x = 2

 

분석:

 

클래스 변수: x는 모든 인스턴스에서 공유되며, 마지막 할당된 값이 반영됩니다.

인스턴스 변수: y는 각 인스턴스마다 독립적으로 값을 가집니다.

 

🔄 Iterator와 hasNext()

 

Iterator는 컬렉션 객체를 순회할 때 사용됩니다.

hasNext(): Iterator가 다음 요소를 가지고 있는지 여부를 반환합니다.

next(): Iterator에서 다음 요소를 반환합니다.

 

이러한 요소들을 잘 이해하면 자바 프로그래밍에서 더욱 효율적이고 유지보수하기 쉬운 코드를 작성할 수 있습니다. 💻✨

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유