"둘 다 구현 못 하는 거 아닌가요?""추상 클래스와 인터페이스의 차이가 뭔가요?"라고 물으면, 대부분 이렇게 답합니다."추상 클래스는 일부 구현이 가능하고, 인터페이스는 구현이 없는 것 아닌가요?" 틀린 말은 아니지만, 이 대답은문법 수준의 차이만 설명할 뿐 설계 의도의 차이를 전혀 담고 있지 않습니다.이 글에서는 문법 차이를 넘어, 두 개념이 객체지향 설계에서 어떤 역할을 하고, 어떤 사고방식으로 선택해야 하는지를 하나씩 짚어 보겠습니다. 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..
