본문 바로가기

객체지향4

[레벨 1 돌아보기] OOP에서의 정적 메서드 사용 레벨 1 레이싱 카 미션을 수행할 때 저는 아래와 같은 질문을 리뷰어에게 남겼습니다. static 메서드가 메모리를 일반 메서드보다 과하게 사용할 수 있을 것 같은데 static을 최소화하는 것이 좋을까요? 나름대로 좋은 질문이라고 생각했습니다. 정적 메서드는 객체를 생성하지 않고 클래스를 참조하여 메서드를 호출합니다. 그래서 정적 메서드는 사용하는 시점에 메서드 메모리 영역에 올라가는 것이 아니라 컴파일 시점에 정적 할당되어 GC의 대상이 되지 않아 프로그램에 끝날 때 까지 메모리에 유지됩니다. 저는 위와 같은 개념을 갖고 질문을 던졌던 것이죠. 하지만 일반 메서드 또한 메서드 메모리 영역에 할당 되기 때문에 정말 많은 정적 메서드가 존재하지 않는 한 메모리에 큰 차이는 없다고 생각합니다. 하지만 정적.. 2022. 4. 11.
[Java] 의존성 역전 원칙 의존성 역전 원칙에 대해 들어본적 있으신가요? 흔히들 객체지향의 핵심 원칙으로 SOLID를 알고 계실텐데요, 의존성 역전 원칙은 DIP로 객체지향 핵심 원칙의 다섯번째 원칙입니다. 오늘 포스팅에서는 의존성 역전 원칙의 개념에 대해 학습하고 직접 코드를 작성하며 왜 이 원칙을 지켜야 하는가에 대해 몸소 느껴보고자 합니다. DIP DIP는 고수준 모듈을 참조하여 예상치 못한 의존성의 변화를 줄이고자 생겨난 원칙입니다. 여기서 고수준 모듈과 저수준 모듈에 대한 궁금증이 들텐데요. 과연 이 둘은 무슨 의미일까요? 고수준 모듈 상위 수준의 정책으로 하나의 큰 기능이라고 볼 수 있습니다. 간단하게 자바의 Interface를 생각하면 됩니다. 저수준 모듈 고수준 모듈의 기능을 구현하기 위해 필요한 상세 기능. 즉, .. 2022. 3. 7.
[Java] 의존성, 응집도, 결합도를 알아보자 의존성 응집도 결합도 객체 지향 공부를 하게되면 필연적으로 의존성, 응집도, 결합도에 대해 듣게됩니다. 직접 자바 코드로 이 내용들을 학습하고 객체지향 코드를 작성할 때 이들이 왜 중요한지 알아봅시다. 의존성 의존성은 코드레벨에서는 확인할 수 없지만 코드가 실행되는 지점에 객체간 의존관계가 존재하는 경우 이를 동적 의존성으로 분류합니다. 아래 코드를 보겠습니다. public class Developer implements Employee{ @Override public void doWork() { System.out.println("개발자가 일을 합니다."); } } class Designer implements Employee { @Override public void doWork() { System... 2022. 2. 21.
[Java] 인터페이스로 분리하여 객체 테스트하기 level 1 첫 미션으로 프리코스에서 진행한 racingGame 을 페어 프로그래밍으로 구현하는 미션을 받았다. TDD로 구현하라는 미션덕분에 많은 크루들이 Random 값을 테스트하는 방법, System.in을 테스트하는 방법에 대해 궁금증을 품었고 그 중에서도 Random 값에 대한 테스트에 어려움을 겪었던 것 같다. 내 코드와 리뷰 나는 과거 Mockito를 사용한 경험이 있어 Mockito 라이브러리를 가져와 임의의 랜덤값을 제공하는 가짜 객체를 만들어 테스트 했다. MockRandomGenerator Random 값을 가짜로 전달해줄 수 있는 임의의 추상 클래스를 생성하여 상속받아 테스트했다. public abstract class MockRandomGenerator { MockedStatic.. 2022. 2. 13.