삽입 정렬이란?

  • 순차적으로 값을 읽어서 현재 값 이전에 위치한 정렬되어 있는 값들의 적절한 곳으로 삽입하는 정렬이다.
  • 현재 값 이전에 위치한 값들은 이미 정렬되어 있으므로, 현재 값이 직전 값보다 크다면 삽입이 일어나지 않는다.
  • 성능
    • O(n²)
    • 정렬되어 있을 수록 성능이 좋다.
    • 이미 정렬 되어 있을 경우(최선의 경우) 비교 횟수 : N - 1
    • 역순일 경우(최악의 경우) 비교 횟수 : N(N – 1)/2


자세한 내용은 여기

간단히 컴파일해보고 싶은 코드가 있을 때 유용합니다.

http://ideone.com/


재귀 호출

  • 함수가 호출되면 함수가 호출된 장소를 가리키는 주소값이 시스템 내부의 스택에 저장됨
    (호출된 함수의 작업을 끝마치고 리턴될 때 되돌아갈 위치를 기억)
  • 재귀적으로 호출된 함수가 리턴될 때 함수를 호출했던 원래 자리로 되돌아와야 하는 이유
    • 원래 함수에서 재귀적으로 함수를 호출한 부분 다음에 다른 내용이 포함되어 있으면 그 내용을 계속해서 처리해야 하기 때문 
  • 내부 스택을 이용해서 함수가 호출된 지점을 정확하게 기억해야 하기 때문에 메모리의 사용이나 프로그램의 처리 속도 면에서 추가적인 부하가 있음


꼬리재귀

  • 성능과 간결함, 이 두가지 방법의 장점을 모두 취함
  • 원래 위치로 돌아갔을 때 할일이 남아있지 않기 때문에 함수가 호출된 위치를 기억해 둘 필요가 없음
  • 똑똑한 컴파일러는 꼬리재귀를 인식하여 최적화를 해줌

자세한 내용은 여기


구글 앱스 한글 입력기 설치

안드로이드에서는 실행되는 어플리케이션의 상태를 시스템에서 직접 관리한다. 이는 대부분의 휴대단말용 OS에서 사용하는 방법으로 독립적인 어플리케이션이 시스템에 의해 관리되지 않을 경우 실행된 어플리케이션이 메모리를 과도하게 점유하거나 화면을 보여주는 권한을 과도하게 가지게 됨으로써 전화기의 원래 기능인 전화 수발신 기능 자체를 사용하지 못하게 될 수도 있기 때문이다.


안드로이드 어플리케이션을 구성하는 구성요소 중 하나인 액티비티(Activity)도 효율적인 메모리 관리를 위해 액티비티가 생성되고 소멸되는 조건인 생명주기(Lifecycle)을 가지고 있다.


액티비티의 상태는 크게 활성, 일시정지, 정지의 3가지로 나눌 수 있다.


활성

  • 화면 상에 액티비티가 보이면서 실핻되어 있는 상태. 액티비티 스택의 최상위에 있으며 포커스를 갖고 있음

일시정지

  • 사용자에게 보이기는 하지만 다른 액티비티가 위에 있어 포커스를 받지 못하는 상태. 대화상자가 위에 있어 일부가 가려저 있는 경우에 해당함.

정지

  • 다른 액티비티에 의해 완전히 가려져 보이지 않는 상태

자세한 내용은 여기


앱을 만들다 보면 인텐트를 통해 단순히 String, int, boolean 같은 기본 타입 뿐 아니고 커스텀 클래스나 오브젝트를 다른 컴포넌트에 전달해 줘야 할 경우가 많다. 그 경우 단순히 그냥 인텐트에 putExtra() 로는  넣어줄 수가 없다.안드로이드에서는 그런 경우를 위해 자바의 Serialization 개념과 유사한 Parcelable이라는 클래스가 있다.

 

자세한 내용은 여기

메니페스트 파일, 너는 누구냐?

