Language 6

Comparable과 Comparator

Comparable과 Comparator 자바의 Comparable과 Comparator는 모두 인터페이스이다. 즉 Comparable 혹은 Comparator을 사용하려면 인터페이스 내에 선언된 메서드를 반드시 구현(오버라이드, 재정의)해야 한다. Comparable public interface Comparable { public int compareTo(T o); } Comparator @FunctionalInterface public interface Comparator { int compare(T o1, T o2); ... } [참고] Comparator 인터페이스에는 compare() 메소드 외에 여러 메소드가 있는데 compare() 메소드만 오버라이딩하면 된다. 나머지 메소드는 defaul..

Language/Java 2024.01.15

추상 클래스와 인터페이스 비교하기

추상 클래스추상 클래스는 하나 이상의 추상 메소드를 갖는 클래스를 말하며, 추상 메소드를 갖는다는 점을 제외하면 일반 클래스와 동일하다. 따라서 추상 클래스는 멤버 변수와 일반 메소드를 가질 수 있다. 추상 클래스는 미완성이므로 그 자체로 객체를 생성(인스턴스화)할 수 없다. 추상 클래스를 상속받는 자식 클래스는 추상 메소드를 반드시 오버라이딩해야 한다. 다중 상속이 불가능하다. 참고로, 추상 메소드를 사용하면 좋은 점은 다음과 같다.부모 클래스의 메소드를 추상 메소드가 아닌 일반 메소드로 정의할 수 있다. 그리고 상속받는 자식 클래스가 해당 메소드를 재정의하면 된다. 그런데 실수로 자식 클래스에서 메소드 오버라이딩을 하지 않은 경우 오류가 발생하지 않는다. 따라서 의도치 않은 결과가 나올 수 있다. 반..

Language/Java 2024.01.14

좋은 객체 지향 설계의 5가지 원칙(SOLID)

SOLID는 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한 것이다. SRP(Single Responsibility Principle): 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 그런데 이때 하나의 책임이라는 것을 모호하다. 그 책임의 단위가 클 수도 있고 작을 수도 있다. 따라서 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이다. ex, UI 로직과 비즈니스 로직의 분리, 객체의 생성과 사용을 분리 OCP(Open Closed Principle): 개방 폐쇄 원칙 확장에는 열려있으나 변경에는 닫혀있어야 한다. 즉 확장에 용이하면서 기존 코드의 변경이 적어야 한다는 것이다. LSP(Liskov Substitution Prin..

Language/Java 2023.12.28

가비지 컬렉션(Garbage Collection, GC)

가비지 컬렉션 가비지 컬렉션은 자바의 메모리 관리 방법 중 하나로, JVM의 Heap 영역에 동적으로 할당했던 메모리 중 더이상 사용되지 않는 메모리 객체를 모아 주기적으로 제거하는 프로세스를 말한다. C/C++ 언어의 경우 이런 가비지 컬렉션이 없기 때문에 개발자가 수동으로 메모리 관리를 해주어야 한다. 그러나 자바에서는 가비지 컬렉터가 대신 메모리 관리를 해주기 때문에 개발자는 메모리 관리나 메모리 누수(필요하지 않은 메모리를 계속 점유하고 있는 현상)에 신경쓰지 않아도 된다는 장점이 있다. [Stop The World, STW] 그러나 이러한 가비지 컬렉션에도 단점이 있다. 자동으로 처리해준다 해도 메모리가 언제 해제되는지 알 수 없어 제어하기 힘들며, 가비지 컬렉션이 동작하는 동안 다른 동작을 멈..

Language/Java 2023.12.19

JVM 구조와 메모리 영역

JVM(Java Virtual Machine) JVM은 자바 바이트코드(.class)를 해석하고 실행한다. JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여서 자바 API와 함께 실행하는 것이다. JVM 덕분에 자바 코드는 OS에 종속적이지 않을 수 있다. 하나의 자바 프로그램의 바이트 코드만으로도 각 OS에 맞는 JVM이 해석하고 실행하기 때문에 OS에 상관없이 실행이 가능하다. JVM의 특징은 다음과 같다. 스택 기반의 가상 머신 심볼릭 레퍼런스: 기본 자료형을 제외한 모든 타입(클래스, 인터페이스)을 명시적인 메모리 주소 기반의 레퍼런스가 아니라 심볼릭 레퍼런스를 참조한다. 즉 참고하는 클래스의 특정 메모리 주소를 참조 값으로 갖지 않고, 이름만 갖고 있다. 가비지 컬렉션: 클래스 ..

Language/Java 2023.12.19

JDK/JRE/JVM, 자바 프로그램의 실행 과정

JDK(Java Development Kit) JDK는 자바 개발 키트(Java Development Kit)의 약자로, 개발자들이 자바로 개발하는 데 사용되는 SDK(Software Development Kit)라고 생각하면 된다. JDK 안에는 자바로 개발하는 데 필요한 라이브러리들과 javac, javadoc 등의 개발 도구들이 포함되어 있고, 자바 프로그램을 실행시켜줘야 하기 때문에 JRE도 포함되어 있다. 즉 JDK는 JVM, JRE를 모두 포함하고 이외에도 자바로 개발하는 데 필요한 Development Tools를 포함하고 있다. 자바 버전 Java 11, Java 17과 같이 여러 버전이 있는데 이 버전은 JDK의 버전을 의미한다. 그래서 자바를 설치한다는 것은 JDK를 설치한다는 의미이다..

Language/Java 2023.12.18