들어가기 전 이 글은 인프런 백기선님의 강의를 공부하며 정리한 글입니다 아이템5. 자원을 직접 명시하지 말고 의존객체 주입을 사용하라. 아이템 5의 핵심을 정리하면 다음과 같다. 사용하는 자원에 따라 동작이 달라지는 클래스는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않다. 의존 객체 주입(Dependency Injection)이란 인스턴스를 생성할 때 필요한 자원을 넘겨주는 방식이다. DI의 변형으로 생성자에 자원 팩터리를 넘겨줄 수 있다. DI를 사용하면 클래스의 유연성, 재사용성, 테스트 용이성을 개선할 수 있다. 모든 경우에 대해서 DI를 사용해야하는 것은 아니다. DI를 사용하면 좋은 경우는 다음과 같다. 자원을 직접 명시해서 사용한다. 사용하는 자원의 종류에 따라 다른 동작을 한다. 위 두..
들어가기 전 이 글은 인프런 백기선님의 강의를 복습하며 작성한 글입니다. 아이템4. 인스턴스화를 막으려거든 private 생성자를 사용하라. 정적 메서드만 담은 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 클래스가 아니다. 따라서 인스턴스 생성을 방지하는 것이 좋다 추상 클래스로 만드는 것으로는 인스턴스화를 막을 수 없다. private 생성자를 추가하면 클래스의 인스턴스화를 막을 수 있다. 생성자에 주석으로 인스턴스화가 불가능한 이유를 설명하는 것이 좋다. 상속을 방지할 때도 같은 방법을 사용할 수 있다. 어플리케이션을 설계할 때, 어떤 경우에는 특정 클래스의 인스턴스를 만들 필요가 없는 경우가 있다. 오히려 인스턴스를 만들지 않는 것을 권장하는 경우도 존재한다. 대표적인 경우는 유틸리티성 클래스..
들어가기 전 이 글은 인프런 백기선님의 Effective Java를 복습하며 작성한 글입니다. Item3 완벽 공략에서 다루었던 내용입니다. 완벽 공략 11. 메서드 참조 메서드 참조(Method Reference)는 메서드 하나만 호출하는 람다 익스프레션을 줄여쓰는 방법을 의미한다. 메서드 참조는 코드를 좀 더 간결하게 사용할 수 있다는 장점이 있다. 메서드 레퍼런스 아래 4 종류가 존재하고, 메서드 레퍼런스 관련 Docs는 아래에서 확인할 수 있다. 스태틱 메서드 레퍼런스 인스턴스 메서드 레퍼런스 임의 객체의 인스턴스 메서드 레퍼런스 생성자 레퍼런스 Docs https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html 메서드 참조..
들어가기 전 이 글은 인프런 백기선님의 이펙티브 자바 강의를 복습하며 작성한 글입니다. 아이템3. 생성자나 열거 타입으로 싱글턴임을 보장하라. 어플리케이션에서 여러 인스턴스가 아닌 하나의 인스턴스만 필요하거나 유지해야하는 경우가 있다. 예를 들면 설정 관련 인스턴스가 있을 수 있다. 어떤 게임을 할 때, 색상 값은 무엇이고 해상도는 무엇인지를 설정할 수 있다. 그런데 설정을 가지고 있는 인스턴스가 여러 개가 있다면 헷갈리거나 오동작할 수 있다. 이런 경우가 있을 수 있기 때문에 어플리케이션에서 특정 인스턴스는 하나만 유지해야하는 경우도 있다. 이런 것을 싱글턴이라고 한다. 싱글턴의 장/단점은 다음과 같다. 장점 : 간결하고 싱글턴임을 API에 드러낼 수 있다. 단점 1. 싱글톤을 사용하는 클라이언트를 테..
들어가기 전 이 글은 파이썬 비동기 라이브러리 Asyncio를 공부하며 작성한 글입니다. 3.10 asyncio의 시작 asyncio의 시작은 간단하게 할 수 있다. 일반적인 방법은 다음과 같다 async def로 main() 함수를 선언한다. asyncio.run()으로 main() 함수를 실행한다. 앞서 공부했던 내용에서 asyncio.run()이 어떻게 동작하는지를 자세히 살펴봤었다. asyncio.run()은 다음 작업을 개발자 대신에 해준다. 이벤트 루프를 하나 만들고, 전달받은 코루틴의 실행을 예약한다. run_until_complete()를 이용해서 예약한 코루틴이 끝날 때 까지 기다린다. 코루틴의 실행이 끝나면, 아직 보류 중인 모든 Task 객체를 수집한다. 보류중인 모든 Task에 ta..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.