일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스포일러 주의
- 구글 컨퍼런스
- 리팩터링
- 공부
- 언리얼 5
- 산토리 하이볼
- 언리얼5
- 주식
- 상계9동
- 448일선
- shader
- URP
- 2023 게이밍 인 구글 클라우드
- 224일선
- 작계훈련
- 이득우의 언리얼 프로그래밍 1
- 전주비빔 라이스 버거
- 112일선
- 리팩터링 4장
- 2023 게이밍
- 1일차
- GenAI
- 스즈메의 문단속
- 이득우의 언리얼 프로그래밍1
- unity
- 주식단테
- 2023 Gaming
- 2023 구글 클라우드
- 리팩터링 3장
- JavaScript
- Today
- Total
개발 이야기 안하는 개발자
Good Code, Bad Code (8) _ 코드를 모듈화 하라 본문
의존성 주입의 사용을 고려하라
하드코딩된 의존성은 확장성을 저해한다.
class TestB
{
}
class TestA
{
TestB TestB
}
위 상태에서 TestA 클래스의 기능이 확장되어서 TestB가 아닌 TestC가 필요로 하게 되는 상황이 온다면?
따라서, 위 같은 경우 보단 아래같은 경우를 추천한다.
class TestB : public Test
{
}
class TestA
{
Test Test
TestA(Test InTest)
{
Test = InTest;
}
}
TestA(new TestB());
의존성을 주입하는 방식으로 해야 코드를 확장하기 쉽다.
인터페이스에 의존하라
구체적인 구현에 의존하면 적응성이 제한된다.
따라서 가능한 경우 인터페이스 의존해야 한다.
클래스 상속에 주의하라
기능확장을 위한 마구잡이 상속은 위험하다.
CSV 파일을 읽은 클래스가 있다고 가정한다.
그리고 같은 기능이 많이 겹쳐서 Int 파일을 읽는 클래스를 CSV 파일 클래스를 상속받아 구현한다고 친다.
여기서 문제는 만약에 CSV 파일 클래스가 커져서 새로운 함수들이 추가되었다고 가정하자.
Int 파일 클래스는 제작하지 않은 CSV파일 기능을 사용하게 되는 문제가 생기기도 하고,
Int 파일 클래스는 해당 함수를 재정의해야하는 문제가 생길 수도 있다.
예를 들어, CSV 파일이 없던 GetTextCount() 함수가 새로 추가되었다고 가정하자.
외부에서 해당 Int파일 클래스를 사용하던 개발자가 GetTextCount()를 가져와서 사용하다가 에러가 난다.
에러의 원인은 Int파일 클래스에서는 GetTextCount() 를 사용하기에 재정의가 필요했던 것이다.
이런 문제 때문에 상속에는 주의가 필요한데, 이를 피하기 위해선 구성을 사용하는 것이다.
클래스를 상속받는게 아니라 구성으로 넣는 것이다.
Int 파일 클래스가 외부로 보여지고 싶은 함수들만 보여지게 할 수 있고, 기능들을 CSV 파일 기능을 가져와서 사용할 수도 있다.
정확하게 상속받는 자식 클래스는 부모 클래스와 유사한 점이 많은지 확인해보고 Is-A 의 개념이 부합한지를 고려하며 상속을 사용하여야 한다.
'Book > Good Code, Bad Code' 카테고리의 다른 글
Good Code, Bad Code (9) _ 코드를 재사용하고 일반화할 수 있도록 하라 (0) | 2025.09.27 |
---|---|
Good Code, Bad Code (7) _ 코드를 오용하기 어렵게 만들라 (0) | 2025.09.27 |
Good Code, Bad Code (6) _ 예측 가능한 코드를 작성하라 (0) | 2025.09.24 |
Good Code, Bad Code (5) _ 가독성 높은 코드를 작성하라 (0) | 2025.09.16 |
Good Code, Bad Code (4) _ 오류 (0) | 2025.09.14 |