Java 18

[Java] 다형성과 추상 클래스: if문의 늪에서 탈출하기

반복되는 instanceof 검사를 없애고, 확장 가능한 코드를 만드는 법Date: 2026-01-21Environment: Windows 11, VS Code, JDK 17Topic: Polymorphism, Abstract Class, Dynamic BindingPhase 1: 리모컨이 너무 많아 (Bad Code)최신 스마트 홈 시스템을 개발한다고 가정해보자. TV, 에어컨, 공기청정기 등 수많은 가전제품(Device)을 한 번에 제어해야 한다. 하지만 다형성을 모르는 개발자는 제품마다 제각각인 메서드 이름을 사용한다.// 규격이 없는 혼란스러운 상태class TV { void turnOnTV() { System.out.println("TV 켜짐"); }}class AirCon { voi..

Dev Study/Java 2026.01.21

[Java] 책임은 누구에게 있는가: 상속과 super의 본질

Date: 2026-01-21Environment: Windows 11, VS Code, JDK 17Topic: Java Inheritance, super, Object InitializationPhase 1: 파편화된 책임 (Bad Code)쇼핑몰 시스템을 만든다고 가정해보자. 도서(Book), 앨범(Album), 영화(Movie) 등 다양한 상품이 존재한다. 상속 개념 없이 각각의 클래스를 만들면 다음과 같은 비효율의 지옥이 시작된다.// 유지보수의 악몽: 가격 정책 하나 바꾸려면 3개 파일을 다 열어야 한다.class Book { String name; int price; String author; // Book만의 특징}class Album { String name; // 중..

Dev Study/Java 2026.01.21

[Java] 객체지향 설계와 메모리 구조: 싱글턴, 빌더 패턴, 그리고 불변성

접근 제어자부터 메모리 구조까지, 견고한 서버를 지탱하는 설계 원칙Environment: Windows 11, VS Code, Antigravity, JDK 171. 파편화된 데이터 관리의 위험성게임 서버를 개발한다고 가정해보자. 유저의 HP나 레벨 같은 민감한 데이터가 보호받지 못하고 있다면 어떤 일이 벌어질까? 누구나 public 변수에 접근해 값을 조작할 수 있다면, 이는 버그가 아니라 보안 사고다.Open Field (Bad Case)아래 코드는 모든 필드가 public으로 열려 있어 무결성이 깨지기 쉬운 상태다.public class GameCharacter { public String name; public int hp; public int level;}// 사용부: 누구나 데..

Dev Study/Java 2026.01.15

[Java] 절차지향의 한계와 객체지향의 필요성

목표자바의 문법적 요소(Class, Constructor, Static)가 왜 만들어졌는지 코드를 통해 역추적한다. 불편한 코드를 먼저 작성해보고, 이를 개선하는 과정에서 자연스럽게 객체지향의 필요성을 납득하는 것이 목표다.1. 데이터가 따로 노는 문제 (Class의 필요성)쇼핑몰에서 상품 정보를 관리하는 기능을 구현한다고 가정해보자. 클래스를 배우기 전에는 보통 데이터를 배열에 담아서 관리했다.Before: 배열을 이용한 관리public class ShopMain { public static void main(String[] args) { // 상품 이름과 가격을 각각 다른 배열에 저장 String[] productNames = {"Laptop", "Mouse", "Key..

Dev Study/Java 2026.01.12

[Java] 자바 배열 정리: 메모리 구조, 깊은 복사, 2차원 배열

자바 배열 학습 내용 중 핵심인 메모리 구조, 복사(Shallow vs Deep), 2차원 배열에 대해 정리함.1. 목표 (Goal)자바 배열의 Memory 구조(Stack vs Heap)를 이해한다.얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)의 차이를 명확히 구분한다.2차원 배열의 선언 방식과 메모리 적재 형태를 파악한다.2. 환경 (Environment)OS: Windows 11JDK: OpenJDK 17IDE: VS Code3. 개념 및 코드 분석1) 배열의 메모리 구조자바에서 배열은 참조 타입(Reference Type)임. 변수 자체는 Stack 영역에 생성되지만, 실제 데이터가 담긴 배열 객체는 Heap 영역에 생성됨.int[] arr = new int[] { 10, 2..

Dev Study/Java 2026.01.09

[Java] 변수, 연산자, 그리고 제어문

목표: Java의 변수 작명 규칙, 데이터 타입 변환(Casting), 연산자, 그리고 제어문(조건문/반복문)의 동작 원리를 이해하고 코드로 검증한다. 환경 (Environment)OS: Windows 11JDK: Oracle JDK 17IDE: VS Code (Extension Pack for Java) 1. 변수 (Variable)1-1. 작명 규칙 (Naming Convention)Java는 변수명 작성 시 엄격한 규칙과 관례를 따른다. 특히 camelCase(합성어의 두 번째 단어 첫 글자 대문자) 사용이 일반적이다.가능: age, Age (대소문자 구분), age123, $age, age_123불가능: 123age (숫자 시작 불가), int (예약어 불가)비권장: 나이 (한글 사용 가능하나 지..

Dev Study/Java 2026.01.06

[VS Code & Antigravity] Java & Spring Boot 개발을 위한 Extension 3선

목표: Antigravity(VS Code)를 단순 에디터가 아닌 강력한 Java/Spring/DB 개발 통합 환경으로 만들기 위해 필수 확장 3대장을 설치한다. 1. Java 개발의 핵심: Extension Pack for JavaMicrosoft에서 제공하는 Java 개발 필수 패키지 모음이다. 이 패키지 하나로 JDK 연결, 디버깅, 빌드 도구(Maven/Gradle) 지원이 모두 해결된다.설치 방법: 확장 마켓플레이스에서 Extension Pack for Java 검색 후 Install 클릭.포함 내역: Language Support (Red Hat), Debugger for Java, IntelliCode 등 6개. 2. 프레임워크 지원: Spring Boot Extension PackSprin..

[Java] Oracle JDK 17 설치 및 환경 변수 설정

목표: Java 개발 학습을 위해 Oracle JDK를 설치하고, 시스템 환경 변수(JAVA_HOME, CLASSPATH, Path)를 단계별로 설정하여 터미널에서 Java 명령어를 사용할 수 있게 한다. 1. Oracle JDK 설치 과정Oracle 공식 홈페이지에서 다운로드한 x64 Installer를 실행하여 설치를 진행한다.1-1. 설치 시작설치 마법사가 시작되는 화면이다. Next를 클릭한다. 1-2. 설치 경로 확인기본 설치 경로(C:\Program Files\Java\jdk-17...)를 확인한다. 변경할 필요가 없다면 Next를 진행한다.설명: 기본 설치 경로 확인 화면 1-3. 설치 완료설치가 성공적으로 완료되었다. Close를 눌러 창을 닫는다.설명: 설치 완료 성공 화면 (Close ..