728x90
final
- 변수, 메서드, 클래스가 변경이 불가능하도록 한다.
- 변수 : final 로 선언된 변수는 상수로 취급되고, 한 번 초기화 됐을 경우 변경할 수 없다.
- 메서드 : final로 선언된 메서드는 하위 클래스에서 오버라이드 할 수 없다. 해당 메서드는 상속된 클래스에서 그대로 사용되어야 한다.
- 클래스 : final로 선언된 클래스는 하위 클래스를 가질 수 없다. 다른 클래스가 해당 클래스를 상속받아 새로운 클래스를 정의하는 것이 불가능하다.
- 메서드는 오버라이드 할 수 없고, 클래스는 하위 클래스를 정의할 수 없다.
finally
- try/catch 블럭이 종료될 때 항상 실행될 코드 블럭을 정의할 수 있다. 단, finally는 예외가 발생하더라도 항상 실행된다.
- 주로 리소스 해제, 또는 정리 작업을 위해 사용된다. 파일을 열었을 때 finally를 블럭에서 해당 파일을 닫는 등의 작업을 수행한다.
finalize() 메서드
- GC가 더 이상의 참조가 존재하지 않는 객체를 메모리에서 삭제하겠다고 결정하는 순간에 호출된다.
- 이 메서드를 재정의하여 객체가 메모리에서 제거될 때에 필요한 정리를 수행한다.
non-static 멤버
- 인스턴스 멤버, 객체마다 별도로 존재한다. 객체가 생성될 경우에 멤버가 생성되고, 멤버 호출이 가능하다. 공유되지 않기 때문에 각각의 공간을 유지한다.
static 멤버
- 클래스 멤버, 클래스 당 하나가 생성된다. 객체 내부에 멤버가 존재하는것이 아니라 별도의 공간에 생성된다.
- 객체가 생기기 전에 이미 생성되기 떄문에, 선언되지 않아도 사용이 가능하다. 멤버는 프로그램이 종료될 때에 사라진다.
abstract : 추상 클래스
- 최소 한 개 이상의 추상 메서드를 포함하는 경우 반드시 추상 클래스로 선언되어야 한다. 그러나 추상 메서드가 없어도 추상 클래스로 선언하는 것은 가능하다.
- 객체를 생성하기 위한 클래스가 아닌, 부모 클래스로 활용하기 위한 클래스로, 공통된 부분을 추상화하여 상속받는 클래스에게 구현을 강제화하기 위한 것 이다.
- public abstract class Animal { private String name; public Animal(String name) { this.name = name; } public String getName() { return name; } public abstract void sound(); // 추상 메서드 public void sleep() { System.out.println("Zzzz..."); } }
- Animal은 추상 클래스이고, sound 메서드는 추상 메서드로 하위 클래스에서 구현되어야 한다. sleep는 일반 메서드이기 때문에, Animal 클래스를 상속받는 클래스에서 구현하지 않아도 된다.
- public class Dog extends Animal { public Dog(String name) { super(name); } public void sound() { System.out.println("Woof!"); } }
- Dog 클래스는 Animal 클래스를 상속받고, sound 메서드를 구현한다.
- 추상 클래스는 다형성을 지원하고, 공통된 메서드를 정의하는데 사용된다. 인스턴스를 직접 생성하는 것은 하지 못하지만, 하위 클래스의 객체를 참조할 수는 있다.
interface : 인터페이스
인터페이스는 추상 클래스와 비교되지만 다른 개념이다. 추상 메서드의 집합으로, 클래스가 특정 동작을 실행할때 구현해야 하는 메서드를 제공한다. 인터페이스 - 클래스가 연결되는 부분이라고도 볼 수 있다.
클래스가 인터페이스를 구현한다는 것은, 인터페이스에서 정의된 메서드를 모두 구현한다는 뜻이다.
- 다중 상속을 지원한다. 클래스는 하나의 클래스만 상속이 가능하지만, 인터페이스는 여러 개를 동시에 구현할 수 있다.
- public interface MyInterface { void method1(); // 추상 메서드 선언 int method2(String str); // 매개변수와 반환 타입이 있는 추상 메서드 선언 public static final int CONSTANT = 10; // 상수 필드 선언 }
- implements 키워드를 사용하여 해당 인터페이스를 구현하는 클래스를 선언한다.
- public class MyClass implements MyInterface { public void method1() { System.out.println("Method 1 implementation"); } public int method2(String str) { System.out.println("Method 2 implementation with parameter: " + str); return str.length(); } }
인터페이스 - 추상클래스
내용 | 일반 메서드의 구현 가능 | 추상 메서드의 선언만 |
상속 | 다중 상속 불가능 | 다중 구현 가능 |
생성자 | 생성자를 가질 수 있음 | 생성자를 가질 수 없음 |
필드 | 인스턴스 변수, 상수 필드 포함 | 상수 필드만 포함 가능 |
사용목적 | 클래스 간의 계층 구조 정의 및 재사용 | 클래스 간의 상호작용, 및 다형성 지원 |
728x90
'SpringBoot > Java' 카테고리의 다른 글
JAVA 고유 식별자 UUID (C# GUID) (0) | 2023.07.11 |
---|---|
Java 8 Stream ( 자바 8 스트림, 람다 ) (0) | 2023.06.04 |
Java - Spring // Stream, Assertions (0) | 2022.12.16 |
22.11.17 Java 백준 1110번 더하기 사이클 (0) | 2022.11.17 |
22.11.09 Java (0) | 2022.11.10 |