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 타입에 대한 자세한 설명은 여기에서 확인할 수 있습니다.

SW 품질속성 6가지

|

품질 속성(QA : Quality Attribute)은 시스템이 이해 당사자의 요구 사항을 얼마나 잘 만족시키는지를 나타내기 위해 사용하며, 측정하거나 테스트할 수 있는 시스템의 특성을 의미합니다.

품질 속성은 보통 다음과 같이 6개의 요소로 구성됩니다.

image


Stmulus(자극)

자극은 시스템에 도달하는 이벤트를 말합니다. 사용자의 명령이 될 수도 있고, 보안적인 측면에서는 외부로부터의 공격이 될 수도 있습니다.


Source of Stimulus(자극원)

자극원은 자극의 원인입니다. 자극원은 시스템이 처리하는 방식에 영향을 줄 수 있습니다. 예를 들면, 신뢰할 수 있는 사용자로부터의 요청과 신뢰할 수 없는 사용자로부터의 요청은 서로 다르게 수행될 것입니다.


Response(반응)

시스템이 자극에 반응하는 방법입니다.


Response Measure(반응 측정)

반응에 대한 측정입니다. 반응이 요구 사항을 만족시켰는지 여부를 결정하며, Latency(지연 시간)나 Throughput(산출량) 등이 측정 요소가 될 수 있습니다.


Environment(환경)

시나리오가 발생하는 상황입니다. 자극은 특정한 조건에서 발생하며 환경은 자극을 가하는 역할을 합니다.


Artifact(대상)

대상은 시스템을 말합니다. 전체 시스템이 될 수도 있고 특정 부분이 될 수도 있습니다. 예를 들면 데이터 저장소(Data Store)와 메타 데이터 저장소(Metadata Store)에서의 오류는 다르게 처리되어야 할 것입니다.

예제

가용성이라는 시나리오 기반으로 각 요소들을 생각하면 다음과 같습니다.

image