문자열, 예외, 제네릭

DONI·어제
0

자바

목록 보기
3/4
post-thumbnail

📌 문자열 리터럴과 new String("")

문자열 리터럴
문자열 리터럴은 String Pool 메모리 영역에 저장된다.
동일한 내용의 문자열이 이미 String Pool에 존재하면 새로운 객체를 생성하지 않고
기존의 객체를 참조하기 때문에 메모리 사용 효율이 높고, 안전하게 사용이 가능하다.
일반적으로 문자열을 생성할 때는 리터럴 방식이 권장된다.

   🔍 String Pool
       Java에서 문자열 리러털을 효율적으로 관리하기 위해 사용되는 메모리 영역
       문자열 리터럴이 사용되면 JVM에서 String Pool에 해당 문자열이 존재하는지 확인

new String
Heap 메모리 영역에 문자열 객체를 명시적으로 생성하며
동일한 내용이라도 항상 새로운 객체를 생성하기 때문에 메모리 사용량이 증가할 수 있다.
보안상의 이유로 String Pool에 저장되지 않고 독립적으로 객체를 생성해야 할 때 사용한다.


📌 String, StringBuilder, StringBuffer

1) String
문자열이 생성된 이후에는 변경할 수 없고, 항상 새로운 객체가 생성되어 속도가 느리다.
변경이 적은 문자열을 처리할 때 주로 사용한다.

2) StringBuilder
기존 객체를 수정하여 문자열을 변경할 수 있다.
동기화(synchronization)가 되어 있지 않아 단일스레드 환경에서는 성능이 뛰어나지만
Thread-Safe가 아니므로 멀티스레드 환경에서는 주의가 필요하다.
단일스레드 환경에서 문자열 변경이 많은 경우에 사용한다.

3) StringBuffer
기존 객체를 수정하여 문자열을 변경할 수 있다.
동기화(synchronization)가 되어 있어 멀티스레드 환경에서도 안전하게 사용 가능하지만,
동기화로 인해 단일스레드 환경에서는 StringBuilder보다 속도가 느리다.
멀티스레드 환경에서 문자열 변경이 많은 경우에 사용한다.

   🔍 동기화(synchronization)와 Thread-Safe
       동기화란 멀티스레딩 환경에서 하나의 공유 자원에 하나의 스레드만 접근 가능하도록
       제한하는 매커니즘이고, Thread-Safe란 동시에 여러 스레드가 접근하더라도 프로그램이
       예상대로 동작하는 것을 의미한다. 즉 동기화를 통해 Thread-Safe를 보장할 수 있다.


📌 Exception과 Error

Exception (🍀)
프로그램 실행 중에 발생하는 복구 가능한 문제를 말한다.
주로 사용자 입력, 네트워크, 파일 입출력 등의 문제로 발생하며
try ~ catch를 통해 예외를 처리하여 프로그램을 계속 실행할 수 있다.

  • Checked Exception
    컴파일러가 예외 처리를 강제하는 예외로,
    try ~ catch, throws 키워드 등으로 반드시 처리해야 한다.

    • 파일 입출력, 네트워크 통신, 데이터베이스 처리 등 외부 환경과 관련된 예외
    • 개발자가 예외 상황을 인지하고 처리하도록 하여 안전성을 높임
      예) IOException, SQLException, ClassNotFoundException
  • Unchecked Exception
    런타임 시 발생하며 컴파일러가 예외 처리를 강제하지 않아
    코드 작성이 간결하며 반드시 처리하지 않아도 프로그램이 컴파일 및 실행됨

    • 논리적 오류, 데이터 접근 오류 등 프로그래머의 실수로 발생할 가능성이 높음
      예) NullPointerException, ArrayIndexOutOfBoundsException

Error
시스템에서 발생하는 복구 불가능한 문제를 말한다.
JVM의 동작, 시스템 리소스 등의 심각한 문제로 발생하며
예외 처리가 불가능해 프로그램 중단 위험이 있다.
  예) OutOfMemory, StackOverflow


📌 throwthrows

throw: 예외를 직접 발생시키는 키워드
메서드 내부에서 new 키워드로 구체적인 예외 객체를 생성하여 던진다.
예외가 즉시 처리되지 않으면 런타임 에러가 발생한다.

throws: 메서드가 예외를 호출자에게 전달함을 선언하는 키워드
메서드 선언부에서 Checked Exception을 컴파일러와 호출자에게 전달하여
발생 가능한 예외를 호출자가 처리할 수 있도록 알린다.


📌 제네릭(Generic)

Java에서 클래스, 메서드, 컬렉션에서 데이터 타입을 한 종류로 제한하는 기능으로
컴파일 시 타입 안정성과 코드 재사용성을 높인다.

profile
틀린 내용이 있다면 댓글 또는 이메일로 알려주세요 ❤ꔛ❜

0개의 댓글