고양이 임보를 시작한지 두달이 되어 간다.
‘아메리칸 코카스페니엘’과는 함께 살아봤는데, 고양이는 어떤지 잘 몰라 하나 하나 알아 가는 중.

그 중 첫 번째가 고양이는 불러도 오지 않는다는 것!

임보하고 있는 고양이 이름이 ‘소리’인데

“소리야"
“소리야"
“소리!"
“쏠" 하다가
“쏘리"로 끝난다.

고양이는 자기가 관심이 있는 경우에만 쳐다본.. 아니 지켜본다는 것이 맞는 표현인 듯.

밥에 연어나 조개 살 비벼줄때~
“미양~ 미양~”거리며 엄청 친한 척한다.

나쁜 xx시키

아참 소리는 수컷이다. 그리고 남자를 더 좋아한다. 밥 주는 사람보다 남자라니~


이렇게 생겼다.



고양이 처음 키우면서 좋았던 점은
화장실 모레에서 대소변 보는 것
각자 생활을 한다는 것
우리는 서로 놀고 싶을때만 함께 논다. 그 외에는 각자 자기의 삶을 즐긴다.

소리의 하루 일과
1. 잠자기 - 아직 어려서 그런지 하루 종일 잠만 잔다.
2. 뛰어 다니기 - 하루 두번 15분 정도 에너지를 발산한다.
3. 실 찾아 물어 뜯기 - 실밥이 풀리는 천은 기가막히게 찾아서 뜯어 놓는다.

이 녀석 이쁜 만큼 인내와 이해가 필요하다.


'생활일기' 카테고리의 다른 글

임보 중인 고양이 ‘솔(Sol)'  (0) 2016.09.06
세계의 건물들  (0) 2014.12.08
실전 HDR의 시작  (0) 2011.04.20
'내 감정 조절법'에 나오는 '벽을 넘는 기술'  (0) 2011.02.03

/* 추상클래스는 상속을 강제하기 위한 것이다.
 *
 * - 용도 -
 * 다양한 맥락으로 사용할 필요가 있을때 추상클래스로 만들어
 * 추상클래스에서는 공통적인 로직을 구현하고
 * 상속받는 사용하는 용도에 따라 달리지는 부분을 구현하기 위한 용도로 사용
 *  */

package com.actionshin.javastudy;

abstract class Calculator {
    int left, right;
   
    public void setOperands(int left, int right) {
        this.left = left;
        this.right = right;
    }
   

    int _sum() {
        return this.left + this.right;
    }
    int _avg() {
        return (this.left+this.right)/2;
    }


    public abstract void sum();
    public abstract void avg();
   
    public void run() {
        sum();
        avg();
    }
}

class CalculatorDecoPlus extends Calculator {
    public void sum() {
        System.out.println("+ sum"+_sum());
    }
    public void avg() {
        System.out.println("+ avg"+_avg());
    }
}

class CalculatorDecoMinus extends Calculator {
    public void sum() {
        System.out.println("- sum"+_sum());
    }
    public void avg() {
        System.out.println("- avg"+_avg());
    }
}

public class CalculatorDemoAbstract {
    public static void main(String[] args){
        CalculatorDecoPlus c1 = new CalculatorDecoPlus();
        c1.setOperands(10, 20);
        c1.run();
       
        CalculatorDecoMinus c2 = new CalculatorDecoMinus();
        c2.setOperands(10, 20);
        c2.run();
    }
}

'android' 카테고리의 다른 글

추상클래스를 사용하는 이유  (0) 2014.12.23
실행중인 액티비티의 상태를 확인하기  (0) 2014.12.23
두 액티비티 간 생명주기  (0) 2014.12.23
클래스 변수의 용도  (0) 2014.12.18





실행결과 아래와 같이 액티비티의 상태를 확인할 수 있다.


