본문 바로가기
메뉴

전체 글39

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

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

주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 부록

10장 11장 작성은 건너뛰었는데, 이 쪽은 세부적으로 포스팅하려고 한다. (DDD, CQRS등) 성능 테스트부하 테스트 (load)목적: 예상되는 부하에서 시스템이 요구 성능을 만족하는지 확인하기 위한 테스트TPS/RPSp95/p99 latency에러율스트레스 테스트 (stress)목적: 시스템을 한계 이상으로 내몰아 최대 성능을 확인하기 위한 테스트최대 수용량 확인붕괴 지점 이후에 어떻게 동작하는가?지속 부하 테스트 (soak)목적: 일정 부하를 장시간 유지했을 때 버틸 수 있는지 확인하기 위한 테스트커넥션/메모리 누수 확인성능 저하 확인스파이크 테스트 (spike)목적: 갑작스런 트래픽 급증에 대해 시스템의 반응성과 안정성 확인하기 위한 테스트회복력 확인오토스케일링/레이트 리밋 등 설계 점검용어포화..

백준 2026년 3, 4주차 정리 노트

[G1~P5] 네트워크https://www.acmicpc.net/problem/15562A에서 B로 흐르는 간선(네트워크)가 여러 개일 수 있다.간략화 연산을 수행하면 어떤 것들이 바뀌는지 확인한다.in-degreeout-degree언제 간략화가 가능한가? → $out$-$degree > 0\,\&\, in$-$degree > 0$각 정점에 대한 불변량 : $outdeg(v) - indeg(v)$ [C++17 코드]더보기#include using namespace std;#ifdef LOCAL_TESTconstexpr bool isLOCAL = true;#elseconstexpr bool isLOCAL = false;#endif#define debug if constexpr (isLOCAL) cerrty..

[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..

[Spring Boot/JPA] Hibernate Naming Strategy

엔티티, 필드 등의 도메인 모델 이름을 데이터베이스의 테이블, 컬럼 등의 물리적 스키마 이름으로 변환하는 규칙을 정의하는 전략용어논리적 이름(logical name): ORM 매핑 레벨에서 사용하는 추상화된 이름물리적 이름(physical name): 실제 데이터베이스에서 사용되는 최종 이름Implicit Naming Strategy: @Table, @Column 을 안 썼을 때 생성되는 논리적 이름을 어떤 규칙으로 만들지 결정하는 전략Physical Naming Strategy: 논리적 이름을 바탕으로, 실제 DB 스키마에서 쓸 물리적 이름을 결정하는 전략변환 과정명시적 이름이 있는 경우논리적 이름 → PhysicalNamingStrategy → 물리적 이름 → DB명시적 이름이 없는 경우Implici..

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

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

주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 8, 9장

이번 장에서는 보안과 리눅스 명령어와 관련된 내용이 나온다. 8장: 실무에서 꼭 필요한 보안 지식인증(authentication) : 사용자가 누구인지 확인하는 과정인가(authorization) : 사용자에게 자원에 접근할 수 있는 권한 부여 인증에 성공하면 서버는 클라이언트에 토큰을 제공한다. 여기서 토큰은 넓은 의미로 ‘신원 증명 수단’으로 이해하면 된다.인증(Authentication)세션 기반 (Stateful)서버가 세션 ID 발급실제 인증 정보는 세션 ID를 key로 한 서버 측 저장소(메모리, DB, Redis 등)에 저장클라이언트는 세션 ID만 가지고 요청하고, 서버는 매 요청마다 세션 저장소를 조회해 사용자를 확인세션 정보를 저장소에 저장하기 때문에 작지만 용량을 차지한다. (사용자가..

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

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

보호된 글

비밀번호를 입력하세요