좌충우돌 개발

디자인 패턴 요약

|

1. Strategy pattern

알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용 할 수 있도록 만든다. #### 2. Observer pattern
한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들 한테 연락이 가고
자동으로 내용이 갱신되는 방식으로 일대다( one-to-many) 의존성을 정의 #### 3. Decorator pattern
객체에 추가적인 요건을 동적으로 첨가한다.
decorator는 subclass를 만드는 것을 통해서 기능을 유연하게 확장 할 수 있는 방법을 제공한다. #### 4. Factory pattern
- Factory method pattern
	객체를 생성하기 위한 interface를 정의 하는데, 어떤 class의 instance를 만들지를 subclass에서 결정하게 만든다
- Abstract Factory pattern
	    interface를 이용하여 서로 연관된, 또는 의존하는 객체를 Abstract class로 지정하지 않고도 생성할 수 있다. #### 5. Singleton pattern
해당 class의 instance가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기위한 패턴 #### 6. Command pattern
요구사항을 캡슐화 할 수 있으며, 매개 변수를 써서 여러가지 다른 요구사항을 집어 넣을 수도 있다.
또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업 취소 기능도 지원가능하다. #### 7. Adapter pattern
한 클래스의 interface를 client에서 사용하고자 하는 다른 interface로 변환한다.
adapter를 이용하면 interface 호환성 문제 때문에 같이 쓸수 없는 클래스들을 연결해서 쓸 수 있다.
facade pattern 어떤 서브시스템의 일련의 interface에 대한 통합된 interface를 제공한다.
facade에서 고수준 interface를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다. #### 8. Templete method pattern
method에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다.
templete method를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할수 있다.

GIT

|

GIT

1. 저장 순서

workingcopy -> index(stage) -> repository -> commit( 버전만들기 )

2. 되돌리기

  • reset: 선택 버전으로 되돌리기 선택 버전 이후 작업은 삭제
  • revert: 선택 버전 이전 버전으로 되돌리고 새로운 버전 생성

3. branch

  • 실험적 작업을 위해서 작업을 버전을 나누기
  • checkout : branch 선택하기 ( 소스코드를 해당 branch로 변경된다)
  • merge : checkout 한 branch에 다른 branch를 합친다.

4. 협업

  • 저장소 복사
  • pull : remote repository 에서 버전 정보를 내려받는다.
  • push : remote repository로 버전 정보를 올린다.
  • 일반적인 협업 작업 순서 a. pull : 최신 버전을 내려받아 동기화 b. work : 로컬에서 작업 c. commit : 로컬 작업 commit d. pull : 작업들은 변경이 있었는지 확인 e. push : 작업이 없었다면 로컬 버전을 올린다.

Generic

|

Generic

사용의 장점

  1. Compile 시점에 type 체크가 가능하다
  2. 중복 코드 제거

Raw Type : Generic을 사용하면서 parameter Type을 지정하지 않는 경우

List list = new ArrayList<Integer>();

Compile 시점에 raw type을 허용하는 이유는 이전 java의 호환성을 위해서이다.

Generic method

<T> void printExample(T t) { system.out.println(t.toString);}

Class level 의 type parameter는 instance가 생성될때 값을 받아온다.
그러므로 static method에서는 해당 type parameter를 사용할 수 없다.
Static method에서는 를 사용할 때는 method level에서 parameter type을 선언해서 사용해야 한다.

Bounded type parameter : type parameter에 제한을 둔다
Multiple bound : 여러 type parameter 제약을 줄 수 있다. Interface 는 여러가지고 올 수 있으나 class는 하나만 올 수 있다.

class ExampleClass <T extends List> {
 // bounded type parameter
}

Comparable interface : 객체간의 크기를 비교 하기 위해서 compareTo() 구현

Type hint : method 앞에 해당 타입을 명시하여 컴파일러가 추론하지 않고 바로 알도록 만든다. Java 하위 버전에 타입 추론을 하지 못할 때 사용한다.

List<String> list = Collection.<String>emptyList();

<?> 와일드 카드의 유용성과 제한성
와일드 카드의 의미는 ‘모른다’ 이다. 그러므로 기본적인 와일드 카드가 사용은 기본적인 것만 method 내부에서 사용할 때 사용되어진다.
예를 들어 List<?> 의 경우 method 내부에서 List의 기본 기능만 사용한다는 뜻이다.
비교하여 List 는 method 내부에서 T type의 기능을 사용한 다는 뜻이다.

JAVA spec method 안에서 사용되어 질 때는에 extends T method 외부에서 사용되어 질 때에는 super T

public static long frequency(List<?> list, Object elem) {
        return list.stream().filter(s->s.equals(elem)).count();    
}

Capture : type 추론 Capture Error: type 추론이 불가능할 경우 발생 Capture helper 함수를 만든다. ( 단점: 함수 호출에 대한 부하가 발생할 수 있다.)

IntersectionType @FuntionalInterface

Marker interface : method를 하나도 가지지 않는 interface 예: serializable

Default method: interface 안에 method를 구현 할수 있게 한것

OKKY SI 벗어나기 세미나

|

OKKY: SI 벗어나기 세미나

스타트업은 ?

  • 자율과 책임을 강조한다.
  • 개발자를 구하기 어렵다. 그러므로 개발자를 소중하게 여긴다.
  • 타이밍이 중요하기 때문에 빠른 개발 속도를 원한다. 먼저 기능을 구현하고 추후에 개선한다.
  • 빠른 개발을 위해 스크립트 언어를 선호한다.
  • 하지만 개발 속도보다 엄격한 코드리뷰를 하는 곳도 있다. case by case
  • 클라우드 환경을 많이 활용한다.
  • 좋은 제품이 있다면 가져다 활용하고 서비스개발에 집중한다.
  • 이름을 들어봤을 만한 스타트업은 연봉이 높다. 대신 높은 실력을 원한다.
  • 스타트업은 불안하다. 하지만 어느 곳에 일하나 불안하다.
  • 한 회사가 아닌 스타트업 생태계에 진입한다고 생각해야한다.

어떻게 준비할 것인가?

  • 스타트업 마다 사용 기술이 다르다. 필요할 때 사용할 기술을 찾아야한다.
  • 현재 사용하는 언어 혹은 기술에 집중하라. 현재 사용 기술을 바탕으로 면접을 진행한다.
  • 원하는 회사가 있다면 그곳에서 사용하는 기술에 촛점을 맞춰서 공부하라.
  • 처음부터 유명 스타트업에 합류 할수 없다면 눈높이를 낮춰 좀 더 작은 스타트업에서 기술과 경험을 쌓는다. 스타트업 생태계 진입이 중요.
  • 발품을 팔아야 한다. 인터뷰를 많이 보다보면 안목이 생긴다.
  • 스스로 먼저 움직여야만 기회를 잡을 수 있다.
  • 느슨한 연결이 기회로 작용할 때가 있다. 커뮤니티 활동을 활발히 한다.
  • 차별화 된 이력서를 준비한다. 자신의 핵심 역량과 개발에 대한 열정을 표현한다.
  • 링크드인에 이력서를 등록하고 영어 공부를 하라.
  • 로켓펀치, 잡플래닛과 같은 사이트에서 정보를 수시로 확인하라.
  • 개인 프로젝트를 진행한다.
  • 모든 전제 조건은 실력이다. 공부하라