1. 추상화란?추상화(Abstraction)는 불필요한 구현 세부사항은 감추고, 핵심적인 개념이나 행위만을 정의하여 표현하는 객체지향 설계 원칙이다.즉, "무엇을 할 수 있는가"에 집중하고, "어떻게 구현할 것인가"는 감춘다는 철학 📌Java에서의 예시List 인터페이스만 알아도 ArrayList나 LinkedList의 구체 구현을 몰라도 사용 할 수 있음이처럼 추상화를 통해 사용과 구현을 분리하고, 유연한 설계를 할 수 있다. 📌 예시로 이해하기"TV 리모컨"은 전원을 켜고 채널을 바꿀 수 있음 (기능 = 추상화된 인터페이스)내부적으로 무슨 회로로 동작하는지는 알 필요 없음 (구현 = 캡슐화)public interface RemoteControl { void powerOn(); void ..
1. 다형성이란?다형성(Polymorphism)은 하나의 인터페이스(또는 부모 타입)를 통해 다양한 구현(자식 클래스)의 동작을 수행할 수 있는 객체지향의 핵심 원칙이다. 간단히 말하면 : "같은 메시지를 보냈을 때, 객체가 각자 다른 방식으로 응답하는 능력" 2. 왜 다형성이 중요한가? 📌 유지보수성과 확장성 향상새로운 기능 추가 시 기존 코드 수정 없이 확장 가능 (OCP 원칙 실현)고수준 모듈이 저수준 구현이 아닌 인터페잇에 의존하게 된다 (DIP 원칙 실현)다양한 객체를 하나의 타입으로 다룰 수 있음📌 의존성 분리 (Decoupling)클라이언트 코드는 인터페이스만 알고 구체 구현은 모름 -> 유연한 설계 가능📌 테스트 용이성인터페이스 덕분에 Mock 객체를 쉽게 주입하여 단위 테스트가 가능..
1. 상속이란?상속(Inheritance)은 기존 클래스의 속성과 동작(메서드)을 자식 클래스가 물려받아 사용하는 객체지향의 핵심 기능이다.즉, 부모 클래스의 기능을 확장하거나 재사용하기 위해 자식 클래스가 상속을 받는 것이다.public class Animal { public void sound() { Systme.out.println("동물이 소리를 냅니다."); }}public class Dog extends Animal { @Override public void sound() { System.out.println("멍멍!"); }} 2. 상속의 목적목적설명코드 재사용중복 제거, 공통 로직 분리계층적 관계 표현일반 -> 구체 구조 표현(is-a 관계)확장성 ..
1. 캡슐화란?"캡슐화(Encapsulation)는 객체의 내부 구현을 숨기고, 외부에서는 정해진 방법(인터페이스)으로만 접근하게 하는 원칙"이다.즉, "데이터 + 행위"를 하나의 단위로 묶고, 외부에서 그 데이터에 직접 접근하지 못하도록 막는 것이 핵심이다.2. 왜 캡슐화가 중요한가? 🎯 복잡성 감춤 (Information Hiding)내부 로직이 바뀌어도 외부 인터페이스는 그대로 -> 변경에 강한 구조사용자는 "무엇을 한다"만 알고 "어떻게"는 몰라도 됨을 의미 🎯 무결성 보장객체 상태를 외부에서 직접 조작하지 못하게 하여 비정상 상태 방지 🎯 테스트/디버깅/유지보수 용이코드가 어디에서 어떻게 바뀌는지 예측 가능3. 접근 제어자와 캡슐화: 캡슐화는 대부분 접근 제어자(Access Modifie..
자격증 공부를 위해 객체지향 프로그래밍에 대해 단순 암기만 했었는데 이번 글을 통해 해당 패러다임이 왜 필요한지 그리고 특징은 무엇인지를 알아보면서 제대로 학습해보고자 한다.과거를 알면 현재를 알고 현재를 알면 미래를 알 수 있듯이 먼저, 객체지향 프로그래밍을 이해하기전에 객체지향 프로그래밍이 등장하기 이전의 패러다임을 이해할 필요가 있다. 1. 순차적 프로그래밍정의한 기능의 흐름에 따라 순서대로 동작을 추가하며 프로그램을 완성하는 방식간단한 프로그램이라면 흐름이 눈으로 보이기 때문에 매우 직관적이지만 프로그램의 규모가 커지면 곤란하게 된다.(ex 스파게티 코드)2. 절차적 프로그래밍'절차'는 함수를 의미한다. 따라서 반복되는 동작을 함수 및 프로시저 형태로 모듈화하는 방식반복 동작을 모듈화하여 코드르 ..