본문 바로가기

Java22

[Java] Throwable vs Error vs Exception 그리고 예외 처리 전략 1. 프로그램 오류프로그램은 어떤 원인에 의해 오작동 또는 비정상적 종료가 일어나는 경우가 있다.이러한 결과를 초래하는 원인을 프로그램 오류 또는 에러라고하며 발생 시점에 따라 3가지로 나뉜다.컴파일 에러 : 컴파일 시에 발생하는 오류런타임 에러 : 실행 시 발생하는 오류논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것컴파일러는 소스코드(.java) 오타, 잘못된 구문, 자료형 체크 등 기본적인 검사를 수행하여 오류가 있는지 알려준다. 이때 발생하는 것이 컴파일 에러이다.그리고 이 컴파일 과정이 끝나면 클래스 파일(.class)이 생성되고 생성된 클래스 파일을 실행할 수 있게 된다.하지만, 컴파일이 잘되었어도 실행 도중 발생할 수 있는 잠재적 오류까지 검사할 수 없기 때문에 실행 도중 오류가 발.. 2025. 1. 14.
[Java] Weak Refrence란? WeakRefrence에 대한 이해를 돕기 위해 GC 동작에 대해 간략히 알아보자 GC(Garbage Collection) 동작GC(Garbase Collection)는 프로그래머가 명시적으로 메모리를 할당하거나 해제하지 않아도 자동으로 메모리 관리를 제공해주는 편의성을 가지게 해준다. GC의 동작은 매우 다양하지만 아래 핵심 동작은 모든 GC 알고리즘에서 공통적으로 이뤄지고 있는 내용이다.(1) Heap 내의 객체 중 사용되지 않는 객체를 찾는다 (2) 사용되지 않는 객체의 Memory를 회수한다.이에 좀 더 나아가면 GC는 객체가 가비지인지 아닌지를 판별하기 위해서 rechability라는 개념을 사용한다.어떤 객체가 참조되고 있는 곳이 한곳이라도 있을 경우 rechable로 구별되며, 반대로 참조되.. 2024. 12. 17.
[Java] static 블록과 생성자 static 블록을 알아보기 전에 Static이 무엇인지에 대해 알아보겠습니다.Static자바에서는 Static 키워드를 사용하여 정적 변수, 정적 메서드를 만들 수 있습니다. 이 둘을 묶어서 정적 멤버라고 불립니다.Static은 JVM 런타임 데이터 영역 메서드 영역 중 Static 영역에 할당이 됩니다.Static 영역에 할당된 값들은 모든 객체가 공유하여 어디서든지 참조할 수 있습니다.그리고 프로그램이 시작될 때 메모리에 할당이 되는데, Static 영역은 가비지 컬렉터 관리 밖에 존재하여서 프로그램이 종료될 때까지 메모리에 할당된 채로 존재합니다.그래서 무분별하기 사용할 경우 문제가 발생할 수 있습니다.  static 블록과 생성자는 각각 클래스와 인스턴스의 초기화를 다루는데 사용되며, 그들의 주.. 2024. 12. 14.
[Java] 기본타입 vs 참조타입 기본 타입 vs. 참조 타입자바의 데이터 타입에는 크게 기본 타입과 참조 타입이 있다. 기본 타입 (primitive type)정수 타입, 실수 타입, 논리 타입정수, 실수, 문자, 논리 리터럴을 저장하는 타입이다.기본 타입은 변수에 실제 값(리터럴)을 저장한다.int age = 24; 참조 타입 (reference type)배열, 열거, 클래스, 인터페이스객체(Object)의 번지를 참조하는 타입이다.참조 타입은 변수에 객체의 번지(객체가 생성될 때 갖는 주소값)를 저장한다.변수는 번지를 통해 객체를 참조한다.String hobby = "공부"; 차이점모든 변수는 스택 영역에 저장된다.단, 타입에 따라 데이터가 생성되고, 저장되는 위치는 다르다.◾️ 기본 타입 변수: 스택 영역에 변수가 생성되고, 변수.. 2024. 6. 10.
[Java] 추상 클래스 vs 인터페이스 추상 클래스(Abstract Class)개념abstract 키워드로 선언된 클래스최소 한 개의 추상 메서드를 포함하는 경우 반드시 추상 클래스로 선언해야한다.그러나 추상 메서드가 하나도 없는 경우라도 추상 클래스로 선언할 수 있다. 추상 클래스의 구현서브 클래스에서 슈퍼클래스의 모든 추상 메서드를 오버라이딩하여 실행가능한 코드로 구현한다. 추상 클래스의 목적객체(인스턴스)를 생성하기 위함이 아니며, 상속을 위한 부모 클래스로 활용하기 위한 것이다.여러 클래스의 공통된 부분을 추상화(추상 메서드)하여 상속받는 클래스에게 구현을 강제화하기 위한 것이다. (메서드의 동작을 구현하는 자식 클래스로 책임을 위임)즉, 추상클래스의 추상메서드를 자식 클래스가 구체화하여 그 기능을 확장하는 데 목적이 있다.추상 클래스.. 2024. 6. 10.
[Java] 오버라이딩 vs 오버로딩 자바의 꽃이라 불리는 클래스(class) 문법의 정말 주요 개념, 오버라이딩(overriding)과 오버로딩(overloading)에 대해 살펴본다.이 둘의 공통점은 클래스의 인스턴스 멤버인 메소드를 재정의 또는 확장의 개념이다. 아주 간단히 차이점을 꼽자면 오버라이딩(overriding)은 부모 클래스의 상속을 받은 자식 클래스에서 확장하는 개념, 오버로딩(overloading)은 하나의 클래스 내부에서 확장하는 개념이다. 본격적으로 이 두가지 개념에 대해 파헤쳐보자.1. 오버라이딩(overriding)상속 받은 자식 클래스는 부모 클래스가 물려준 메소드를 곧이 곧대로 따라야만 하는가?자식 클래스에서 물려 받은 메소드를 조금 변형해서 사용하고 싶다면, 이 오버라이딩을 사용하여 자유롭게 기능을 추가 또는.. 2024. 6. 10.