본문 바로가기

Develop/Fundmental11

테스트 어떻게 해야 할까...??? 1. 단위 테스트의 목표 가치 있는 테스트만 남기고 나머지는 모두 제거하라. 애플리케이션과 테스트 코드는 모두 자산이 아니라 부채다. 단위 테스트의 목표는 무엇인가? 소프트웨어 프로젝트의 지속 가능한 성장을 가능하게 하는 것이다. 지속 가능하다는 것이 핵심이다. 성공적인 테스트 스위트는 다음과 같다. 개발 주기에 통합되어 있다. 코드베이스에서 가장 중요한 부분만을 대상으로 한다. 2. 단위 테스트란 무엇인가 테스트는 해결하는 데 도움이 되는 문제에 대한 이야기를 들려줘야 하며, 이 이야기는 프로그래머가 아닌 일반 사람들에게 응집도가 높고 의미가 있어야 한다. 테스트 대상 단위는 코드 단위가 아니라 동작 단위다. 따라서 공유 의존성만 테스트 대역으로 대체해야 한다. 최종 사용자에게 의미 있는 결과만 확인해.. 2023. 2. 28.
메모리 매핑 (Memory-mapped file) ※ memory-mapped 파일은 가상 메모리의 일부다. 가상 메모리는 파일 또는 파일과 비슷한 리소스의 일부와 byte 단위로 상관관계가 직접 할당된다. 이 리소스는 일반적으로 디스크에 물리적 존재하는 파일이다. 하지만 디바이스, 공유 메모리, 운영 체제가 file descriptor로 참조할 수 있는 기타 리소스일 수도 있다. 파일과 메모리간 상관관계가 만들어지면, 애플리케이션은 매핑된 부분을 진짜 메모리처럼 사용할 수 있다. ※ memory-mapped 파일의 이점은 특히 대용량 파일에서 사용될 때, I/O 성능이 향상되는 점이다. 메모리 맵이 항상 페이지 크기에(4KiB) 맞춰 정렬되므로, 작은 파일의 경우 memory-mapped 파일은 여유 공간을 낭비할 수 있다. 따라서 5KiB 파일은 8.. 2022. 11. 20.
Decorator pattern (데코레이터 패턴) 데코레이터 패턴(Decorator pattern) 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 될 수 있다. 기존 코드를 수정하지 않고도 데코레이터 패턴을 통해 행동을 확장시킬 수 있다. 구성과 위임을 통해 실행중에 새로운 행동을 추가할 수 있다. Component 실질적인 인스턴스를 컨트롤하는 역할. ConcreteComponent와 Decorator가 구현할 인터페이스. ConcreteComponent Component의 실질적인 인스턴스의 부분으로 책임의 주체. Decorator를 받을 객체. Decorator Decorator를 할 객체의 추상클래스/인터페이스. 즉, 기능 추가를 할 객체는 이 객체를 상속/구.. 2022. 5. 3.
Bridge Pattern(브릿지 패턴) 브리지 패턴(Bridge pattern) 구현(implementation)부에서 추상(abstraction)레이어를 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. 기능과 구현에 대해서 두 개를 별도의 클래스로 구현한다. 두 개의 다른 계층(하나는 추상, 하나는 구현인 서로 다른 계층의 커플링을 약화시키며 협력은 가능하도록 하는 패턴) Abstraction 기능 계층의 최상위 클래스이며 추상 인터페이스를 정의한다. Implementor에 대한 레퍼런스를 유지한다. 구현 부분에 해당하는 클래스를 인터페에스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출한다. RefinedAbstraction Abstraction에 의해 정의한 인터페이스를 확장한다.(extends) 기능 계층에서 새로운 .. 2022. 5. 1.
Adapter Pattern (어댑터 패턴) 어댑터 패턴(Adapter pattern) 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해준다. Client The Client sees only the Target interface.(클라이언트는 Target의 인터페이스만 본다. Target 인터페이스를 사용한다.) Target The Adapter implements the Target interface.(Adapter는 Target 인터페이스를 구현한다. Client가 직접적으로 사용하려고 하는 인터페이스를 정의한다. Adaptee가 지원하길 바라는 인터페이스를 의미.) Adapter Adapter is composed with the .. 2022. 5. 1.
Builder Pattern (빌더 패턴) 빌더패턴 빌더 패턴이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. 코드를 보면서 알아보자. YG형이 아래와 같이 블랙핑크를 만들었다. 생성자를 이용하고 있다. public class YG { public static void main(String[] args) { Idol blankpink = new Idol("Blackpink", LocalDate.of(2016, 8, 8), "hiphop", "YG", Arrays.asList( new Member("jisu", 27), new Member("jenny", 26), new Member("roje", 25), new Member("lisa", 25))); System.out... 2022. 4. 28.
팩토리 패턴(Factory Pattern) 아래는 우리 이수만 형이 BTS와 BlackPink를 만드는 코드입니다. 수만이 형이 Idol 클래스를 이용하고 있군요. public class LeeSooMan { public static void main(String[] args) throws Exception { Idol bts = new Idol("RM", "M"); System.out.println(bts); Idol blackpink = new Idol("제니", "W"); System.out.println(blackpink); } } 구현되어 있는 Idol 클래스 입니다. public class Idol { private String name; private String groupName; public Idol(String name, Str.. 2022. 4. 26.
싱글톤 패턴(Singleton Pattern) 싱글톤(Singleton) 패턴 인스턴스를 오직 한 개만 제공하는 클래스 - 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한 개만 만들어 제공하는 클래스가 필요할 때 사용한다. # Try1 - 단순구현 instance에 static 키워드를 사용하여 생성자를 사용하지 않아도 접근할 수 있게 했다. 생성자를 private 하게 만들어 외부에서 새로운 인스턴스를 만들지 못하게 했다. [-] 만약에 Runtime.instance가 없는 경우, 재생성하지 못한다. [-] Runtime이 lazy initialization 되게 구현하면 성능적으로 더 좋을 것 같다. public class App { public static void .. 2022. 4. 24.
[cmd] 사용중인 포트 PID 찾기(netstat option) 사용중인 포트 PID 찾기 netstat -tnlp usage: netstat [-vWeenNcCF] [] -r netstat {-V|--version|-h|--help} netstat [-vWnNcaeol] [ ...] netstat { [-vWeenNac] -i | [-cnNe] -M | -s [-6tuw] } -r, --route display routing table -i, --interfaces display interface table -g, --groups display multicast group memberships -s, --statistics display networking statistics (like SNMP) -M, --masquerade display masqueraded c.. 2021. 10. 16.
SIGSEGV, SIGABRT 가 뭐지?🤷‍♂️ Signal 기본 개념 & 종류 # 시그널? 리눅스에서는 프로세스끼리 서로 통신할 때 사용. 즉, 특정 프로세스가 다른 프로세스에 메시지를 보낼 때 이용. 사용자가 인터럽트 키를 통해 발생시키는 시그널, 프로세스가 발생시키는 시그널, 하드웨어가 발생시키는 시그널 등 다양함. # signal list 확인 kill -l # signal 보내는 방법 # kill -signal -pid kill -9 1001 # 주요 시그널 1. 프로그램 에러 시그널(SIGFPE, SIGILL, SIGSEGV, SIGBUS, SIGABRT) - 심각한 프로그램 에러가 운영체제나 컴퓨터 자체에 의해 검출되었을 때 발생. - 일반적으로 이 시그널들은 프로그램이 심각하게 깨져있고, 에러가 포함된 그 실행을 계속할 방법이 없음을 말.. 2021. 9. 26.