본문 바로가기

공부(~2016)50

[Java] 제네릭 제네릭을 사용한 코드는 사용하지 않은 코드에 비해 직관적이고 안전할 수 밖에 없다.제네릭은 타입을 정의하는데 있어 안전장치와 같다.개발자의 실수로 인한 런타임 오류를 방지할 수 있다. -> 컴파일 에러로 변환되므로그리고 자바 내부적으로도 제네릭을 적용한 것이 적용하지 않은 것보다 성능적으로 좀더 좋다. 2014. 12. 3.
Git 기본 명령어 기존의 디렉토리를 Git 저장소로 만들기 기존의 프로젝트를 Git으로 관리하고 싶을 때 1) 프로젝트의 루트 디렉토리로 이동2) git init- .git 이라는 하위 디렉토리가 만들어지고, 그 안에 설정파일이 생긴다.- 이 때 까지는 어떤 파일도 관리 대상이 아니며(untracked), add & commit을 해야 관리 대상이 된다.3) git add 파일명 - 해당 파일이 저장소에 추가된다. (tracked)- 예) git add * : 디렉토리 내의 모든 파일을 stage area에 추가 (staged)- 예) git add *.java : 디렉토리 내의 확장자가 java인 모든 파일을 stage area에 추가4) git commit -m "커밋 메시지" - stage area의 스냅샷이 저장소.. 2014. 10. 13.
Git 기본 Git의 기본 특성분산 버전 컨트롤 시스템 (DVCS)- 클라이언트가 파일의 마지막 스냅샷을 checkout 하는 것이 아니라, 저장소를 전부 복제한다.- 서버에 문제가 생기면 클라이언트 중 하나 가져다가 서버를 복원할 수 있음. 델타가 아니라 스냅샷을 통한 버전 관리- 각 버전이 각 파일에 대한 변화(델타)를 저장하는 일반적인 VCS과는 달리, 전체 파일 시스템의 현재 상태의 스냅샷을 저장함.- 파일이 달라지지 않았으면 이전 상태의 파일에 대한 링크만 저장함. 거의 모든 명령을 로컬에서 실행함- 프로젝트의 모든 히스토리가 로컬 디스크에 있기 때문에 실행 속도가 빠름- 오프라인에서도 작업 가능 해시를 통한 무결성- 모든 데이터를 저장하기 전에 해시를 구하고, 해시로 데이터를 관리함- 40자 길이의 16진.. 2014. 10. 2.
객체지향 / 절차지향 / 정보은닉 / 캡슐화 / 모듈화 절차지향 : C언어 - 데이터와, 그들을 조작하는 절차가 구분됨. - 데이터를 중심으로, 각 함수들이 데이터를 조작하고 사용함 - 하나의 데이터 type에 변화가 생기면? 많은 함수를 수정해야 할 것임 객체지향 : C++, Java 등등 - 객체 : 명백한 한계와 의미를 가지는 사물/개념을 추상화 한 것. 애트리뷰트+메소드 - 객체(데이터, 기능을 모두 포함)들이 서로 메시지를 주고 받으며 협업함 - 하나의 데이터 type에 변화가 생기면? 해당 객체만 수정하면 될 것임, 다른 객체들에는 영향이 가지 않음 - 추상화, 캡슐화, 모듈화, 재사용성, 계층성, 상속성, 다형성(같은 메시지에 대해 다르게 반응하는 것) 정보은닉 / 캡슐화 - 객체간에 데이터를 주고받기 보다는, 기능을 실행해달라고 요청함 - 외부.. 2014. 8. 7.
Factory Method 패턴 Factory Method 패턴 템플릿메소드패턴을 인스턴스 생성에 적용한 전형적인 예. 팩토리(인스턴스를 생성하는 공장)를 템플릿메소드 패턴으로 구성한 것이 팩토리메소드 패턴이다. - 인스턴스를 만드는 방법을 상위클래스측에서 결정, 구체적인 이름까지는 결정하지 않음. - 구체적인 내용은 하위클래스측에서 구현함으로써 인스턴스 생성을 위한 골격과 실제 인스턴스 생성에 사용되는 클래스를 분리함. 구현 예시 package framework; public abstract class Product { public abstract void use(); } product(인스턴스)가 가져야 할 인터페이스(API)를 추상메소드 선언으로 규정하고, 구현은 하위클래스에게 위임함. package framework; publi.. 2014. 7. 7.
Template Method 패턴 Template Method 패턴 상위 클래스의 템플릿 메소드에서 처리의 흐름을 결정하고, 하위 클래스에서 그 구체적인 처리 방법을 결정하는 디자인패턴. 구현 예시 public abstract class AbstractDisplay { // 상위 클래스 public abstract void open(); // 하위 클래스에 구현을 맡기는 추상 메소드 (1) open public abstract void print(); // 하위 클래스에 구현을 맡기는 추상 메소드 (2) print public abstract void close(); // 하위 클래스에 구현을 맡기는 추상 메소드 (3) close public final void display() { // 템플릿 메소드 open(); for (int i .. 2014. 7. 7.
Adapter 패턴 (Wrapper 패턴) Adapter 패턴 (=Wrapper 패턴) 이미 제공되어 있는 것을 그대로 사용할 수 없을 때, '제공되어 있는 것'과 '필요한 것' 사이의 '차이'를 없애주는 디자인패턴. 기존에 있는 클래스(Adaptee)를 이용하여, 필요한 기능을 제공해주는 Adaptor 클래스를 만든다. 구현 예시 1. 클래스에 의한 Adapter 패턴 - class Adapter extends Adaptee implements Target 1) 새롭게 필요한 기능을 정의한 interface Target 을 만든다. 2) Target 인터페이스를 implements한 Adaptor 클래스를 만든다. 3) Adaptor 클래스는 기존에 제공되어 있는 Adaptee 클래스를 extends 한다. 4) Adaptor 클래스에 Targ.. 2014. 7. 7.
Iterator 패턴 Iterator 패턴 무엇인가 많이 모여있는 집합체의 요소들을 통일된 방법으로, 순서대로 접근하는 방법. 구현 예시 1. 집합체를 나타내는 인터페이스인 Aggregate를 생성하고, Iterator를 만들어서 반환해주는 메소드인 iterator()를 정의함 public interface Aggregate { public abstract Iterator iterator(); } 2. Aggregate 인터페이스를 구현한 콘크리트 클래스를 작성하고 iterator()를 오버라이드 함. public class BookShelf implements Aggregate { private Book[] books; private int last = 0; public BookShelf(int maxsize) { this.. 2014. 7. 7.
쓰레드의 배타제어 (mutual exclusion) / 동기화 (synchronized) 쓰레드의 배타 제어 (mutual exclusion)음.. 이건 여기에 그렇게 간단하게 정리할 만한 단순한 개념은 아닌 것 같지만 ....ㅋㅋ concurrent 하게 수행되는 여러개의 쓰레드가 같은 변수/인스턴스에 접근하는 경우를 "경쟁(race)"이라고 한다. 이러한 경쟁으로 인하여 예기치 않게 발생하는 상황을 date race, 혹은 race condition 이라고 한다. race condition을 방지하기 위해서는, 일종의 교통 정리가 필요하다. - 대표적인 교통 정리의 방법으로 상호 배타(mutual exclusion)가 있음. 하나의 쓰레드가 어느 부분을 실행하고 있을 때에는 다른 쓰레드가 그 부분을 실행할 수 없게 만드는 방법. 자바에서는 쓰레드의 mutual exclusion을 실행할 .. 2014. 4. 17.
Java 이름 재사용 - 오버라이딩 / 하이딩 / 섀도윙 / 모호화 오버라이딩 (overriding) 자식 클래스에 있는 인스턴스 메서드가 부모 클래스의 접근 가능한 메서드와 동일한 이름과 매개변수를 가지는 것. 오버라이딩 되면 동적 바인딩이 가능해짐. 따라서 JVM은 실행중에 인스턴스의 자료형에 기반하여 호출알 메서드를 결정함. 하이딩 (hiding) class Parent { public static void f() { } } class Child extends Parent { public static void f() { } // Parent.f()를 하이딩함 } 부모클래스의 필드, static 메서드, 클래스, 인터페이스와 동일한 이름으로 자식 클래스에도 요소를 생성하면, 자식에서 만든 요소가 부모에 있는 요소를 하이딩한다. 이처럼 하이딩을 사용하면 부모 클래스의 .. 2014. 4. 5.
[알고리즘/C언어] 10진수를 2진수로 변환 #include int main(void){ int num=6, n[10], i=0; do { n[i]=num%2; num=num/2; i++; }while(num); for(i=i-1; i>=0; i--) printf("%d", n[i]); printf("\n"); return 0;}cs 수기로 구하는 방식대로 짠 것do while으로 한 이유는 ? input이 0 일때도 제대로 되게 하려고 그런 것 같음 #include int main(void){ int num=6, i=0, chk=0; for( i=sizeof(int)*8-1; i>=0; i-- ) { if( ( ((num>>i) & 1) && !chk) || i==0 ) chk=1; if(chk) printf("%d", (num>>i) & 1);.. 2013. 12. 22.
[책] 좋은 코드를 작성하는 기술 1. 좋은 코드란?- 유지보수성이 높다.- 신속하고 효율적으로 동작한다.- 정확하게 동작한다.- 불필요한 부분이 없다. 2. 좋은 코드를 작성하기 위한 습관- 오픈소스나 다른 전문 프로그래머들이 작성한 코드를 읽어라.- 직접 코드를 작성해라.- 통합개발환경 등의 툴 사용법을 충분히 숙지해라. 직접 포털에서 레퍼런스를 검색하는 것 보다, 에디터 상에서 1초만에 원하는 API를 보여주는 것이 효율이 훨씬 높을것이다.- 다른사람의 피드백을 받아라 (코드 리뷰 받기, 블로그 등에 올리기) 3. 좋은 코드는 좋은 이름에서 나온다- 이름만 보고도 기능이나 역할을 알 수 있도록 네이밍을 해라.- 이름을 지을 때 생략하는 방법에도 요령이 있다. - 어두 이외의 모음을 삭제한다 (image -> img)- 강한 음을 남.. 2013. 12. 15.
[알고리즘/C언어] 최소공배수 최대공약수 #include int gcd_func(int x, int y){ if(y==0) return x; else return gcd_func(y, x%y);} int lcd_func(int x, int y){ int i; for(i=1; inum2) // num1 2013. 12. 14.
[알고리즘/C언어] 문자열 거꾸로 출력하기 1. 그냥 출력하기 혹은 추가 배열에 저장하기 #include#include int main(void){ char a[] = "My Name Is Soy Lee"; int i, j; printf("%s\n", a); for(i=strlen(a)-1; i>=0; i--) { if(a[i]==' ') { for(j=i+1; a[j]!=' ' && a[j]!='\0'; j++) printf("%c", a[j]); printf(" "); } else if(i==0) { for(j=i; a[j]!=' '; j++) printf("%c", a[j]); } } printf("\n"); return 0;}Colored by Color Scriptercs 2. 추가 배열 없이, 기존 배열에서 위치 바꾸기 #include.. 2013. 12. 14.
[C언어] Parameter / Argument 차이 void func( int parameter ) // 파라미터 = 매개변수. 호출되면서 전달받은 것. { printf(" %d ", parameter); } int main() { func( 3 ); // argument = 인자. 함수를 호출할 때 전달하는 것. } 2013. 8. 22.