클래스의 본질은 "현실의 개념을 상태와 행위로 모델링하고, 그 내부를 보호하는 캡슐"입니다.이 글에서는 자바 클래스의 문법 요소 하나하나를 단순 암기가 아닌 설계 관점에서 설명하겠습니다."이 문법이 왜 존재하는가"를 이해하면, 코드를 작성할 때 더 나은 판단을 내릴 수 있습니다.1. 클래스와 객체: 설계도와 실체의 관계객체 지향 프로그래밍의 출발점은 클래스와 객체의 관계를 정확히 이해하는 것입니다. 이 관계를 명확히 잡아야 이후의 모든 문법이 자연스럽게 연결됩니다.1-1. 클래스: 설계도클래스는 "이런 종류의 것은 이런 상태를 갖고, 이런 행위를 할 수 있다"고 정의하는 틀입니다.클래스 자체는 메모리에 실체를 만들지 않습니다. 건축의 도면이 집 그 자체가 아닌 것과 같습니다. 📄 클래스 정의 — 기본 ..
"둘 다 구현 못 하는 거 아닌가요?""추상 클래스와 인터페이스의 차이가 뭔가요?"라고 물으면, 대부분 이렇게 답합니다."추상 클래스는 일부 구현이 가능하고, 인터페이스는 구현이 없는 것 아닌가요?" 틀린 말은 아니지만, 이 대답은문법 수준의 차이만 설명할 뿐 설계 의도의 차이를 전혀 담고 있지 않습니다.이 글에서는 문법 차이를 넘어, 두 개념이 객체지향 설계에서 어떤 역할을 하고, 어떤 사고방식으로 선택해야 하는지를 하나씩 짚어 보겠습니다. 1. 추상 클래스 "is-a" vs 인터페이스 "can-do"1-1. 추상 클래스: "너는 ~이다" (is-a)추상 클래스의 본질은 분류(classification) 입니다. "이 객체가 본질적으로 무엇인가?"를 정의합니다.예를 들어, Dog, Cat, Bird는 ..
문자열 처리 클래스 String, StringBuilder, StringBuffer에 대해 깊이 있게 파헤쳐 보겠습니다.개발자분들이 반복문 내에서 무심코 + 연산자로 문자열을 이어 붙이는 경우를 자주 봅니다.트래픽이 몰리는 운영 환경에서는 이런 작은 습관이 시스템에 치명적인 OutOfMemoryError나 심각한 GC(Garbage Collection) 병목을 유발할 수 있습니다.단순히 "문자열을 더할 때는 StringBuilder를 써라"라는 표면적인 암기식 지식을 넘어, JVM 메모리 구조, 바이트코드 레벨의 컴파일러 최적화, 그리고 멀티스레드 환경의 동기화 메커니즘까지, 아키텍트의 시각에서 이 세 가지 클래스의 근본적인 차이를 확인해 보겠습니다. 1. String: 불변의 미학과 함정Java에서 S..
Java를 공부하거나 코딩 테스트, 실무 API 처리, 문자열 가공을 하다 보면 자주 찾게 되는 것이 바로 기본 메소드입니다.특히 아래처럼 자주 막히게 됩니다.문자열 자르기, 포함 여부 확인은 어떤 메소드를 써야 하는가?List 정렬, 중복 제거, 부분 추출은 어떻게 하는가?Map에서 키 존재 여부 확인이나 기본값 처리는 어떻게 하는가?Arrays, Math, 형 변환 관련 메소드 중 실무에서 자주 쓰는 것은 무엇인가?Set, Stream, StringBuilder, Comparator 같은 문법/도구는 언제 꺼내 써야 하는가?기존처럼 메소드를 무작정 나열해 두면 한 번 훑고 끝나기 쉽습니다. 그래서 이번 글은 실제로 자주 찾는 상황 기준으로, String → 형 변환 → 배열/리스트 → Map → Qu..
