옛글/프로그래밍이야기

    업무효율을 높일 협업 툴 고민 될 땐 PLUS Messenger를 써보자

    일을 잘한다는 것은 '소통'이 원활하다는 생각을 한 적 있다 (http://mnworld.co.kr/1741)3년 전에 한 생각이지만 현재도 이 생각에는 변함이 없다. 일이 진행이 되고 어떻게 하면 서로 신뢰가 쌓이며 조금 더 효율적으로 일을 할 수 있을까 라는 물음은 끝 없이 다가온다. 사람이 완벽하면 별다른 문제가 없겠지만, 사람이 완벽할 수가 없기에 이를 도와줄 수 있는 툴이나 방법론들을 찾게 된다. 애자일 방법론도 사용해보고, 수 없이 많은 협업 툴을 사용해보고 현재도 사용중이다. 공과 사를 구별하는 것 만으로도 큰 효과를 거둔 Slack, 자유도를 높인 트렐로, 오픈 소스로 제공되는 레드마인 등 다양한 툴들이 존재한다. 물론 상황에 따라 툴의 목적이 다르기 때문에 한가지 툴만 고집할 순 없다. ..

    프로그래밍 Design Pattern 이해하기 - 12 컴파운드 패턴

    패턴들의 패턴들 (컴파운드 패턴) 같이 일하라! 패턴과 다른 패턴을 상호작용하며 사용하는 것을 바로 이 '컴파운드 패턴'이라고 부른다! 즉 컴파운드 패턴은, 패턴들을 사용하는 패턴이다. 즉 컴파운드 패턴은 특정 패턴이 아니라, 반복적으로 생길 수 있는 문제를 해결하기 위해 '두개 이상의 패턴을 결합'하여 사용하는 것을 의미한다. 우리는 이번 챕터를 통해 'SimUDuck'이라는 Duck simulator라는 예제를 만들어 볼 것이다. 패턴들을 결합해서 오리들을 만들 것이다. 많은 문제들에 이 패턴을 적용해서 문제를 풀 수 있다. 이 컴파운드 패턴이 모든 문제에 대한 정답이 될 순 없지만, 많은 문제들을 푸는데 도움이 되는 것은 확실하다. 자 이제 다시 오리 예제를 만들어보자. 첫번째로, 우리는 Quack..

    프로그래밍 Design Pattern 이해하기 - 11 프록시 패턴

    오브젝트에 대한 접근을 컨트롤한다 - 프록시 패턴 프록시 패턴을 줄여 이야기하면 "어떤 객체에 대한 접근을 제어하기 위한 용도로 대리인이나 대변인에게 해당하는 객체를 제공하는 패턴"이다. 지난 시간에 검볼 머신에 대해 예제를 통해 구현을 했다. 이번엔, 검볼 회사 CEO 인 마이티 검볼이 우리에게 요청했다. 검볼 머신에 대한 프로그래밍은 했으니 검볼의 상태나 액션에 대한 모니터링을 하고 싶다고! 우리는 이미 검볼의 숫자를 가져오는 함수(getCount())와 현재 상태를 가져오는 함수(getState())를 구현해놓았다. 우리는 굉장히 빠르게 CEO의 요구에 대응할 수 있다! "Monitor"를 코딩해보자 public class GumballMachine {String location; public Gu..

    프로그래밍 Design Pattern 이해하기 - 9 이터레이터 패턴 & 컴포지트 패턴 <1>

    컬렉션을 잘 관리하자! - 이터레이터 패턴 & 컴포지트 패턴 컬렉션에는 굉장히 많은 객체들이 들어있다. 그리고 종류도 다양하다. List, Hashtable, ArrayList 등등...'루'와 '멜'은 저녁 요리사와 아침 팬케이크 요리사이다. 그들은, 둘이 메뉴를 합쳐 점심식사를 제공하기로 했다. 다음 MenuItem 클래스를 보자! 위 클래스는 MenuItem Contructor로 이름과 설명, 가격, 채소를 먹는지 여부에 대해 넣을 수 있으며, get함수를 통해 각각의 값을 가져올 수 있다. 위 클래스를 이용해서 아래와 같이 PancakeHouse 와 DinnerMenu 를 만들어보자. PancakeHouseMenu.java DinnerMenu.java 위 두 클래스를 보자. PancakeHouse..

    프로그래밍 Design Pattern 이해하기 - 5 싱글턴 패턴

    싱글턴 패턴 (One of kind Objects : 유일무이한 객체) 개발자 : 싱글턴 패턴은 왜써요!? 고수 : 여러가지 중 단 하나만을 필요로 하는 객체들이 많다. 환경 세팅과 관련된 thread pools, caches나, 로깅을 위한 오브젝트(Log) 혹은 장치 드라이버(그래픽카드나 프린터와 같은) 것들이 그런 것들이다. 사실 우리는 다양한 타입의 객체를 사용하고 있지만, 만약 프로그램을 짤 때 (하나만 필요한 경우에도) 모든 객체들을 각각의 인스턴스를 만들고 사용하게 되면, 실수로 인해 오류가 발생하거나, 코드의 중복 등 유지보수가 힘들어진다. 개발자 : 그래! 이해했어! 하나로 동작하는 클래스를 만드는 이유에 대해서는 알겠는데, 그렇다면 난 이 포스팅을 봐야해? 그냥 전역변수를 static ..

    프로그래밍 Design Pattern 이해하기 - 3 데코레이터 패턴

    데코레이터(팅) 패턴 스타버즈라는 커피숍은 매우 빠른 속도로 성장한 초대형 커피전문점이다. 너무 빠른 성장을 했기 때문에 음료의 종류가 다양한데, 이 음료의 종류를 모두 포괄하는 음료 주문시스템을 만들려고 한다. 처음 사업을 시작할 때 만들어진 클래스는 아래의 구조를 띈다. - Superclass beverage는 '음료'를 나타내는 abstract 클래스며, 모든 음료수는 이를 상속받는다. - cost()는 abstract메소드로 자식클래스가 이를 새로 정의하여 가격을 구현한다. - 처음에는 4가지의 커피만 판매하고 있다. 하지만! 엄청나게 빠른 성장을 거두면서, 음료수의 종류가 폭발적으로 늘어가고 각 음료수에 우유, 두유, 모카, 생크림 등 다양한 종류가 생기면서 고민에 빠진다! 첨가물만 들어간다고 ..

    프로그래밍 Design Pattern 이해하기 - 2 옵저버 패턴

    옵저버 패턴 옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들이 자동으로 갱신되는 일:다 패턴이다. '한 객체의 상태가 바뀌면, 그 객체가 의존하는 다른객체들(옵저버)에게 연락이 간다''출판사가 주체라면, 구독자는 옵저버가 된다' 옵저버 패턴의 조건 옵저버 패턴에서 상태를 저장하고 있는 것은 주체다. 옵저버는 이 '상태'를 사용하고 있지만, '반드시' 가지고 있어야 하는 것은 아니다. 최대한 느슨하고 또 느슨하게 결합을 가지도록 노력해야 하낟. 객체간의 결합도가 높을 수록 유지보수가 힘든 작업이 될 수 밖에 없다. 1편에서 봤던 '스트레티지 패턴'을 보면 '상속'보다는 '위임(인터페이스)'을 쓰면서 메소드만 가진 객체를 분리했듯이! 어떤 패턴이든 결..

    객체지향 프로그래밍 도대체 무엇인가?

    객체 지향 프로그래밍을 해라!라는 이야기를 많이 듣고 대략이나마는 알고 있지만, 정확하게 객체지향 프로그래밍이 무엇을 의미하고 어떻게 구현해야 하는지에 대해 스스로 잘 모르는 것 같아 다시 한번 정리할 겸 글을 써봅니다. OOP, Object-Oriented Programming 컴퓨터 프로그래밍의 패러다임 중 하나이고, 여러개의 독립된 단위, '객체'들의 모임으로 파악하는 것. 실제 세계도 사물로 이루어져있듯이, 객체지향도 그러한 관점에서 나왔다라는 것은 누구나 다 알고있겠지만, 다시 한번 찬찬히 정리해 보자. 객체 지향 언어의 시초는 1960년대에 나온 '시뮬라67'이며, 이의 가장 중요한 개념은 클래스를 처음으로 도입했다는 것이다. 그 이후로 10년동안 객체지향언어는 전혀 주목을 받지 못했지만, 학..