이전에 올렸던 이클립스 테마 변경 링크는 edit window 부분만 테마가 적용되었는데 다른 window들도 적용되는 테마를 찾았다. MoonRise라는 테마이다. 아래 링크로 ㄱㄱ


eclipse full dark theme

낮은 결합도, 높은 결합도응집도

소프트웨어 공학의 전통적인 이론에 따르면, 유지보수성이 높은 소프트웨어는 프로그램의 각 요소들이 결합도는 낮게, 응집도는 높게 구성되어야 한다.


결합도(coupling)란?

소프트웨어 코드의 한 요소가 다른 것과 얼마나 강력하게 연결되어 있는지, 또한 얼마나 의존적인지 나타내는 정도이다. 프로그램의 요소가 결합도가 낮다는 것은 그것이 다른 요소들과 관계를 그다지 맺지 않은 상태를 의미한다.


결합도가 높은 클래스의 문제점

  • 연관된 다른 클래스가 변경되면 더불어 변경해야 하고,
  • 수정하려는 클래스를 이해하기 위해 연관된 다른 클래스를 함께 이해해야 하고
  • 나중에 다른 프로그램에서 클래스를 재사용하기도 힘들다.



응집도란(cohesion)?

프로그램의 한 요소가 해당 기능을 수행하기 위해 얼마만큼의 연관된 책임과 아이디어가 뭉쳐있는지를 나타내는 정도이다. 일반적으로 프로그램의 한 요소가 특정 목적을 위해 밀접하게 연관된 기능들이 모여서 구현되어 있고, 지나치게 많은 일을 하지 않으면 그것을 응집도가 높다고 표현한다. 응집도가 높으면 프로그램을 쉽게 이해할 수 있으므로 유지보수성이 높아진다.


응집도가 낮은 클래스의 문제점

  • 이해하기 힘들고
  • 따로 재사용하기 힘들며
  • 유지보수하기 힘들고
  • 다른 클래스의 변화에 민감하다.


예)


다른 기능 영역의 메소드들을 다수 포함한 클래스

  • 이런 클래스는 대개 X and Y와 같은 식으로 이름을 붙인다. 한 클래스 안에 여러 기능 영역의 메소드가 들어 있어, 클래스가 한 가지 기능에 집중하지 못하는 일이 많다. 예를 들어, 이미지 처리하는 기능과 사운드 처리하는 기능을 같이 갖고 있으면 그 클래스는 응집도가 낮은 것이다.


너무 많은 책임을 짊어진 클래스

  • 같은 기능영역의 메소드로 구성되었지만 클래스내에 그들이 모두 구현된 경우로서 너무 많은 책임을 짊어지다 보니 클래스의 크기가 엄청나게 커진 경우이다. 다른 클래스가 해야 적당한 기능을 자신이 억지로 하려고 하니까 크기가 커진 것이다. 예를 들어, 돈의 지불(현금, 수표, 신용카드)과 관련된 모든 기능을 Payment(지불)라는 클래스에 넣으면 이 클래스는 응집도가 낮아진다. 이럴때는 현금, 수표, 신용카드의 공통된 결제 기능을 Payment 클래스에 정의하고, 각자 고유한 기능은 Cash, Check, CreditCard 등의 Payment를 상속받은 하위 클래스에 정의하는 것이 응집도를 높이는 방법이다.


 


응집도가 높은 클래스의 특징

  • 클래스의 목적에 부합하는, 같은 기능영역( function area )의 메소드들로 구성되어 있다.
  • 메소드의 개수가 상대적으로 작다. 그것은 오로지 자신만이 할 수 있는 책임을 부여 받았다는 뜻이다.
  • 혼자 너무 많은 일을 하지 않는다. 다른 클래스와 협력한다.


1. Genymotion Download

2. Eclipse>Help>Install New Software

3. Work with란에 http://plugins.genymotion.com/eclipse 입력하고 엔터

4. Eclipse의 Genymotion 아이콘을 클릭하여 Genymotion 설치경로 설정


Genymotion player.exe 오류 시

+ Recent posts