최근의 모든 스포츠 약물 스캔들로 인해 요즘 좋은 롤 모델을 찾기가 어렵습니다. 하지만 롤 모델이 도메인 모델(비즈니스 엔티티의 객체 모델)이라면 MVP가 되기 위해 속임수를 쓸 필요가 없습니다. Model-View-Presenter를 사용하세요!
Posts for: #Programming
TotT: 인터페이스 테스트하기
부족함에 대한 지속적인 느낌을 억누르기 위해, 당신은 공학 분야의 진정한 통과 의례인 자신만의 행성 파괴 광선총을 만드는 데 시간을 들였습니다. 축하합니다. 그리고 당신은 매우 자랑스러워했지만, 그 다음 주말에 이워크 해설이 포함된 한정판 스타워즈 삼부작을 구매하여 데스스타가 알데라안을 파괴하는 것을 보고 잘못된 결정을 내렸다는 것을 깨달았습니다. 당신의 행성 파괴 광선총은 파란색 레이저를 가지고 있지만, 녹색 레이저가 훨씬 더 멋있어 보입니다. 하지만 라디오 셕에 가서 기존의 파괴 광선총에 끼울 수 있는 녹색 레이저를 사는 것은 간단한 문제가 아닙니다. 녹색 레이저를 가지려면 처음부터 다른 행성 파괴 광선총을 만들어야 할 것입니다. 두 개의 파괴 광선총을 소유하는 것이 하나보다 이웃들의 질투심을 더 자극할 것이므로 당신에게는 괜찮습니다.
TotT: “Static Cling” 퇴치하기
당신은 페어 프로그래밍을 하고 있고, 많은 뛰어난 사람들이 그렇듯이 소리 내어 말하고 있습니다. "목을 만들고, 주입하고, 테스트를 다시 실행할 거야. 통과해야 하는데… 젠장!" 당신의 파트너는 예외 "ConnectionFactory not initialized"를 발견합니다. "뭐?" 그녀는 말합니다. "뭔가가 데이터베이스를 사용하고 있어? 젠장, 이건 작은 테스트여야 했는데."
TotT: 의지할 수 있는 친구들
테스트 환경에서 사용하기 너무 어렵거나 느린 것에 의존하는 코드를 테스트하고 싶을 때는, 의존성 대신 테스트 더블을 사용하세요.
TotT: 싱글턴을 피하기 위한 의존성 주입 사용하기
싱글턴을 사용하는 코드를 테스트하기는 어렵습니다. 일반적으로 테스트하려는 코드는 싱글턴 인스턴스와 강력하게 결합되어 있습니다. 싱글턴 객체가 종종 정적 이니셜라이저나 정적 메서드에서 생성되기 때문에 싱글턴 객체의 생성을 제어할 수 없습니다. 결과적으로 싱글턴 인스턴스의 동작을 목킹(mocking)할 수도 없습니다.
TotT: 시간은 무작위
메서드의 입력값을 명확하게 식별할 수 없을 때 어떻게 제대로 테스트할 수 있을까요?
TotT: 너무 많은 테스트
영화 아마데우스에서 오스트리아 황제는 모차르트의 음악에 “음표가 너무 많다”고 비판합니다. 하나의 기능을 테스트하는 데 “너무 많은” 테스트는 몇 개일까요?
TotT: 스트룹 효과
스트룹 효과는 대략적으로 레이블(이 경우 단어)이 내용(색깔)과 같은 영역에 있고 의미가 충돌할 때, 레이블이 내용을 이해하는 능력에 방해가 된다는 것을 의미합니다.
TotT: 스텁이 단위 테스트 속도를 높여줍니다
Michael Feathers는 좋은 단위 테스트의 특징을 ‘빠르게 실행되고 문제 위치를 파악하는 데 도움이 된다’ 고 정의합니다. 코드에 데이터베이스 액세스, 다른 서버와의 통신, 시간 의존성 등이 있을 때는 이를 달성하기 어렵습니다.
번역글: ExecutorService invokeAll 과 가상 스레드 사용하기
invokeAll 은 ExecutorService 의 메서드로, 여러 제출된 작업을 동시에 시작합니다. ExecutorService 는 스레드 풀에서 플랫폼 스레드를 사용하여 제출된 작업을 실행합니다. 이 비싸고 리소스 집약적인 플랫폼 스레드를 사용하는 대신, 가상 스레드를 사용하여 ExecutorService 에 제출된 작업을 실행할 수도 있습니다. 이 글에서는 invokeAll 메서드를 가상 스레드 (virtual threads), 구조화된 동시성 (structured concurrency) 및 플랫폼 스레드 (platform threads) 와 함께 구현하는 모든 방법을 다룰 것입니다.
TotT: 화장실에서 테스팅 (Testing on the Toilet) 소개
저희는 테스팅에 대한 열정을 전 세계에 전파하고, 여러분과 여러분의 회사에 이러한 중요한 트릭과 기술을 재미있고 쉽게 교육하는 방법을 제공하기 위해 이 비밀 병기를 전 세계와 공유하기로 결정했습니다.
번역글: Go의 동시성: 심층 분석
Go(종종 Golang으로 불림)는 처음부터 동시성을 염두에 두고 설계되었습니다. 이 언어는 고루틴, 채널 및 강력한 동시성 모델을 도입하여 다른 많은 언어에서 발견되는 전통적인 접근 방식에 비해 동시성 프로그램을 더 간단하고 직관적으로 작성할 수 있게 했습니다.
TotT: 더 나은 테스트를 위한 가짜(Fake) 사용하기
이 기사는 Google Testing on the Toilet(TotT) 에피소드에서 각색되었습니다.
번역글: 헤르메틱 서버 (Hermetic Servers)
TotT: 목(Mock)을 과도하게 사용하지 마세요
이 글은 Google Testing on the Toilet (TotT) 에피소드에서 각색되었습니다.
번역글: Golang 공동 창시자 Rob Pike: Go가 잘한 것과 잘못한 것
훌륭한 표준 라이브러리와 패키징 시스템, 일등석 동시성 지원, 그리고 가독성에 대한 집중은 Golang 개발자들이 만족하는 특성 중 일부입니다.
번역글: 분산 시스템 개발자를 위한 기도
… 스택 꼭대기에 서서 아래를 내려다보니, 그동안 제가 보아온 두 가지 유형 — 그리고 어쩌면 세 번째 유형 — 의 소프트웨어 엔지니어링에 대해 생각하게 되었습니다.
번역글: Java 23: 성능 및 생산성 향상 (2024년 9월)
Java 23은 성능 및 개발자 생산성 향상 추세를 이어갑니다. 기본 타입을 지원하는 패턴 매칭을 개선하고, 더 안전한 메모리 관리를 위해 Scoped Values를 도입하며, 구조화된 API를 통해 동시성을 단순화합니다. Markdown 문서화는 개발자 경험을 개선하고, ZGC가 기본 컬렉터가 되어 더 나은 성능과 낮은 지연 시간을 보장합니다.
번역글: AI를 이용한 게임 디컴파일 개발 여정
이 글에서는 제가 오래된 게임을 디컴파일하기 위해 AI를 사용한 개발 여정을 공유하고, 이 재미있는 분야에서의 개인적인 연구를 탐색해 보려고 합니다!
번역글: 지금 바로 사용할 수 있는 최고의 AI 코딩 도구
Cursor와 Claude Code는 시간을 투자할 만한 가치가 있는 옵션 중 일부입니다.