GitHub

https://github.com/Choidongjun0830

공부 6

SOLID 원칙

객체지향 프로그래밍이 어렵고, 기준도 잘모르겠어서 우선, SOLID 원칙을 제대로 알아가보려 한다.객체지향 프로그래밍에서 SOLID 원칙을 잘 지키면 깨끗하고, 확장성이 높으며 유지보수성이 높은 코드를 작성할 수 있다.또한, 테스트에도 용이한 코드를 작성할 수 있다.몇주간 객체지향 프로그래밍에 대해 탐구한 결과, 객체지향 프로그래밍의 장점은 재사용할 수 있는 코드, 클래스 간 분명한 역할, 객체 간의 협력으로 구현하는 코드라고 생각한다.객체를 재사용하면서 객체 간의 협력을 구현하면 일관성을 챙길 수 있다. 여기서 말하는 일관성이란, 공통의 목적을 공유할 때, 그것의 구현 방식도 같은 것이다. 일관성없는 코드를 작성했을 때는 하나의 목적을 가지는 여러 정책, 여러 방식에 대해 여러 구현 방식이 나오는 것이..

공부 2025.03.26

템플릿 메서드 패턴 vs 전략 패턴

이번에 shouldDrawMore() 메서드를 효율적으로 구현하는 방법을 고민하면서 템플릿 메서드 패턴과 전략 패턴을 학습했다. 두 패턴 모두 공통된 알고리즘을 효과적으로 관리하고 확장성을 높이는 방법이지만, 사용하는 방식이 다르다. 템플릿 메서드 패턴 (Template Method Pattern) 개념 템플릿 메서드 패턴은 상속을 활용하여 알고리즘의 공통 구조를 상위 클래스에서 정의하고, 하위 클래스에서 세부 동작을 구현하는 방식이다. 구조 • 추상 클래스 (부모) • 알고리즘의 기본 흐름을 정의하는 템플릿 메서드를 제공 • 각 단계에서 호출될 추상 메서드를 선언 • 구현 클래스 (자식) • 부모가 정의한 추상 메서드를 구현하여 세부 동작을 정의 • Hook 메서드 • 템플릿 메서드의 특정 조건을 변경..

공부 2025.03.16

상속과 합성: 코드 재사용과 확장의 방법

프로그래밍에서 코드의 재사용과 확장을 위한 방법으로 상속(Inheritance) 과 합성(Composition) 이 있다. 두 개념 모두 기존 코드를 활용하여 새로운 기능을 추가하거나 확장하는 데 사용되지만, 그 방식과 특징은 상당히 다르다. 이 글에서는 상속과 합성의 차이점과 함께, 상속의 문제점을 합성을 통해 해결하는 방법을 살펴본다.상속(Inheritance)상속은 부모 클래스와 자식 클래스를 연결하여 부모 클래스의 코드를 재사용하는 방법이다. 상속 관계에서는 is-a 관계가 성립하며, 자식 클래스가 부모 클래스를 확장하여 새로운 기능을 추가하거나 재정의할 수 있다.상속의 특징부모 클래스의 코드를 자식 클래스에서 직접 재사용할 수 있다.부모 클래스와 자식 클래스 사이의 의존성이 컴파일 타임에 해결되..

공부 2025.03.09

equals()와 hashCode()의 개념과 관계

equals() 메서드equals() 메서드는 두 객체가 논리적으로 동일한지를 비교하기 위해 사용된다. 기본적으로 Object 클래스의 equals() 메서드는 두 객체의 참조(메모리 주소)가 동일한지를 비교하며, 따라서 == 연산자와 동일한 동작을 한다.그러나, equals() 메서드를 오버라이딩하면 객체의 특정 필드 값을 비교하여 논리적으로 동일한지를 정의할 수 있다.equals() 기본 동작class Person { private String name; public Person(String name) { this.name = name; }}public class Main { public static void main(String[] args) { ..

공부 2025.03.01

단위 테스트

TDD 법칙 세 가지실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다.컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 케이스 유지하기 테스트 코드도 프로덕션 코드만큼 중요하다테스트 코드를 지저분하게 작성하는 것은 테스트를 하지 않는 것보다 더 나쁠 수도 있다. 프로덕션 코드가 진화하면 테스트 코드도 함께 진화해야 하는데, 유지보수하기 어려운 테스트 코드는 결국 방치되거나 삭제될 가능성이 높다.테스트 코드는 단순히 버그를 찾기 위한 것이 아니라, 코드의 유연성, 유지보수성, 재사용성을 높이는 데 중요한 역할을 한다. 테스트가 잘 갖춰져 있다면 코드 변경이 두렵지 않고, 오히려 안심할 수 ..

공부 2025.03.01

객체와 자료 구조의 차이

인터페이스 설계 방식의 차이잘못된 접근 방식public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline();}위 인터페이스는 단순히 데이터를 가져오는 getter 메서드만 제공하며, 내부 데이터를 그대로 노출하는 방식이다.public interface Vehicle { double getPercentFuelRemaining();}반면, 이 인터페이스는 내부 데이터를 숨기고, 필요한 정보만 제공하는 방식이다. 내부 구현을 감춘 채 기능을 제공하는 것이 객체지향적인 접근이다.핵심 원칙데이터를 조회/설정하는 함수를 무분별하게 추가하는 것은 피해야 한다.객체는 데이터를 숨기고, 기능을 제공..

공부 2025.03.01
728x90