TASK kr.co.actionshin.thisan12 id=6
  ACTIVITY kr.co.actionshin.thisan12/.ActivityA3 53663518 pid=957
    Local Activity 534e5630 State:
      mResumed=true mStopped=false mFinished=false
      mLoadersStarted=true
      mChangingConfigurations=false
      mCurrentConfig={1.0 0mcc0mnc en_US sw768dp w768dp h1232dp xlrg port finger qwerty/v/v dpad/v s.4}
    FragmentManager misc state:
      mCurState=5 mStateSaved=false mDestroyed=false

  ACTIVITY kr.co.actionshin.thisan12/.ActivityA2 5364aec8 pid=957
    Local Activity 534e21dc State:
      mResumed=false mStopped=true mFinished=false
      mLoadersStarted=false
      mChangingConfigurations=false
      mCurrentConfig={1.0 0mcc0mnc en_US sw768dp w768dp h1232dp xlrg port finger qwerty/v/v dpad/v s.4}
    FragmentManager misc state:
      mCurState=3 mStateSaved=true mDestroyed=false

  ACTIVITY kr.co.actionshin.thisan12/.ActivityA1 53648d28 pid=957
    Local Activity 534def38 State:
      mResumed=false mStopped=true mFinished=false
      mLoadersStarted=false
      mChangingConfigurations=false
      mCurrentConfig={1.0 0mcc0mnc en_US sw768dp w768dp h1232dp xlrg port finger qwerty/v/v dpad/v s.4}
    FragmentManager misc state:
      mCurState=3 mStateSaved=true mDestroyed=false

'android' 카테고리의 다른 글

추상클래스를 사용하는 이유  (0) 2014.12.23
실행중인 액티비티의 상태를 확인하기  (0) 2014.12.23
두 액티비티 간 생명주기  (0) 2014.12.23
클래스 변수의 용도  (0) 2014.12.18

'android' 카테고리의 다른 글

실행중인 액티비티의 상태를 확인하기  (0) 2014.12.23
두 액티비티 간 생명주기  (0) 2014.12.23
클래스 변수의 용도  (0) 2014.12.18
프로세스 간의 데이터 전달  (0) 2014.12.18
  • 인스턴스에 따라서 변하지 않는 값이 필요한 경우 (위의 예에서는 PI)
    (이런 경우 final을 이용해서 상수로 선언하는 것이 바람직 하지만 final을 아직 배우지 않았기 때문에 언급하지 않았다)
  • 인스턴스를 생성할 필요가 없는 값을 클래스에 저장하고 싶은 경우
  • 값의 변경 사항을 모든 인스턴스가 공유해야 하는 경우


데이터를 효율적으로 전달하기 위해 데이터 직렬화를 사용한다.

  1. 서로 다른 앱은 서로 다른 프로세스다.
  2. 서로 다른 프로세스에 데이터를 전달하기 위해서는 커널 공유 메모리를 사용한다.
  3. 커널 메모리를 사용하기 위해서는 안드로이드는 바인더라는 것을 이용한다.
  4. 매우 빈번히 바인더를 사용하게 되면 그만큼 성능은 떨어지게 된다. 그래서 데이터를 효율적으로 전달하기 위해서 데이터 직렬화가 필요하다.


안드로이드에서 사용하는 직렬화 클래스

  1. Primitive
  2. Serializable <= 이 인터페이스를 상속받았다면 내부의 멤버 변수들을 모두 직렬화하여 객체를 만든다.
  3. Parcel
  4. Parcelable
  5. Bundle
  6. Intent


직렬화 클래스 예시

public class SampleData implements Serializable {
    private static final long serialVersionUID = 1000000L;

    private int mIntData = 0;
    private String mStrData = "shin";

    public int getIntData() {
        return mIntData;
    }

    public String getStringData() {
        return mStrData;
    }

    public void setIntData(int intData) {
        mIntData = intData;
    }

    public void setStringData(String strData) {
        mStrData = strData;
    }
}



CustomViewGroup 클래스는 FrameLayout을 상속받아 구현


public class CustomViewGroup extends FrameLayout {
    public CustomViewGroup(Context context){
        super(context);
    }
}


CustomView 클래스는 View를 상속받아 구현


public class CustomView extends View {
    public CustomView(Context context){
        super(context);
    }
}

터치 이벤트의 처리 방법은 onTouchEvent의 재정의 구현과 터치 리스너 등록 두 가지가 있다. 여기서는 터리 리스너를 이용하는 3가지 방법에 대해 정리.

  1. 내부 클래스 구현
  2. 액티비티가 View.OnTouchListener를 상속받아 구현하는 방법
  3. 익명의 내부 클래스 구현





'android' 카테고리의 다른 글

CustomViewGroup과 CustomView 클래스를 상속받아 구현하기  (0) 2014.12.18
터치 이벤트를 구현하는 3가지 방법  (0) 2014.12.16
Genymotion Plugin for Eclipse  (0) 2014.12.08
this  (0) 2014.12.08

+ Recent posts