반응형
1. 함수와 메소드
- 함수의 포인터 전달:
- 자바에서 함수는 포인터(참조값)를 통해 전달된다. 이는 메소드에서 배열이나 객체를 인자로 전달할 때 실제 데이터가 아닌 참조가 전달됨을 의미한다.
- 예를 들어, a.length를 사용하여 배열의 길이를 쉽게 구할 수 있다.
- 메소드 오버로딩:
- 동일한 이름의 메소드를 여러 개 정의할 수 있으며, 인자의 개수나 타입이 다르면 가능하다.
- 리턴 타입이 다르더라도 메소드 이름이 동일하다면 오버로딩할 수 없다.
public void display(int a) { }
public void display(double a) { }
2. 메모리 관리
- 가비지 컬렉션:
- 자바 가상 머신(JVM)은 더 이상 사용되지 않는 객체(가비지)를 자동으로 메모리에서 삭제해준다. 프로그래머가 직접 메모리를 해제할 필요가 없다.
- 가비지 컬렉션은 메모리 누수를 방지하고, 메모리 사용을 최적화하는 데 도움을 준다.
- 특정 객체가 더 이상 참조되지 않으면, JVM의 가비지 컬렉터가 이를 감지하고 메모리를 회수한다.
- 객체의 소멸:
- 객체는 더 이상 사용되지 않거나 참조가 해제되면 소멸된다.
- 자바에서는 finalize() 메소드를 사용하여 객체가 소멸되기 직전에 특정 작업을 수행할 수 있다. 그러나 이 메소드는 가비지 컬렉션에 의해 호출되므로 예측할 수 없다.
protected void finalize() throws Throwable {
// 소멸 직전에 호출되는 코드
}
3. 클래스 및 접근 지정자
- 디폴트 클래스:
- 디폴트 접근 지정자를 가진 클래스는 같은 패키지 내에서만 접근할 수 있으며, 다른 패키지에서는 사용할 수 없다.
- 접근 지정자:
- public: 어떤 클래스에서도 접근 가능.
- private: 같은 클래스 내에서만 접근 가능, 다른 패키지에서는 불가능.
- 디폴트: 같은 패키지 내에서 접근 가능, 다른 패키지에서는 불가능.
- protected: 다른 패키지에서는 불가능하지만, 상속받은 경우에는 접근 가능.
4. static과 final 키워드
- static:
- 클래스당 하나만 존재하며, 모든 객체가 공유한다.
- static 변수는 클래스 이름으로 접근하는 것이 권장된다.
- static 메소드는 static 변수만 사용할 수 있으며, 일반 메소드에서는 static 멤버에 접근할 수 있다.
- static 메소드에서는 this 키워드를 사용할 수 없다.
public class Example { static int count = 0; public static void increment() { count++; } }
- final:
- final 키워드는 클래스를 상속받지 못하게 하거나, 메소드를 오버라이딩하지 못하게 하거나, 변수를 상수로 만든다.
- 변수가 final로 선언되면 값을 변경할 수 없다.
final int MAX_VALUE = 100;
5. 생성자
- 생성자:
- 객체가 생성될 때 호출되는 특별한 메소드이다. 객체 초기화를 담당한다.
- 생성자는 클래스 이름과 동일하며, 리턴 타입이 없다.
- 기본 생성자와 사용자 정의 생성자를 사용할 수 있다.
- 생성자는 오버로딩이 가능하다.
public class MyClass {
MyClass() { // 기본 생성자
// 초기화 코드
}
MyClass(int a) { // 사용자 정의 생성자
// 초기화 코드
}
}
반응형