2025/06/30 8

캡슐화

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 접근 제어자: 정보 은닉의 핵심 원리객체지향 프로그래밍에서 "캡슐화(encapsulation)"란, 객체의 내부 상태(데이터)를 외부에서 직접 접근하지 못하도록 감추고, 허용된 방식으로만 접근할 수 있게 만드는 정보 은닉(information hiding) 기법입니다.자바에서는 이 캡슐화를 접근 제어자(access modifier)를 통해 구현합니다. 클래스 멤버(필드와 메서드)에 접근을 제한함으로써, 외부로부터의 불필요하거나 위험한 접근을 방지하고, 소프트웨어의 유지보수성과 안정성을 높입니다. 자바의 4가지 접근 제어자접근 제어자클래스 내부같은 패키지다른 패키지의 자식 클래스외부 클래스private✅ ❌ ❌ ❌ (def..

다형성

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다. 객체지향 프로그래밍의 핵심 개념 중 하나인 다형성(Polymorphism)은 같은 이름의 메서드가 상황에 따라 다르게 동작하는 능력을 말합니다. 이 다형성은 크게 두 가지 방식으로 나타납니다:오버라이딩 (Overriding): 상속받은 메서드를 하위 클래스에서 재정의오버로딩 (Overloading): 같은 이름의 메서드를 매개변수의 형태만 다르게 하여 여러 개 정의이 두 개념이 어떻게 다른지, 실제로 어떤 식으로 사용되는지를 코드를 통해 이해해봅시다. 오버라이딩 (Overriding): 상속받은 메서드 재정의public class Animal { public String name; public void show..

is-a 관계, 진짜 맞는 말일까? 상속과 인터페이스의 차이

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 상속은 단순한 ‘계보도’가 아니다 – 재사용과 확장의 개념프로그래밍에서 “상속”이라고 하면 종종 사람들은 사람 간의 혈연 관계를 떠올립니다. 할아버지 → 아버지 → 자식 이런 식의 계보도를 생각하기 쉽죠. 그러나 객체지향 프로그래밍에서 말하는 상속은 그렇게 ‘혈연적 연결’이 아닌, 재사용과 확장의 개념입니다.예를 들어, "포유류"라는 상위 개념 아래 "고래", "박쥐"와 같은 하위 개념들이 나옵니다. 이건 상속이 아닙니다. 포유류는 고래의 부모가 아니니까요. 실제로는 동물이라는 개념을 ‘분류’한 결과일 뿐입니다.객체지향에서의 상속은 다음과 같이 이해하는 것이 더 정확합니다:"상위 클래스의 속성과 기능을 물려받아 하위 클래스..

객체지향에서의 상속

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 프로그래밍 초보자에게 "상속"이라는 개념은 종종 가계도처럼 오해되곤 합니다. 아버지-아들, 할아버지-손자처럼 상속이 마치 가족관계처럼 전해지는 것이라 생각하기 쉽습니다. 그러나 객체지향에서 말하는 상속은 ‘재사용’과 ‘확장’의 개념으로 이해해야 올바릅니다.잘못된 상속의 오해일반적으로 다음과 같은 형태를 상속이라고 생각하기 쉽습니다:할아버지 └─ 아버지 ├─ 아들 └─ 딸이건 객체지향에서의 상속이 아닙니다. 단순한 ‘혈연 관계’는 객체 간 기능 재사용이나 확장과는 전혀 관계가 없습니다. 올바른 상속의 예: 분류도 기반 이해객체지향에서의 상속은 다음과 같이 종류-세부 종류로 나뉘는 분류도 형태에 가깝습니다.동물 ..

static 멤버 vs 인스턴스 멤버

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 클래스 멤버(static 변수/메서드) vs 객체 멤버(인스턴스 변수/메서드)그리고 그것들이 메모리의 어디에 저장되는가? 클래스 멤버 vs 객체 멤버를 구분하는 질문"나이가 어떻게 되나요?"인스턴스(객체) 변수 (개별 객체가 가짐)"제조일자가 어떻게 되나요?"클래스(static) 변수 (모든 객체가 공유)즉, 객체마다 값이 달라지는 정보는 인스턴스 멤버이고,모든 객체가 공유하는 정보는 클래스 멤버(static)입니다. 메모리 구조 설명Mouse 클래스와 인스턴스 3개 (mickey, jerry, mightMouse)각각의 인스턴스(mickey, jerry 등)는 자신의 name, age를 갖고 있음 → 인스턴스 변수반면 c..

추상화와 메모리

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 객체와 클래스의 출발점: 실제 데이터를 기반으로 한 추상화유명한 캐릭터인 "미키마우스"와 "제리"의 속성들을 나열해보겠습니다.속성 항목미키마우스제리성명미키마우스제리국적미국미국나이8775애완동물플루토...여자친구미니마우스null꼬리1개1개.........이런 정보들을 바탕으로 우리는 공통된 속성(Attribute) 과 행위(Method) 를 추출하게 됩니다.예를 들어 둘 다 "달리다", "먹다" 등의 행동을 하고 "성명", "국적", "나이" 같은 속성을 가지고 있죠. 이것이 바로 추상화의 첫 단계입니다. UML 클래스 다이어그램을 통한 논리적/물리적 설계논리적 설계표로 정리된 속성과 행위들을 바탕으로 논리적 설계가 진행됩니..

추상화는 모델링이다

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 프로그래밍 언어가 발전해 온 역사를 보면 점점 인간의 사고방식에 가까워지려는 흐름이라는 것을 알 수 있습니다. 특히 객체 지향 프로그래밍은 인간이 현실을 인식하는 방식을 그대로 코드로 옮겨 놓은 모델입니다. 이 중심에는 바로 “추상화는 모델링이다” 라는 개념이 있습니다. 추상화란 무엇인가?‘추상화(Abstraction)’는 ICT에서 어렵게 느껴지는 용어 중 하나입니다. 그러나 사실 이 개념은 일상적인 의미와도 크게 다르지 않습니다."추상화란 구체적인 것들 중에서 관찰자가 관심 있는 특성만 뽑아 단순화하고 재조합하는 것"즉, 추상화는 불필요한 디테일은 제거하고 본질적인 특성만 남기는 작업입니다.예시피카소의 그림은 실제 모습..

추상화란?

『스프링입문을 위한 자바 객체지향의 원리와 이해』로 공부한 내용을 정리한 글입니다 "추상화"라는 단어의 본래 의미부터 출발컴퓨터 용어는 어려워야 한다는 고정관념을 깨자.'추상화(abstraction)'는 컴퓨터 전공 용어라기보다는 본래 국어사전에도 있는 단어입니다.사전적 정의:"여러 사물에서 공통되거나 핵심적인 속성만 추출해 파악하는 것"즉, 추상화는 "모든 걸 다 보여주는 것"이 아니라 핵심만 보여주기입니다.→ 이는 우리가 일상에서 생각하는 "추상화 그림"의 특징과도 같습니다. 예술에서의 추상화 – 피카소와 이집트 벽화피카소의 추상화피카소가 사람 얼굴을 막 비틀어서 그린 건, 사실을 못 그려서가 아니라그 사람의 느낌과 특징을 강조하기 위한 의도였습니다.즉, "사실의 생략 + 특징의 강조" → 추상화이집..