[JAVA] Stack 구현 & Stack Class의 문제점 (feat. Deque)
·
Language/Java
📚Java Collection: Stack & DequeProblem Source: GitHub - Sw_Pilot_Java (Chapter 2 / Step 2 - 3) LIFO 구조인 스택의 개념과 사용법, 그리고 현대적인 대체제인 Deque를 알아봅니다.스택(Stack)은 '쌓다', '더미'라는 뜻을 가지고 있습니다. 식당에 쌓여 있는 접시 더미나, 총기의 탄창을 떠올리면 이해하기 쉽습니다. 가장 마지막에 들어간 데이터가 가장 먼저 나오는 LIFO(Last In First Out, 후입선출) 구조를 가지고 있으며, 이는 먼저 들어간 데이터가 먼저 나오는 Queue(FIFO)와 정반대되는 개념입니다. 1. 스택(Stack)의 구조와 특징LIFO 구조: 나중에 넣은(Push) 데이터가 먼저 나옵..
[JAVA] Getter/Setter 이중성 & 문제점 Refactoring
·
Language/Java
☕Java Study: Refactoring Getter/Setter이 포스팅은 Getter/Setter의 남용을 막고, 객체지향적인 설계를 하는 방법을 정리한 글입니다.자바를 처음 배울 때, 우리는 클래스를 만들고 습관적으로 모든 필드에 대해Getter와 Setter를 생성하곤 합니다. IDE가 단축키 한 번이면 만들어주니 너무나 자연스럽죠.하지만 "이게 정말 객체지향적인가?"라는 의문을 가져본 적 있으신가요?단순히 값을 넣고 빼기만 한다면 그건 객체가 아니라 데이터 주머니에 불과할지도 모릅니다. 오늘은 무분별한 Getter/Setter 사용이 왜 문제인지, 그리고 이를 해결하기 위한 진짜 객체지향 설계 방법(Rich Domain Model, VO 등)에 대해 정리해보겠습니다. 1. Getter/Set..
[JAVA] 접근제한자 & 캡슐화
·
Language/Java
🔒Java Concept: Access Modifier & Encapsulation접근제한자와 캡슐화, 그리고 더 나은 설계를 위한 메서드 활용법을 다룹니다.자바 프로그래밍을 하다 보면 public, private 같은 단어들을 매일 마주하게 됩니다. 처음에는 "그냥 다 public으로 하면 편하지 않나?"라고 생각할 수 있습니다. 하지만 이 접근제한자(Access Modifier)야말로 객체 지향의 핵심인 보안과 무결성을 지키는 문지기 역할을 합니다. 오늘은 접근제한자의 종류와 범위부터, Getter/Setter의 장단점, 그리고 최근 실무에서 Getter/Setter 대신 선호하는 "의미 있는 메서드 설계"까지 완벽하게 정리해 보겠습니다. 1. 접근제한자 완벽 정리 (Scope)접근 제한자는 "누..
[JAVA] 객체 지향 프로그래밍 4대 원칙
·
Language/Java
☕Java Concept: OOP 4 Principles & Methods이 포스팅은 객체 지향의 4대 원칙과 관련 문법, 사용 이유를 정리한 글입니다.자바(Java)를 공부하다 보면 숨 쉬듯이 듣게 되는 단어가 있습니다. 바로 객체 지향 프로그래밍(OOP, Object-Oriented Programming)입니다. "그냥 클래스 만들고 객체 생성하면 되는 거 아냐?"라고 생각하기 쉽지만, 실무에서 유지보수하기 좋은 코드를 짜기 위해서는 OOP의 4가지 핵심 원칙을 제대로 이해하고 있어야 합니다. 오늘은 캡슐화, 상속, 다형성, 추상화가 도대체 왜 필요하며, 자바에서 이를 구현하기 위해 어떤 키워드와 메서드를 사용하는지 완벽하게 파헤쳐 보겠습니다. 캡슐화 (Encapsulation)캡슐화는 데이터(변수)..
[JAVA] String vs StringBuilder vs StringBuffer 비교 정리 (왜 문자열을 다루는 클래스가 3개나 있을까?)
·
Language/Java
자바를 처음 공부할 때 가장 먼저 마주치는 혼란 중 하나가 바로 문자열 처리입니다. "그냥 String 쓰면 되는 거 아니야?"라고 생각하다가도, 조금만 깊이 들어가면 StringBuilder, StringBuffer 같은 녀석들이 튀어나옵니다. 심지어 면접 단골 질문이기도 하죠. 도대체 왜 자바는 문자열을 다루는 클래스를 3개나 만들어 뒀을까요? 단순히 암기하는 것이 아니라, "메모리 구조와 스레드 안전성(Thread Safety)"이라는 내부 원리를 통해 이들의 존재 이유를 알아봅시다!1. 기본 String 사용 보통 우리는 문자열을 합칠 때 직관적으로 + 연산자를 사용합니다.public class StringExample { public static void main(String[] args)..