GitHub

https://github.com/Choidongjun0830

분류 전체보기 476

SOLID 원칙

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

공부 2025.03.26

우테코에서의 6주차 WIL

[Facts]아스키 코드를 이용해 알파벳 숫자  2. 인터페이스의 default 메서드 -> 그러면 추상 클래스랑 머가 다르지?  [Feelings+Finding] 아스키 코드를 이용해 알파벳 숫자  저는 장기 좌표를 뷰에서 x는 알파벳으로, y를 숫자로 사용합니다. 도메인에서 사용하기 위해서는 x를 숫자로 바꿔주어야 하는데요. 페어가 아스키 코드를 이용해서 뚝딱하고 숫자로 바꾸어주었습니다. 알파벳 -> 숫자 ```int x = charArray[0] - 'a'; ```charArray에는 a1, c8처럼 사용자가 입력한 좌표가 들어있습니다.java에서 char - char는 아스키 값으로 계산해서 저 로직이 가능한 것입니다.그래서 a는 0, b는 1 ..로 나오게 됩니다. 숫자 -> 알파벳 ```S..

우테코 2025.03.25

[프로그래머스] Lv2. 완전범죄

문제 설명A도둑과 B도둑이 팀을 이루어 모든 물건을 훔치려고 합니다. 단, 각 도둑이 물건을 훔칠 때 남기는 흔적이 누적되면 경찰에 붙잡히기 때문에, 두 도둑 중 누구도 경찰에 붙잡히지 않도록 흔적을 최소화해야 합니다.물건을 훔칠 때 조건은 아래와 같습니다.물건 i를 훔칠 때,A도둑이 훔치면 info[i][0]개의 A에 대한 흔적을 남깁니다.B도둑이 훔치면 info[i][1]개의 B에 대한 흔적을 남깁니다.각 물건에 대해 A도둑과 B도둑이 남기는 흔적의 개수는 1 이상 3 이하입니다.경찰에 붙잡히는 조건은 아래와 같습니다.A도둑은 자신이 남긴 흔적의 누적 개수가 n개 이상이면 경찰에 붙잡힙니다.B도둑은 자신이 남긴 흔적의 누적 개수가 m개 이상이면 경찰에 붙잡힙니다.각 물건을 훔칠 때 생기는 흔적에 대한..

우테코에서의 5주차 WIL

[Facts]템플릿 메서드 패턴과 전략 패턴동적 메서드 탐색[Feelings+Finding]템플릿 메서드 패턴과 전략 패턴템플릿 메서드 패턴 (상속 활용)  • 상위 클래스에서 공통 구조(알고리즘)를 정의하고, 하위 클래스에서 세부 동작을 구현하는 패턴.  • Hook 메서드를 활용하면 알고리즘의 흐름을 제어 가능.  • 장점: 코드 중복 제거, 유지보수 용이  • 단점: 부모 클래스 변경 시 영향이 큼 전략 패턴 (합성 활용)  • 알고리즘을 독립적인 Strategy 인터페이스로 분리하고, 필요할 때 동적으로 변경하는 패턴.  • 클라이언트가 원하는 전략을 직접 선택해야 함.  • 장점: 유연성과 확장성 증가, 코드 중복 제거  • 단점: 클라이언트가 각 전략의 차이를 이해해야 함 Dealer와 Pla..

우테코 2025.03.17

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

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

공부 2025.03.16

우테코에서의 4주차 WIL

[Facts]1. 왜 FACTORY를 사용하는지2. 순수한 가공물 (PURE FACBRICATION)3. 역할, 책임, 협력4. 상속과 조합[Feelings+Finding]1. FACTORY생성할 책임을 가지는 곳은 생성 방식을 알아야 하고, new를 통해 특정 구현체에 의존성이 생기게 된다.그래서 생성과 사용을 분리해야 한다. 사용할 때 생성하는 것이 아니라, 객체를 생성할 책임을 클라이언트로 옮겨야 좋다.그런데, 클라이언트에게도 생성할 책임을 주고 싶지 않을 때 FACTORY를 쓰는 것이다.2. 순수한 가공물어떤 행동을 추가하려고 하는데 이 행동을 책임질 만한 마땅한 도메인 개념이 없을 때는 PURE FACBRICATION을 추가예를 들어, 애플리케이션에서 DB 접근을 위한 객체 같은 개념이 이에 해..

우테코 2025.03.09

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

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

공부 2025.03.09

우테코에서의 3주차 WIL

[Facts]1. 테스트 작성 방법2. 객체와 자료구조3. 외부 라이브러리 쓸 때 주의할 점4. Bulider 패턴5. equals()와 hashCode()[Feelings+Finding]1. 테스트 작성 방법Build-Operate-Check 패턴을 적용하여, 중복되는 부분을 메서드로 분리하여 가독성을 높일 수 있다.'테스트 당 assert 하나를 쓰자'가 아닌 '개념당 assert 문을 최소로 줄이고, 테스트 함수마다 한 개념만 테스트하자'가 더 낫다.TDD를 직접 실천해 보고 관련 서적을 읽어보니, 공감되는 부분이 많았다,,2. 객체와 자료구조히로가 추천해준 클린코드 6장을 읽어 보았습니다. 객체와 자료 구조의 차이를 이해라고, 상황에 맞는 방식을 선택하는 것이 중요하다고 느꼈습니당3. 외부 라이브..

우테코 2025.03.06

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
728x90