체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception)의 주요 차이는 예외 처리의 강제 여부에 있습니다. 체크 예외는 RuntimeException 클래스를 상속하지 않은 예외로, 개발자가 이를 처리하도록 강제합니다. 예시로는 FileNotFoundException, RuntimeException 등이 있습니다. 장점 컴파일 시간에 강제로 예외 처리를 유도하여 안정성을 높입니다. 예외 처리를 강제함으로써 코드의 가독성과 유지보수성이 향상될 수 있습니다. 단점 너무 많은 예외 처리 코드가 필요할 수 있어 코드의 복잡성이 증가할 수 있습니다. 예외 처리를 강제함으로써 개발자의 부담이 커질 수 있습니다. 체크 예외가 발생할 수 있는 코드는 try-catch 블록으로 감..
프로그래밍 언어/Java
"인터페이스(Interface)와 추상 클래스(Abstract class)의 차이 및 존재 이유에 대해 설명해주세요" 추상클래스는 없거나 하나 이상의 추상메소드를 가지고 있는 클래스로, 추상메소드는 내용이 구현되지 않은 abstract로 정의된 메소드를 의미합니다. 클래스 안에 메소드가 단 한개라도 존재한다면 그 클래스는 반드시 abstract로 정의되어야 합니다. 어떤 클래스가 추상 클래스를 상속받을 때는 extends를 씁니다. 인터페이스는 모든 메소드를 추상 메소드의 형태로 작성하는 것으로, 이를 상속하는 클래스는 해당 인터페이스의 모든 메소드를 반드시 구현해야 합니다. (자바 8에서는 default 키워드를 이용해서 일반 메소드의 구현도 가능합니다.) 또한 인터페이스 내 모든 변수들은 static..
클래스, 객체, 그리고 인스턴스 클래스(Class) 객체를 만들어내기 위한 설계도 혹은 틀로서 연관된 변수와 메서드의 집합을 포함합니다. 클래스는 개념적인 틀로, 실체화되기 전에는 메모리에 존재하지 않습니다. 예를 들어, '자동차' 클래스는 자동차의 공통된 동작을 정의합니다. 객체(Object) 소프트웨어 세계에 구현할 대상으로, 클래스에 선언된 모양 그대로 생성된 실체입니다. 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 가지며, OOP에서 클래스의 타입으로 선언되었을 때 '객체'라고 부르며 '클래스의 인스턴스(instance)'로도 불립니다. '자동차' 클래스로부터 생성된 실제 자동차가 객체입니다. 인스턴스(Instance) 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체로, 객체를 소프트..
SOLID는 객체지향 프로그래밍의 다섯 가지 설계 원칙을 나타내며, 그 내용은 다음과 같습니다. 1. SRP (Single Responsibility Principle, 단일 책임 원칙) 클래스는 단 하나의 책임만을 가져야 합니다.즉, 하나의 클래스는 하나의 기능에만 집중해야 합니다. 단일 책임 원칙을 제대로 지키면 변경이 필요할 때 수정할 대상이 명확해집니다. 이러한 단일 책임 원칙의 장점은 시스템이 커질수록 극대화되는데, 시스템 규모의 확장으로 서로 많은 의존성을 갖는 상황에서 변경 요청이 오면 단 1가지만 수정하면 되기 때문입니다. 2. OCP (Open-Closed Principle, 개방-폐쇄 원칙) 확장에는 열려있고 수정에는 닫혀있어야 합니다. 즉, 기존 코드를 수정하지 않고 새 기능을 추가할..
객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어 개발에 널리 쓰이는 프로그래밍 패러다임으로, 가장 큰 장점은 프로그램을 보다 유연하고 변경을 용이하게 만들 수 있다는 점입니다. 이러한 OOP는 추상화, 캡슐화, 상속, 그리고 다형성 등 여러 주요한 특징들에 기반합니다 1. 추상화 Abstraction - 정의 : 객체의 공통된 속성과 기능을 추출하여 정의하는 것. 추상화는 문제에 알맞게 클래스를 모델링하고, 가장 연관성 있는 상속 수준에서 작업함으로써 복잡한 현실을 단순화하고, 특정한 세부사항보다 객체의 필수적인 질에 집중합니다. 2. 캡슐화 Encapsulation - 정의 : 서로 연관된 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로..
자바의 접근 제어자(access modifire)는 클래스, 메서드, 그리고 변수들의 접근성을 정하는 키워드로, public, private, protected, 그리고 default로 구성됩니다. 자바 개발자는 이 접근 제어자들을 통해 클래스, 인터페이스, 메서드, 데이터와 변수들에 대해 가시성과 접근성을 통제할 수 있습니다. 다음은 접근 제어자 각각에 대한 간결한 도표입니다. 접근 제어자 패키지 외 다른 패키지의 하위 클래스 패키지 내 클래스 내 public O O O O protected X O O O default X X O O private X X X O 위 도표를 정리하면 다음과 같습니다. private : 동일 클래스 내에서만 접근 가능 default : 동일 패키지 내에서만 접근 가능 pr..
String은 자바에서 가장 흔히 쓰이는 클래스 중 하나이고, StringBuilder와 StringBuffer는 String을 다룰 수 있는 좋은 도구입니다. 이 게시글은 String과 StringBuilder, 그리고 StringBuffer 간의 차이를 정리하기 위해 작성되었습니다. String 1. 자바에서 String 클래스는 문자 string을 나타내며, 두 가지 방식으로 이를 인스턴스화할 수 있습니다. String str = "ABC"; // or String str = new String("ABC"); 2. Java에서 String은 불변 객체로 멀티 스레드 환경에 적합합니다. 데이터 비일관성에 대한 걱정이 없기 때문에 함수 간에도 공유할 수 있습니다. 3. 큰따옴표(")로 String을 정..
자바 코드(JAVA Code) 실행 과정 자바 코드의 실행 과정은 다음과 같습니다. 개발자가 자바 소스코드 파일(.java) 파일을 생성한다. 이를 자바 컴파일러(javac)로 빌드하여 바이트 코드(.class)로 컴파일한다. .class 파일을 JVM의 클래스 로더(Class Loader)에게 전달한다. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area) 인 JVM의 메모리에 올린다. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행한다. JVM 동작원리 및 기본개념 클래스 로더 (Class Loader) ● 특징 계층 구조 클래스 로더는 여러 클래스 로더 간 부모-자..
정의 Java의 Garbage Collector(이하, GC)는 C의 malloc()과 free()처럼 개발자가 직접 메모리를 할당하고 해제할 필요 없이 사용하지 않는 메모리 영역을 자동으로 해제하여 메모리 누수(memory leak)를 방지합니다. 유형 JVM의 heap 영역은 처음 설계될 때 다음을 전제로 설계되었습니다. 대부분의 객체는 금방 접근 불가능한 상태(Unreachable)가 됩니다. 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재합니다. 즉, 객체는 대부분 일회성이며, 메모리에 오랫동안 남아있는 경우가 드뭅니다. 객체의 생존 기간에 따라 물리적인 heap 영역을 나눴고 Young과 Old의 2가지 영역으로 설계되었습니다. Young 영역 새롭게 객체가 할당되는 영역 대부분의 객체가..
Java의 가장 큰 특징 중 하나는 어느 플랫폼, 어느 하드웨어, 어느 운영체제에 상관없이 컴파일된 코드(바이트코드)가 플랫폼 독립적이라는 점입니다. 이것이 가능한 것은 컴파일된 코드(바이트 코드)를 실행시켜주는 가상 컴퓨터 JVM(JAVA Virtual Machine) 덕분입니다. 1. 자바 실행 과정 JVM 동작 원리를 이해하기 위해선 먼저 Java 코드의 동작 원리를 파악해야 합니다. Java 코드 동작 원리 작성한 자바 소스 코드 파일(.java) 을 자바 컴파일러(javac)를 통해 바이트 코드(.class)로 컴파일합니다. 컴파일된 바이트 코드를 JVM의 클래스 로더에게 전달합니다. 클래스 로더는 동적 로딩을 통해 필요한 클래스들을 JVM의 메모리인 런타임 데이터 영역에 로딩합니다. 실행 엔진..