본문 바로가기

JAVA34

[자바] 자바의 스레드 생명주기와 메서드 스레드의 생명주기스레드의 생명주기는 다음과 같다.스레드의 상태New : 스레드가 생성되었지만 아직 호출되지 않은 상태 (자바에서 start() 호출 전)Runnable : 스레드가 실행되기 위해 대기 중인 상태로 언제든 CPU를 할당받아 실행 준비가 되어있는 상태 (start() 호출, 자바에서는 스케줄러의 대기열에 존재하는 스레드나 실제 실행되는 스레드나 모두 Runnable 상태)Blocked : 스레드가 I/O와 같은 이벤트에 의해 대기하는 상태Terminated : 스레드 실행이 모두 끝나 종료된 상태. 더 이상 실행되지 않고 메모리에서 제거됨자바에서는 Blocked 상태가 다음과 같이 나뉜다.Blocked (차단) : 스레드가 동기화 락을 기다리는 상태 (synchronized 블록에 진입해야 .. 2024. 12. 25.
[자바] Iterable, Iterator, Comparable, Compartor Iterable, Iterator자바는 어떠한 자료 구조든 상관없이 동일한 순회 방법을 제공하기 위해 Iterable, Iterator 인터페이스를 제공한다. Iterable 인터페이스 내부에는 iterator() 메서드가 있다. 그리고 Iterator에는 hasNext(), next() 라는 메서드가 존재한다.public interface Iterable { Iterator iterator();}public interface Iterator { boolean hasNext(); // 다음 요소가 있는지 확인 E next(); //다음 요소를 반환}즉 Iterable 인터페이스는 컬렉션 인터페이스의 상위에 존재하여 자바의 컬렉션들이 Iterator를 구현하게 하기 위함이다. 그리고 .. 2024. 12. 24.
[자바] Object, Equals, Hashcode Object자바는 모든 클래스는 Object를 상속받는다. 즉 Object는 최상위 클래스임.이로 인해 모든 객체에 필요한 공통 기능 (equals, hashcode, toString …)을 제공하고 모든 객체에 대해 다형적 참조가 가능하여 다형성의 기본적인 매커니즘을 지원한다. 하지만 Object로 모든 객체를 다형적 참조한다면 Object 내부의 메서드만 사용할 수 있기 때문에 다운캐스팅을 해야한다는 단점이 존재한다.toString()Object 내에는 다음과 같이 toString() 메서드가 구현되어 있다.패키지 포함 객체 이름@16진수 해시값test.Member@30f39991 → src 하위의 test 패키지.클래스이름@해시코드public String toString() { retur.. 2024. 12. 24.
[자바] 제네릭 제네릭이란?특정 타입에 속하지 않고 일반적으로 사용된다는 의미로 클래스에서 사용될 타입을 외부에서 결정하도록 하여 타입에 대한 결정을 나중으로 미루는 것을 의미한다.제네릭을 사용하면 코드 재사용성을 올리며 타입 안전성까지 보장된다는 장점이 있다. 용어제네릭 클래스 : 다이아몬드 기호()를 사용한 클래스제네릭 타입 : 클래스, 인터페이스 정의 시에 타입 매개변수를 사용하는 것으로, 제네릭 클래스, 인터페이스를 뜻함.타입 매개변수 : 제네릭 타입, 메서드에서 사용되는 변수타입 인자 : 제네릭 타입에 실제로 제공되는 타입으로 기본형은 인자가 될 수 없음public class Generic { // T - 타입 매개변수 T data;}// Generic generic = new Generic() - 인자로 넘.. 2024. 12. 24.
[자바] Exception 자바는 프로그램 실행 시점에 발생할 수 있는 오류를 크게 두 가지로 분류하였다.Error → 메모리 부족이나 스택오버플로우와 같이 JVM, 하드웨어 등 시스템의 문제로 발생하는 것으로 개발자가 처리할 수 없는 것.Exception →RuntimeException → Exception 중 컴파일러가 예외를 체크하지 않으며, 실행 중 발생할 수 있고 예외 처리가 필수가 아니며, 언체크 예외라고도 불림.Checked Exception → 컴파일러가 예외를 체크하여 체크 예외라고함.또한 체크 예외에는 예외를 잡아서 복구할 수 있는 예외보다 복구할 수 없는 예외가 더 많다. (ex.. SQLException)반드시 예외 처리를 해야한다. 이 때 예외 처리 방법으로는 try-catch, throws와 같은 방법이 .. 2024. 12. 24.
[자바] 중첩 클래스 클래스 내부에 클래스를 정의한 것중첩 클래스 종류정적 중첩 클래스 → 바깥 인스턴스와 전혀 다른 인스턴스, 바깥에 소속되어 있지 않음 (static)내부 클래스 → 바깥 인스턴스 소속 (non-static)내부 클래스지역 클래스익명 클래스사용하는 이유특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용즉 외부의 여러 클래스가 특정 중첩 클래스를 사용하면 안됨.논리적 그룹화 : 다른 곳에서 사용될 필요가 없는 중첩 클래스를 외부에 노출시키지 않게 하기 위함캡슐화 : 중첩 클래스는 바깥의 private 멤버에 접근이 가능. 따라서 둘을 긴밀하게 연결하고 불필요한 public 메서드 제거 가능정적 중첩 클래스자신의 멤버에 접근 가능외부 클래스 인스턴스 .. 2024. 12. 24.
[자바] Enum Class Enum이란?enumeration 의 줄임말로 열거라는 뜻이고, 어떤 항목을 나열하는 것을 의미한다. 즉 일련의 명명된 상수들의 집합을 정의하는 것을 뜻한다. Enum 클래스의 이해를 위해 예시를 하나 들어보도록 하겠다.다음과 같이 요일별로 할인율을 반환해주는 메서드가 있다고 하자. (간략하게 월, 수, 일만 할인 적용)public class PayService { public int discount(String day) { int percent = 0; if (day.equals("MONDAY")) { percent = 3; } else if (day.equals("WEDNESDAY")) { percent = 5; .. 2024. 12. 24.
[자바] Wrapper 클래스 먼저 자바의 데이터 타입은 크게 두 종류로 나눌 수 있다.자바의 데이터 타입기본형 : 하나의 값을 여러 변수에서 공유하지 않음참조형 : 하나의 객체를 참조를 통해 여러 변수에서 공유가 가능여기서 기본형은 다음과 같은 단점이 존재한다.객체가 아니므로 메서드 제공이 불가능null 값을 가질 수 없음제네릭과 컬렉션 프레임워크에 적용이 불가능이러한 단점을 해결하기 위해 기본형을 클래스에 담아서 객체처럼 다루는 것을 래퍼 클래스라고 한다.래퍼 클래스 종류기본형 래퍼 클래스byteByteshortShortintIntegerlongLongbooleanBooleanfloatFloatdoubleDoublecharCharacter래퍼 클래스는 불변객체이므로 equals를 통한 동등성 비교박싱 / 언박싱박싱 : 기본형 → .. 2024. 12. 24.
[자바] String 자바에서 문자열 데이터를 편리하게 사용하기 위해 String 클래스를 지원하는데, 유의할 점이 몇 가지 있는 특별한 자료형이므로 이 참에 정리를 확실하게 해보려 한다. 먼저 String class는 기본형처럼 보이지만 객체이며 참조형이며 힙 영역에 생성된다. String 생성 방법new String() String s1 = new String("hello");리터럴 String s2 = "hello";String 객체는 생성 방법에 따라 메모리 구조가 달라진다.public class Test { public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String("hel.. 2024. 12. 24.