분류 전체보기

    Java :: 싱글톤(Singleton) 패턴

    Java :: 싱글톤(Singleton) 패턴

    싱글톤(Singleton) 패턴 클래스의 인스턴스가 하나임을 보장하고, 접근할 수 있는 전역적인 접근점 제공 ! 딱 하나의 인스턴스만 생성. 생성된 인스턴스를 어디서든 참조할 수 있게 한다. 실제로 생성되는 인스턴스는 하나 ! (객체 생성을 한번으로 제한) 생성자가 또 호출되어도 이미 생성된 인스턴스를 리턴해주는 방식. 장점 메모리 낭비 방지 싱글톤 인스턴스를 사용하면 다른 인스턴스 간에 데이터 공유가 쉬움 오직 하나의 인스턴스가 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있음 단점 전역변수보다 사용하기 불편 싱글톤 역할이 커지면 결합도가 높아져 객체지향 설계원칙에서 어긋날 수 있음 멀티쓰레드 환경에서 동기화 처리를 하지 않으면 컨트롤이 어려움 인스턴스의 파괴 시점을 컨트롤 하기 어려움 예시 코드..

    Java :: 디자인 패턴

    Java :: 디자인 패턴

    디자인 패턴 디자인 패턴이란? 설계 문제에 대한 해답을 문서화 하기 위해 고안한 형식 반복되는 패턴의 원리에 대한 개념을 공학적인 측면에서 도입한 것 특정 코드의 일부분이 아님 라이브러리처럼 프로그램에 붙여넣을 수 없음 디자인 패턴을 도입하는 것이 해답이 아니다. 잘못 도입하면 문제가 될 수도 있음 장점 프로그램 전체 라인을 읽지 않아도 쉽게 인식하고 요점 파악 가능 추상적인 수준에서 다른 팀원들과 의사소통 효과적으로 할 수 있음 프로그래밍 언어, 개발중인 프로그램에 관계 없이 재사용 및 확장 가능 GoF - Gang of Four 객체지향 분야의 문제점을 분석해 24개 패턴으로 분류 기존 객체지향 설계 시 발생했던 문제를 카탈로그화 하여 패턴 정리 대규모 프로젝트의 진행에서 가장 중요한 요소는 통일된 ..

    Java :: 프로그램 개발 원칙

    Java :: 프로그램 개발 원칙

    DRY - Don’t Repeat Yourself 같은 일을 두 번 반복해서 하지 않음 같은 코드가 두 번 이상 사용될 경우엔 재사용 프로젝트가 커지면 작은 조각으로 나누어 코드를 재사용 코드 의존성에 의한 복잡도가 줄어들어 유지보수비용이 절감됨 반대 WET : We Enjoy Typing KISS - Keep It Simple, Stupid 코드는 가급적 단순 하게 구현해야 함 디자인에서 보다 간단하고 알기 쉽게 만드는 편이 좋음 큰 프로젝트를 복잡하게 디자인해서 구현하는 건 프로젝트 이해도가 부족하다는 것 비전문가에게 프로젝트를 설명할 수 없다면 제대로 이해했다고 보기 힘듬 YAGNI - You aren’t gonna need it 프로그래머가 필요하다고 간주할 때까지 기능을 추가하지 않음 실제로 필..

    Java :: 객체지향 5대 설계 원칙 - SOLID

    Java :: 객체지향 5대 설계 원칙 - SOLID

    객체지향 설계 5대원칙 결합도를 낮추고 응집도를 높일 수 있는, 객체지향적 설계 관점에서 지켜야 할 원칙들을 재정립 ! SOLID SRP : Single Responsibility Principle 단일 책임 원칙 OCP : Open Closed Principle 개방 폐쇄 원칙 LSP : Liskov Substitution Principle 리스코프 치환 원칙 ISP : Interface Segregation Principle 인터페이스 분리 원칙 DIP : Dependency Inversion Principle 의존성 역전 원칙 SRP 단일 책임 원칙 하나의 역할을 책임지는 코드를 함께 묶어주는 것 → 응집도 서로 다른 역할을 맡은 코드는 분리하여야 한다. 모든 클래스는 단 하나의 책임만을 가져야 함..

    오브젝트 :: Chap1 - 객체, 설계

    오브젝트 :: Chap1 - 객체, 설계

    무지성으로 개발만 하다가, 설계에 중요성을 느껴 살펴보게 된 책. 객체지향은 무엇일까? 객체지향적으로 설계한다는 것은 뭐지? 객체지향적인 설계는 어떤 장점을 가져다주는가 등등에 대한 해답을 이 책에서 찾아보려고 한다 프로그래밍 패러다임 프로그래밍에서 패러다임이란, 특정 시대에 수용된 프로그래밍 방법과 문제 해결 방법, 프로그래밍 스타일을 의미한다고 볼 수 있다. 어떤 패러다임을 따르느냐에 따라서 문제를 바라보는 방식과 해결하는 방식이 달라진다. 저자는 객체지향 패러다임 을 설명하고자 이 책을 집필했다고 하고 있다. 객체지향에 대한 어느 정도 유사한 그림을 각자의 머릿속에 그리고, 객체지향의 오해를 제거하는 것이 목적 ! 은총알은 없다 - 프레디 브룩스 객체지향 패러다임은 은총알이 아니다. 언제라도 다른 ..

    Network :: Flow Control & Congestion Control

    Network :: Flow Control & Congestion Control

    Flow Control 상대와 나와 버퍼 크기를 맞추어가면서 받을 수 있는 상황에만 상대방이 보내도록 하는 것이 Flow control ! TCP header 안 receive window 항목에 현재 버퍼에 받을 수 있는 만큼의 공간인 rwnd 부분 value 를 채워서 상대에게 보내고, 상대는 최대 그만큼의 데이터만 보내게 된다. → 따라서 buffer overflow 가 일어나지 않음 ! 초기에는 receive window 에 RcvBuffer 사이즈가 설정되고 (일반적으로 4096) 이후에는 받을 수 있는 만큼(rwnd 값)을 receive window 에 보내면서 흐름 제어 ! Congestion Control 한 번에 너무 많은 데이터를 보내면 네트워크에 문제가 생길 수 있다. → 그래서 한 ..

    Network :: TCP

    Network :: TCP

    TCP 특징 point-to-point : 1대1 연결 reliable, in-order byte stream : 신뢰성 있는 연결, 순서를 가진 데이터 전송 pipelined : stop-and-wait 하지 않게 데이터를 전송 이 방식은 congestion control 과 flow control 이 같이 동반되어야 함 ! full duplex data : 양방향으로 데이터를 주고 받을 수 있음 MSS : maximum segment size connection-oriented : 연결 지향 handshaking flow controlled : 수신자가 받을 수 있는 용량을 송신자가 고려함 헤더 구조 source port / dest port : 각 2bytes sequence number : 4by..

    Network :: UDP

    Network :: UDP

    UDP User Datagram Protocol connectionless no handshaking 사용되는 곳 스트리밍 multimedia app DNS SNMP UDP 헤더 헤더 8byte 밖에 없다. source port : 16bit (0~65535) dest port : 16bit (0~65535) 1000번 이하 포트는 well-known 포트이므로 쓰지 말자 UDP Checksum 싹 다 더한다 1의 보수를 취한다