블록체인이라는 단어는 들어봤지만, 실제로 어떻게 동작하는지 코드로 확인해본 적 있으신가요? Java 블록체인 구현은 암호화 기초부터 분산 원장의 핵심 원리까지 직접 손으로 짚어볼 수 있는 최고의 실습입니다. 이론만으로는 느껴지지 않던 블록체인의 구조가, 코드 한 줄 한 줄을 작성하는 순간 명확하게 눈에 들어옵니다. 이 글에서는 자바만 있으면 누구나 따라 만들 수 있는 미니 블록체인을 단계별로 함께 구현해봅니다. […]
“객체지향이 뭔가요?”라는 면접 질문 앞에서 머릿속이 하얘진 경험이 있으신가요? 자바 객체지향 4대 원칙은 단순히 외워야 하는 개념이 아닙니다. 왜 코드를 클래스로 나누는지, 왜 private을 쓰는지, 왜 인터페이스가 필요한지처럼 실제 코드 설계의 모든 판단 뒤에 이 네 가지 원칙이 자리하고 있습니다. 캡슐화·상속·다형성·추상화 각각의 의미와 동작 원리를 실전 코드와 함께 처음부터 끝까지 완벽하게 정리합니다. 목차 1. 객체지향 프로그래밍이란 무엇인가: […]
final이라는 단어는 “마지막”, “변경 불가”라는 의미를 담고 있습니다. 그런데 자바에서 자바 final 키워드는 붙는 위치에 따라 완전히 다른 세 가지 의미로 작동합니다. 변수에 붙이면 재할당을 막고, 메서드에 붙이면 오버라이딩을 차단하고, 클래스에 붙이면 상속 자체를 금지합니다. 단순히 “변경 못 하게 하는 키워드”로만 알고 있다면 불변 객체 설계, 람다에서의 effectively final, String이 왜 final 클래스인지 같은 핵심 개념에서 막히게 […]
public static void main(String[] args) — 자바를 처음 배우는 날부터 매일 쓰지만, 왜 static이 붙어야 하는지 제대로 설명하는 사람은 생각보다 많지 않습니다. 자바 static 키워드는 단순히 “객체 없이 호출하는 것”이 아닙니다. 클래스가 JVM에 로딩되는 순간부터 메모리에 올라가 모든 인스턴스가 공유하는, 자바의 메모리 관리 핵심 메커니즘입니다. 이 글에서는 static이 JVM 메모리 어느 영역에 자리 잡는지부터 변수·메서드·블록·내부 클래스까지 각 쓰임새별 동작 […]
자바 개발을 하다 보면 IOException은 반드시 try-catch로 감싸야 하는데, NullPointerException은 왜 그냥 내버려 둬도 컴파일이 될까요? 이 차이의 뿌리에 Checked Exception과 Unchecked Exception의 차이가 있습니다. 이 개념은 단순한 문법 지식을 넘어, 예외를 어떻게 설계하고 어디서 처리해야 하는지를 결정하는 자바 개발의 핵심 철학입니다. 이 글에서는 계층 구조, 컴파일 시점 동작, 실전 코드, 스프링 적용 사례, 커스텀 예외 설계 원칙까지 […]
데이터를 저장하거나 네트워크로 전송할 때, 직렬화와 역직렬화라는 단어를 반드시 마주치게 됩니다. 처음 들으면 낯설지만, 사실 우리가 매일 사용하는 로그인 세션 유지·API 통신·파일 저장 모두 이 원리 위에서 작동합니다. 이 글에서는 개념의 본질부터 자바 코드 예제, 보안 주의사항, 실전 포맷 선택 기준까지 한 번에 정리합니다. 목차 1. 직렬화와 역직렬화란 무엇인가? 프로그래밍에서 **직렬화(Serialization)**란 메모리에 살아 있는 객체(Object)를, […]
자바 기술 면접을 앞두고 “도대체 어디서부터 공부해야 하지?”라는 막막함, 한 번쯤 느껴보셨을 겁니다. JVM부터 스트림까지 자바의 학습 범위는 방대하지만, 실제 면접에서는 자바 면접 빈출 주제가 뚜렷하게 반복됩니다. 국내외 주요 IT 기업과 스타트업의 자바 개발자 면접 후기, 기술 블로그, 공개된 면접 가이드를 분석하면 OOP 원칙·JVM 구조·가비지 컬렉션·컬렉션 프레임워크·동시성·스트림·제네릭·예외 처리·equals·hashCode·인터페이스와 추상클래스라는 주제가 압도적으로 자주 등장합니다. 이 글에서는 그 […]
자바 개발을 하다 보면 문자열을 다루는 일이 거의 매 순간 발생합니다. 하지만 단순하게 String만 사용하다 보면 어느 순간 프로그램의 속도가 느려지거나 메모리 점유율이 치솟는 경험을 하게 됩니다. 오늘 포스팅에서는 String StringBuilder StringBuffer 차이를 명확히 이해하고, 여러분의 코드를 한 단계 업그레이드할 수 있는 성능 최적화 비결을 공유하겠습니다. 목차 1. String의 본질: 왜 불변(Immutable)인가? 자바에서 String 객체는 […]
자바를 배운 지 얼마 안 됐을 때, “멀티스레드 환경에서 안전한 리스트가 필요하면 Vector를 쓰면 된다”는 말을 들어본 적 있으신가요? 그런데 막상 현업에 나와보면 Vector를 쓰는 코드를 거의 볼 수 없습니다. Java Vector 동기화 방식이 처음에는 훌륭해 보이지만, 실제 서비스 환경에서는 심각한 성능 문제와 구조적 결함을 드러내기 때문입니다. 이 글에서는 왜 Vector가 외면받는지, 그리고 지금 당장 무엇으로 교체해야 […]