본문 바로가기
메뉴

CS/Java4

[Java] 제네릭/와일드카드/타입 소거 정리

제네릭과 타입 파라미터제네릭은 클래스/인터페이스/메서드가 다룰 타입을 타입 파라미터로 받아, 컴파일 시점에 타입을 강하게 체크한다.타입 파라미터는 관례적으로 T, E, K, V 같은 단일 대문자를 많이 쓴다.T : TypeE : ElementK : KeyV : Value사용하는 이유컴파일 타임 타입 안정성: 잘못된 타입 사용을 컴파일 단계에서 막는다.캐스팅 제거: 컬렉션에서 꺼낼 때 불필요한 캐스팅과 런타임 예외 위험을 줄인다.raw type을 쓰면 컴파일러가 타입을 제대로 검사하지 못해, 나중에 꺼내 쓸 때 캐스팅이 필요하고 런타임 오류 가능성이 커진다.제네릭 클래스/인터페이스선언부에 하나 이상의 타입 파라미터를 두면 제네릭 클래스/인터페이스라 부른다. 타입 파라미터 도입으로 타입 변수(Type Var..

[Java] try/catch/finally: 바이트코드 분석

용어정상 완료(normal completion): 문장이 모든 단계를 정상적으로 수행하고 끝나는 것비정상 완료(abrupt completion): return, throw, break, continue 등으로 문장이 중간에 특정 이유로 인해 즉시 종료되는 것동작 흐름try-finally / try-catch-finally는 큰 틀에서 아래 규칙으로 이해하면 된다. try 블록을 실행하면try 블록 정상 완료 → finally 실행try 가 예외로 비정상 완료 → (예외 잡을 수 있으면 catch 블록 실행) → finally 블록 실행try 가 예외가 아닌 다른 이유로 비정상 완료 → finally 블록 실행그런데 중요한 점이 하나 있다.원래 결과가 무엇이든, finally 실행 중 비정상 완료(예: r..

[Java] 중첩 클래스(Nested class) 정리 - 바이트코드 분석을 곁들인

중첩 클래스(Nested class)분류중첩 클래스(nested class): 다른 클래스/인터페이스 안에 선언된 클래스 전체내부 클래스(inner class): static 이 아닌 중첩 클래스인스턴스 멤버 클래스(non-static member class)로컬 클래스(local class)익명 클래스(anonymous class)정적 멤버 클래스(static nested class) 왜 사용하는가?논리적 그룹화 : 특정 클래스에서만 사용되는 클래스가 있다면, 그 안에 포함시켜서 함께 두는 게 자연스럽다. "헬퍼 클래스" 같은 것을 중첩시키면 패키지 구조도 깔끔해진다.캡슐화 강화 : 클래스 B가 클래스 A의 멤버에 접근해야 하는데, 해당 멤버들을 private 으로 숨겨야 하는 상황이 있을 수 있다. ..

[Java] 생성자 초기화 순서 정리: 5단계에서 7단계로 (feat. JEP 513)

이것이 자바다 책을 보면서 조금 애매한 설명이 있어서 추가로 공부하게 되었다. [레퍼런스] Chapter 12. Execution | Oracle Java SE 21 흔히 우리가 알던 자바 버전에서는 객체를 생성하게 되면 다음과 같은 순서로 진행된다.메모리 공간 할당모든 인스턴스 변수(상위 클래스 포함) 기본값으로 초기화새 객체를 초기화 하기 위해 생성자 처리 5단계 진행예외 없이 정상적으로 생성자 처리가 끝나면 새로 생성된 객체에 대한 참조가 결과로 반환 생성자 체이닝 (Constructor Chaining)생성자가 다른 생성자를 호출하는 메커니즘두 가지 형태가 있다.super(...) → 부모 클래스 생성자 호출this(...) → 같은 클래스의 다른 생성자 호출 생성자 처리 5단계생성자 인자를 생..

보호된 글

비밀번호를 입력하세요