본문 바로가기

Programming/Java21

인터페이스 Interface 기능들의 목록을 가지고 있는 것: 무슨 기능을 만들어야 할 지 메서드에 대한 선언만을 가지고 있다. 즉, 규칙을 잡거나, 플로우 로직을 잡는데 사용한다. 객체의 사용 방법을 정의한 타입이다. 객체의 교환성을 높여주기 때문에 Upper CamelCase로 작성된다. 확장자가 .java파일로 작성한다. 모든 필드는 public static final이어야 하며, 모든 메서드는 public abstract이어야 한다. (Java 7까지는) final, abstract를 생략하면 자동으로 붙는다. Java 8 부터는 default 메서드(구현된 메서드)와 static 메서드도 선언이 가능하다. 인터페이스의 default 메서드: JDK 8에 추가된 메서드 default 메서드가 인터페이스에 추가된 이유에 대해 .. 2023. 12. 1.
Java의 String 클래스 String 클래스 public class StringExam{ public static void main(String[] args) { String str1 = "hello"; String str2 = "hello"; String str3 = new String("hello"); } } new로 생성하지 않은 경우 상수 취급된다. 따라서 str1과 str2는 같은 것을 참조한다. new를 사용한 str3는 힙 메모리에 항상 새로운 객체를 생성한다. Reference 타입에서 ==는 같은 객체를 참조하는지 확인하는 연산자이다. 그래서 str1, str2, str3 를 비교하게되면 ==로 비교했을 때 1, 2는 참이 나오지만 1, 3을 비교하면 거짓이 나온다. 만약 new로 새로운 hello를 만들어 st.. 2023. 11. 30.
추상 클래스 2: 템플릿 메서드 패턴 Template Method Pattern 추상 클래스는 템플릿 메서드 패턴에서 가장 잘 사용할 수 있다: 템플릿 메서드 패턴에 대해 살펴보도록 하자. 다음 같은 상황이라고 생각해보자. Controller 종류가 여러개 → { 초기화 - 같은 코드 실행 - 다른 코드 마무리 - 같은 코드 } Controller의 종류를 여러개 만들어 여러 종류의 케이스에 대해서 각각 처리를 하도록 Cotroller(추상클래스)를 부모로 하여 모델을 구현해 보자. 각 클래스는 적절하게 패키지를 작성하는 것이 좋다: 패키지 도메인은 생략 public abstract class Controller { protected final void init() { System.out.println("작업 시작"); } protected final void close() { Sy.. 2023. 11. 30.
추상 클래스 1: 추상 클래스란 여러가지 속성들을 추상화하여 일반적인 속성만을 모아놓은 추상 클래스로 작성할 수 있다. 추상클래스는 인스턴스가 될 수 없다. 추상 클래스를 상속받는 자손이 인스턴스가 된다. abstract 키워드를 사용하여 클래스를 정의한다. 1개 이상의 추상 메서드로 이루어진다. 시리즈 추상 클래스 1: 추상 클래스란 추상 클래스 2: 템플릿 메서드 패턴 2023. 11. 30.
Java 생성자와 super(), Immutable Java 생성자의 특징 기본 생성자는 생성자 오버로딩이 하나라도 되어있으면 자동으로 생성되지 않는다. 기본 생성자나 아무것도 초기화하지 않는 생성자의 경우 super() 생성자를 자동으로 포함하여 컴파일한다. 사용자가 super()생성자를 호출하는 코드를 작성하지 않으면 자동으로 부모의 기본 생성자가 호출된다. 만약 부모 클래스에 기본 생성자가 없을 경우에는 필요한 인자를 super()의 인자를 통해 전달하는 코드를 작성해야만 한다. 부모 클래스의 생성자로 초기화 후 자식 클래스 생성자가 초기화를 진행해야 한다는 것. 자신의 생성자를 호출할 때는 this()를 사용한다. this() 생성자는 생성자 내에서만 사용할 수 있다. 생성자 안에서 super()생성자를 호출하는 코드 다음이나, 첫번째 줄에 위치해.. 2023. 11. 30.
Object 제공 메서드: toString() / equals() & hashCode() Object는 기본적으로 모든 클래스들이 상속하는 클래스. 이 메서드들은 오버라이딩하도록 제공되는 메서드들이다. Example public class example { public static void main(String[] args) { Car car = new Car(); System.out.println(car); // println(Object x) } } Object를 받아서 출력하는 메서드를 가지고 있음: Object로 참조할 수 있는 모든 매개변수는 모두 이 메서드를 사용할 수 있다. 해당 println()을 살펴보자. → toString()메서드가 실행되는 것. 다만, Car 클래스에 Object 메서드를 오버라이드하여 작성하지 않으면 쓸모가 없다. 왜 이것들을 오버라이드하여 사용하나? .. 2023. 11. 28.