Finder 새 창 단축키

|

Finder 새 창 단축키

Windows에서는 탐색기를 Window + E 키를 눌러서 바로 실행할 수 있습니다.

Mac에서도 Finder를 바로 새창으로 열 수 있는 단축키를 찾으려고 노력했지만, 찾기가 쉽지 않았습니다. 알프레드(Alfred) 등을 이용한 단축 환경을 권유하는 사람들은 많았으나 단축키는 알지 못했습니다.

그러다가 우연히 단축키를 찾아냈습니다. Finder 단축키는 다음과 같습니다.

  • Option + Command + Space

image

IntelliJ에 Google Style Formatter 적용하기(Android Studio, WebStrom 등)

|

IntelliJ에 Google Style의 Formatter를 적용하는 방법입니다.


다운로드

Google Style여기서 받을 수 있습니다. 아래의 이미지처럼 IntelliJ 외에도 Eclipse나 XML, Java, C++ 등 다양한 IDE 및 언어용 스타일을 지원하고 있습니다.

image -fullwidth


IntelliJ에 스타일 설정

다음 메뉴를 통해서 Code Style 설정 창을 띄웁니다.

IntelliJ → Preference

image 여기서 ‘Scheme’의 ‘Manage…’ 버튼을 누릅니다.

image 그리고 ‘Import’ 버튼을 누르면 아래와 같은 창이 뜹니다.

image

여기서 IntelliJ IDEA code style XML을 선택합니다. 그리고 아까 다운로드한 파일 내에서 IntelliJ 관련 xml 파일을 선택해줍니다. image


이제 완료되었습니다. IntelliJ에 Google Code Style이 적용되었을 것입니다.

image

image

이미지의 RGB 값 확인하는 방법

|

이미지의 RGB 값 확인하는 방법

Windows에서는 간단하게 그림판을 이용해서 이미지의 RGB 값을 알 수 있었는데, Mac에서는 어떻게 해야 하는지 몰라서 알아봤습니다. Mac에서도 별도의 어플을 설치할 필요없이 기본 탑재된 어플로 이미지의 RGB 값을 알 수 있습니다.

image

디지털 컬러 측정기(Digital Color Meter)이라는 어플이 있습니다. 알프레드(Alfred) 또는 스팟라이트(Spotlight) 등에서 검색해서 해당 어플을 실행하면 됩니다.

프로토타입(Prototype) 패턴 for Game (C++)

|

Prototype 패턴

프로토타입(Prototype) 패턴은 인스턴스를 복제하여 새로운 객체를 생성해내는 방식의 디자인 패턴입니다.

예제

스타크래프트에서 저글링을 생성하는 ‘스포닝풀(Spawning Pool)’을 생각해봅시다. 각 Unit들을 클래스로 표현하면 다음과 같습니다.

class Unit {
  // Implementation
};

class Zergling: public Unit {};
class Hydralisk: public Unit {};
class Mutalist: public Unit {};

이런 경우 각각의 Unit을 생산하는 스포닝풀은 다음과 같이 ‘ZerglingSpawningPool’, ‘HydraliskSpawningPool’,’MutalistSpaswningPool’이 필요하게 됩니다.

class SpawningPool {
 public:
  virtual ~SpawningPool();
  virtual Unit *spawn() = 0;
};

class ZerglingSpawningPool: public SpawningPool {
 public:
  virtual Unit *spawn() {
    return new Zergling();
  }
};
class HydraliskSpawningPool: public SpawningPool {
  // Implementation
};
class MutalistSpawningPool: public SpawningPool {
  // Implementation
};

각 클래스마다 Unit과 SpawningPool이 필요하다보니 클래스 개수도 많아지며, 중복되는 코드도 많아집니다 .여기에 프로토타입 패턴을 적용하면 코드를 좀 더 깔끔하게 관리할 수 있게 됩니다.

프로토타입 패턴은 어떤 객체가 자기와 비슷한 객체를 만들어낼 수 있는 패턴입니다. 현재 예제에서는 어떤 Unit이든 자신과 비슷한 객체로부터 생성을 해낼 수 있게 됩니다.

프로토타입 패턴을 적용한 코드는 다음과 같습니다.

class Unit {
 public:
  virtual ~Unit() {}
  virtual Unit *clone() = 0;
};

class Zergling: public Unit {
 public:
  Zergling(int hp, int atk, int spd) : mHp(hp), mAtk(atk), mSpd(spd) {}

  virtual Unit *clone() {
    return new Zergling(mHp, mAtk, mSpd);
  }

 private:
  int mHp;
  int mAtk;
  int mSpd;
};

class SpawningPool {
 public:
  SpawningPool(Unit *prototype) : mPrototype(prototype) {}
  Unit *spawn() {
    return mPrototype->clone();
  }

 private:
  Unit *mPrototype;
};

프로토타입 패턴은 프로토타입의 클래스 뿐만 아니라 상태까지 같이 복제를 한다는 장점이 있습니다.

각 유닛들의 스포닝풀은 다음과 같은 코드로 만들 수 있습니다.

Zergling* zerglingPrototype = new Zergling(35, 40, 2);
SpawningPool* zerglingSpawingPool = new SpawningPool(zerglingPrototype);


프로토타입의 단점

위와 같은 코드들을 통해 각 유닛당 SpawningPool을 만들 필요는 없어졌습니다. 하지만, 각 유닛마다 clone() 메소드를 구현해야 하고, 코드의 양이 크게 줄어들지도 않습니다.

또한, 복제를 할 때 주소 값들이 가리키고 있는 값들도 모두 복사하는 ‘Deep Clone’을 할 것인지 또는 단순히 주소 값만 복사를 하는 ‘Shallow Clone’을 할 것인지도 명확하지 않습니다.

MIME Content Types

|

일반적으로 미디어 종류를 분류하는 Content Type입니다.

Content Type에 설정할 수 있는 이 값들을 MIME(Multipurpose Internet Mail Extensions) 타입이라고 하며, 다음과 같은 값들을 가질 수 있습니다.


Content Type

  • text/plain : 평범한 텍스트
  • text/html : HTML 문서
  • text/xml : XML 문서
  • text/css : CSS 문서
  • image/gif : GIF 이미지 파일
  • image/jpeg : JPEG 이미지 파일
  • image/png : PNG 이미지 파일
  • video/mpeg : MPEG 비디오 파일
  • video/quicktime : QuickTime 비디오 파일
  • audio/mp3 : MP3 음악 파일
  • application/msword : MS WORD 문서 파일
  • application/pdf : PDF 문서 파일
  • application/zip : ZIP 압축 파일

여기에 예시로 든 값 외에도 많은 종류의 MIME 타입들이 있으며, MIME 타입에 대한 자세한 설명은 여기에서 확인할 수 있습니다.