첫째 애가 등록한지 올해로 1년이 다되어가는 영어 학원이 있는데믿고 맡길수 있었던 이유가 여러가지 있었지만 그 중 하나가 학원에서 보내주는 리포트 때문이었다. 리포트닷이라는 프로그램을 통해 학원에서 카톡으로 리포트를 보내준다.그러면 카톡에서 바로 열어서 볼 수 있는데,무엇보다 앱 안깔아도 되서 너무 편하다. 학원에서 앱 깔아달라는거 귀찮았는데 이 점이 좋았다,, 리포트라기보단 체계적인 학원 종합 홈페이지로 느껴졌다. 학원이 어떻게 운영하고있는지, 지금 어떤걸 하고있는지 다 나온다.리포트에 학원 공지도 있고 진도도 알려준다.공지의 경우 깜빡하고 놓친적이 많은데, 이전 공지들도 한번에 볼수있다.특히 좋았던게, 아이가 지금 어떤 교재를 풀고 있고, 다음에 어떤 교재를 나가는지도 알 수 있다. ..
메모리 효율성을 높이기 위한 기법.복사할 때 진짜로 복사하지 않고, 쓰기(Write)가 발생할 때만 진짜로 복사하는 방식이다.이 기법을 사용하는 예로 fork()가 있다.fork()는 부모 프로세스가 자식 프로세스를 생성할때 사용하는 시스템콜인데,이때 부모 프로세스 전부를 복사하여 메모리 할당하면 비용이 너무 크므로 가상메모리에 할당하고 부모와 자식이 같은 물리 메모리를 공유하도록 한다. 이후 쓰기(write)가 발생하면 그때 자식 프로세스를 물리메모리에 따로 할당한다.fork()에 대한 설명은 아래글에 담겨있다.https://annyeong46.tistory.com/105 [OS] 프로세스 실행~종료 과정 (fork(), exec(), exit(), wait())목차터미널 프로세스를 예로 들어보자- 시..
Mediator Pattern객체간의 상호작용이 복잡할때 특정객체에 모든 기능을 넣어 한 객체가 모두 관리하는 기능M:N 을 M:1로 변환해주는 방식이다. GUI에서 이 패턴을 많이 사용한다.만약 여러 버튼끼리 서로서로 상호작용을 한다면, 로직이 복잡해지고 가독성도 떨어진다. 따라서 Dialog에 모든 객체를 연결시켜 Dialog와 모든 객체가 상호작용하도록 한다. 패턴 구조Mediator가 중심 인터페이스로, 그 구현체인 ConcreteMediator에 모든 Component의 기능이 모여있다.각 Component는 Mediator에 연결되어있고, Mediator.notify()를 호출하여 다른 컴포넌트와 상호작용한다. Mediator.notify()는 연결된 객체가 무엇인지 분석해서 특정 함수와 연..
State pattern같은 요청이어도 상태에 따라 행위가 달라질때 사용한다. 그 예로 문서 편집 기능이 있다. 문서의 Status는 Draft, Moderation, Published가 존재하고, Status에 따라 수행 가능한 행동이 각기 다르다. 클라이언트는 Document 객체를 생성하여 render()와 publish(), changeState() 만으로 state를 조작한다.render()는 현재 문서의 상태를 표시하는 함수이며, state마다 다른 표시를 하게 된다.publish() : 현재 상태에서 허용하는 게시 행동을 수행한다. state마다 게시가 가능할 수도, 아닐수도 있다우측 하단에 state클래스인 Draft, Moderation, Published 클래스가 있고, 각 sta..
Chain of Responsibility Pattern (CoR)위 그림을 보자. 모든 블럭은 chain으로 연결되어 물 양동이를 전달한다. 만약 자신의 양동이인 경우 양동이를 들이부어 처리한다.여기서 블럭은 handler다. handler가 넘기고 넘기면서, handler 자신이 처리할 수 있으면 처리하는 방식이다. 백엔드에서 한 api 요청에 인증(신원 확인)과 인가(권한 확인) 처리 모두 해야 할때 이 방법이 유용하다.보통 인증을 실패하면 인가를 처리할 필요가 없기 때문이다. 패턴 구조Handler.setNext() 함수는 핸들러 등록시 핸들러 간의 순서를 정하는 역할이며,Handler.handle() 함수는 핸들러를 실행하는 역할이다. - 실행 주체인 Client 클래스1. 모든 핸들러 객체..
생성 패턴(Creational design patterns)객체를 어떻게 만들지에 대한 패턴이다.이 패턴들은 프로그램 전체 구조가 특정 객체의 생성 방식이나 변경에 크게 영향을 받지 않도록 유연성을 제공한다. 구조 패턴(Structural design patterns)여러 객체를 어떻게 결합할지 결합 구조를 정리해놓은 패턴이다.이 패턴들은 클래스나 객체를 결합해 더 크고 유연한 구조를 만드는 방법을 정의한다. 행위 패턴(Behavioral design patterns)여러 객체가 어떻게 협력하고 역할을 나눌지 정리해놓은 패턴이다.하나의 객체가 처리하기 어려운 작업을 여러 객체에 적절히 분산시키면서, 객체 간 결합도를 최소화하는 데 초점을 맞춘다.
Facade Pattern (파사드 패턴)기존 시스템이 복잡할 때, 그 복잡성을 숨기고 단일 인터페이스로 제어하기 위한 방법이다.외부 라이브러리의 경우, 내부 기능이 복잡하므로 클라이언트가 쉽게 이해하고 사용할 수 있도록 인터페이스를 만들어 제공한다. Additional Facade처럼 꼭 하나의 Facade만 만들 필요는 없으며, 클라이언트가 사용할 수도 있고 다른 Facade에서 사용할 수도 있다. Flyweight Pattern (경량 패턴)캐시 개념을 패턴형태로 만들었다고 볼 수 있다.예를들어,게임에서 총알 객체 몇백개를 만드는 대신 하나만 생성 후 재사용하여 메모리를 아낄 수 있다. 패턴 구조 아래는 Flyweight 패턴을 이용해 폰트정보 메모리를 절약한 예시다.FontFactory 클래..
Adapter pattern말 그대로 어댑터 방식을 이용한 패턴이다.즉, 서로 호환되지 않는 인터페이스를 가진 클래스끼리 함께 동작할 수 있도록 한 인터페이스를 다른 인터페이스로 변환해준다. 만약 사용하려는 라이브러리가 JSON으로 반환하는데 내 서비스에서는 XML로 받기를 원하는 경우 서비스와 라이브러리 사이에 어댑터를 넣어 형변환을 한다. 패턴 구조 1. Client가 어댑터 객체를 생성하고, 파라미터로 호환되지 않는 클래스 객체를 넣는다.2. 어댑터 메소드를 호출하면 호환되지 않는 클래스 객체의 메소드가 호출된다.해당 코드에서는 어댑터가 메소드를 호출하는 일밖에 하지 않는데, 실제로는 어댑터가 메소드의 리턴값에 형변환을 하는 등의 동작을 한다. 패턴 구조를 활용한 예시다.클라이언트는 RoundH..