본문 바로가기

ComputerScience/Java

(10)
[Java] Java에서 예외 처리 예외와 에러 프로그래밍에서 예외(Exception)란 입력 값의 처리가 불가능하거나 참조된 값이 잘못된 경우 등 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미합니다. 예외는 개발자가 직접 처리할 수 있으므로 미리 코드 설계를 통해 처리할 수 있습니다. 에러(Error)란 예외와 비슷한 의미지만 엄연히 다른 용어로, 에러는 주로 자바의 가상머신(JVM)에서 발생시킵니다. 따라서 예외와 달리 애플리케이션에서 처리할 수 있는 것이 없습니다. 대표적인 예로 메모리 부족(OutOfMemory), 스택 오버플로(StackOverFlow)가 있습니다. 이러한 에러는 발생 시점에 처리하는 것이 아니라 미리 애플리케이션의 코드를 살펴보면서 문제가 발생하지 않도록 예방해서 원천적으로 차단해야 합니다. 예외 클래스 ..
[Java] Compile Time과 Runtime의 차이 자바에서는 컴파일 타임과 런타임은 각각 프로그램의 실행의 두 단계를 나타냅니다. 컴파일 타임(Compile Time) 컴파일 타임은 사람이 작성한 소스 코드가 컴퓨터가 이해할 수 있는 기계어로 번역되는 단계입니다. 자바의 컴파일러는 이 단계에서 문법적 에러를 확인합니다. (e.g., missing semicolons, typos, incorrect syntax) 만약 어떤 문제도 발생하지 않으면, 자바 컴파일러(e.g., javac)는 bytecode를 생성합니다. bytecode는 기계어는 아니지만, JVM(Java Virtual Machine)에 의해 해석될 수 있습니다. 또한 아래와 같은 일들이 수행됩니다. 데이터 유형 호환성 확인 클래스 및 방법이 올바르게 선언되었는지 확인 런타임(Runtime)..
[Java] Logback - 로깅 라이브러리 Logging Logging(로깅)이란 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 의미합니다. 로깅은 개발 영역 중 '비기능 요구사항'에 속합니다. 즉 필수적인 기능은 아니나, 로깅은 디버깅하거나 갭라 이후 발생한 문제를 해결할 때 원인을 분석하는 데 유용합니다. 자바 진영에서 가장 많이 사용되는 Logging 프레임워크는 Logback입니다. Logback Logback은 *log4j 이후에 출시된 로깅 프레임워크로서 *slf4j를 기반으로 구현됐으며, 과거에 사용되던 Log4j에 비해 월등한 성능을 자랑합니다. *log4j: Apache log4j는 Java 기반의 로깅 유틸리티로서, 로그를 파일, 콘솔, HTML, 데이터베이스 등 다양한 대상에 출력할 수 있습..
[Java] immutable(불변) 객체란? 자바에서 불변(Immutable) 객체에 대한 이해 가변 객체는 상태 정보를 변경할 수 있어 불안정하고, 작업 전후에 일일이 코드를 확인하거나 DB를 호출해야한다. 하지만 불변 객체는 한번 만들어지면 상태가 변경되지 않아 안정적인 개발이 가능하다. 불변(Immutable)객체는 생성 이후에 상태가 변하지 않는 객체이다. 불변 객체는 중복 제거의 장점을 가지며, 안전한 서비스 개발에 도움이 된다. 예를 들어 DB에서 객체 정보를 받아와 작업할 때, 의도치 않게 불변 객체의 정보를 변경하려는 경우 불변 객체를 사용하면 이를 방지할 수 있다. 또한 map, set, cache에 쓰기에 적절하다. 불변 객체를 사용하면 Thread-safe의 장점이 있다. 데이터 불일치 역시 없어, 안전하게 여러 셀에서 상태정보..
[Java] JUnit5 JUnit JUnit은 자바 언어에서 사용되는 대표적인 테스트 프레임워크로서 단위 테스트를 위한 도구를 제공합니다. 또한 단위 테스트뿐만 아니라 통합 테스트를 할 수 있는 기능도 제공합니다. JUnit의 가장 큰 특징은 어노테이션 기반의 테스트 방식을 지원한다는 것입니다. 또한 JUnit을 활용하면 assert문을 통해 테스트 케이스의 기댓값이 정상적으로 돌출됐는지 검토할 수 있다는 장점이 있습니다. JUnit의 세부 모듈 JUnit Platform JUnit Platform은 JVM에서 테스트를 시작하기 위한 뼈대 역할을 합니다. 테스트를 발견하고 테스트 계획을 생성하는 테스트 엔진(TestEngine)의 인터페이스를 가지고 있습니다. 테스트 엔진은 테스트를 발견하고 테스트를 수행하며, 그 결과를 보고..
[Java] Java에서 Queue와 구현체들 (+ ArrayList와 LinkedList의 차이) Queue Java의 Queue 인터페이스는 FIFO(First In First Out) 방식의 순차적 자료 구조를 구현합니다. 즉, 먼저 추가된 요소가 먼저 제거됩니다. Queue 인터페이스는 LinkedList, PriorityQueue, ArrayBlockingQueue 등 다양한 클래스에서 구현됩니다. Queue 인터페이스는 큐에 요소를 추가, 제거, 검사하는 여러 메서드를 제공합니다. 다음은 가장 일반적으로 사용되는 메서드들입니다. add(element): 요소를 큐의 맨 뒤에 추가합니다. 큐가 가득 차 있으면 예외를 발생시킵니다. offer(element): 요소를 큐의 맨 뒤에 추가합니다. 큐가 가득 차 있으면 false를 반환합니다. remove(): 큐의 앞에서 요소를 제거하고 반환합니다..
[Java] List와 Set의 차이, 그러면 Set은 어떻게 구현할까요? 공부를 하기 전에 제가 아는 것 부터 적어보자면.. 일단 List는 순서가 있고 중복이 존재할 수 있구요 삽입 삭제에 걸리는 시간이 O(n) 반대로 Set은 중복이 없고 순서가 존재하지 않구요 삽입 삭제에 걸리는 시간이 O(1)입니다. ...네 공부해서 글을 작성해보겠습니다. Java의 Collection Collection은 '요소'라고 알려진 어떠한 객체의 그룹을 나타냅니다. 일부 컬렉션은 중복 요소를 허용하고 다른 일부는 그렇지 않습니다. 일부는 순서가 있고 다른 일부는 순서가 없습니다. JDK는 Set과 List와 같은 더 구체적인 하위 인터페이스의 구현을 제공합니다. List List는 Collection의 하위 인터페이스로, 순서가 있는 컬렉션입니다. 중복 값을 저장할 수 있는 객체들의 순서가..
[Java] 인터페이스가 다중 상속이 가능한 이유? 왜 클래스는 단일 상속만 가능한데, 인터페이스는 2개 이상 구현이 가능할까요? 일단 인터페이스에 대해 간단히 다시 요약해보겠습니다. 인터페이스 클래스가 어떤 메소드를 반드시 구현해야 하는지를 명시하는 역할을 합니다. 클래스는 인터페이스를 구현함으로써 이 인터페이스가 요구하는 메소드들을 모두 정의해야 합니다. 인터페이스는 메소드와 상수만을 가질 수 있으며, 이들은 모두 public이어야 합니다. interface printable{ void print(); } class A6 implements printable{ public void print(){ System.out.println("Hello"); } public static void main(String args[]){ A6 obj = new A6(..