접근제어자

접근제어자는 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함. 객체의 로직을 보호하기위하여 외부의 접근을 허용하거나 차단하고, 사용자에게 객체를 조작할 수 있는 수단만을 제공함으로써 결과적으로 객체의 사용에 집중.자바의 접근제어자는 public , default , protected , private로 나뉘어진다.

public - 어디서든 접근 가능.

default - 같은 페이지 내에 혹은 상속 받은 클래스 내에서 접근 가능.

protected - 같은 패키지 내에서만 접근 가능 , 다 패키지라면 상속관계에서 사용 가능.

Private - 같은 클래스 내에서만 접근 가능.


자바의 데이터타입.

모든 변수에는 타입이 있으며, 변수의 타입에 따라 저장할 수 있는 값의 종류와 범위가 달라진다. 타입은 기본형과 참조형 두가지로 나뉜다. 기본형 변수는 실제 값을 저장하는 반면 , 참조형 변수는 객체가 저장되어 있는 주소를 저장한다.

기본형

기본형 데이터는 정수형(byte, short, int, long) , 실수형(float,double) , bool형(boolean) 으로 이루어져 있다. 각 데이터 형간에는 형변환이 가능하며, 큰 값에서 작은 값으로 캐스팅 시에는 값 손실이 있으므로, 형변환 표기를 해야한다.

참조형

기본형을 제외한 나머지 모두가 referenceType. 배열 , Object , Enum ...
데이터 타입과 달리 참조값을 통해 해당 객체에 직접적으로 접근할 수 있음.


쓰레드를 구현하는데 Runnable인터페이스를 구현한 것과 Thread클래스를 상속받는 것의 차이는 무엇일까

쓰레드를 구현하는 방법은 Thread클래스를 상속받는 것과  , Runnable 인터페이스를 구현하는 방법, 모두 2가지가 있다. 이 두가지 방법 중 어느 쪽을 사용해도 별 차이는 없지만 Thread 클래스를 상속받으면 다른 클래스를 상속받을 수 없기 때문에 , Runnable 인터페이스를 구현하는 것이 일반적이다.

Runnable인터페이스를 구현하는 방법은 재사용성이 높고 코드의 일관성을 유지할 수 있다는 장점이 있기 때문에 보다 객체지향적인 방법이라 할 수 있다.

Thread 클래스를 상속

class ThreadEx1 extends Thread{
public void run(){
//작업내용
}
}
ThreadEx1 ex1 = new ThreadEx1();
ex1.start();

Runnable 인터페이스를 구현

class ThreadEx2 implements Runnable{
public void run(){
//작업내용
}
}
ThreadEx2 ex2 = ThreadEx2();
Thread t = new Thread(ex2);
t.start();


start()와 run()에 대한 차이와 쓰레드가 실행되는 과정

run()을 호출하는 것은 생성된 쓰레드를 실행시키는 것이 아니라 단순히 클래스에 속한 메서드 하나를 호출하는 것이다. 반면에 start()는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택을 생성한 다음에 run()을 호출해서, 생성된 호출스택에 run()이 첫번째로 저장되게 한다.


'CS > 개발지식' 카테고리의 다른 글

문자 표현 방식  (0) 2019.02.16
base64 인코딩/디코딩 원리  (0) 2017.04.04
OOP  (0) 2017.03.21
프로세스와 쓰레드의 차이점  (0) 2017.03.20

인텐트란

인텐트란 이러한 어플리케이션 구성요소(컴포넌트)간에 작업 수행을 위한 정보를 전달하는 역할을 한다. 어떠한 컴포넌트를 호출하느냐에 따라 사용되는 대표적인 메소드로는 다음과 같다.

startActivity() - 새로운 액티비티를 화면에 띄울 때

startService() - 서비스와 관련

broadcastIntent() - 브로드캐스팅을 수행할 때

인텐트는 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent)으로 구분할 수 있는데 인텐트에 클래스 객체나 컴포넌트 이름을 지정하여 호출될 대상을 확실히 알 수 있는 경우에는 명시적 인텐트 , 호출될 대상의 속성들을 지정했지만 호출될 대상이 달라질 수 있는 경우에는 암시적 인텐트라고 한다.

명시적 인텐트

Intent inent = new Intent(getApplicationContext() , TestActivity.class);
startActivity(intent) or startActivityForResult();

startActivity는 단순한 화면 전환이 필요할 때 사용하며 , startActivityForResult는 새로 띄운 액티비티로 부터 응답을 처리할 경우에 사용한다.

암시적 인텐트

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.naver.com"));
위와 같이 암시적 인텐트는 보통 액션과 데이터라는 속성으로 굿어되어있다. 이 두가지 속성말고도 Category , Type , Component , Extras라는 속성을 가진다. Component라는 속성을 지정할 경우는 명시적 인텐트이며 , 결국 암시적 인텐트는 Component 속성을 제외한 나머지 속성들로 구성되며 , 이러한 속성들에 부합하는 컴포넌트가 실행된다.

인텐트 필터

안드로이드 매니페스트 파일을 보면 , Intent-Filter라는 것이 있다. 예를 들어 컴포넌트A가 컴포넌트B로 인텐트를 보넀다고 하자. 명시적 인텐트라면 컴포넌트 B는 바로 ㅇ니텐트를 받았겠지만 암시적 인텐트라면 컴포넌트B는 이 인텐트가 자신의 속성과 부합하는지 확인을 해야할 것이다. 이러한 확인작업을 위해 Intent-filter라는 것이 존재한다. 인텐트 필터도 암시적 인텐트의 속성처럼 Action , data , category 필터라는 것을 가지고 있다. 


'웹 개발 > 안드로이드' 카테고리의 다른 글

GCM( Google Cloud Messaging ) 이란?  (0) 2017.04.10
Parcelable  (0) 2017.04.08
SurfaceView 와 SurfaceHolder  (0) 2017.03.14
ANR(Application Not Responding)  (0) 2017.03.14
Inflate  (0) 2017.03.13

SurfaceView와 SurfaceHolder

안드로이드 어플리케이션에서 View는 GDI Thread를 통해 Surface에 그려지게 된다. 만약 View에 동영상 또는 카메라 프리뷰와 같이 그려지는 양이 매우 많거나 빠른 화면전환을 원한다면 SurfaceView를 사용해야 한다. SurfaceView는 GDI Thread를 통해 Surface에 그려지지 않고 다른 Thread를 통해서 그려지기 때문이다. SurfaceView는 아래 그림과 같이 Window의 아래쪽에 위치하며, Windows를 Punched하여 자신이 보여지게 끔 한다. 만약 Window위에 다른 View가 있다면 blended되어진다. 

 

[출처] 청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법  http://sozu.tistory.com/35 

Furface는 하나의 그래픽 버퍼로써 SurfaceView에 실제로 그림을 그리는 등의 작업을 하는 것은 SurfaceHolder라고 하는 콜백함수이다. SurfaceHolder는 개발자가 직접 surface의 사이즈나 형식을 조절할 수 있고, surface의 pixel등 수정을 할 수 있게 해준다. 콜백함수는 정의해두기만 하면 운영체제가 알아서 호출해주는 함수를 의미한다.

 

[출처] 커니의 안드로이드 이야기  http://androidhuman.tistory.com/307 






[출처] http://javaexpert.tistory.com/170 [나는 안드로이드다.]

'웹 개발 > 안드로이드' 카테고리의 다른 글

Parcelable  (0) 2017.04.08
Intent  (0) 2017.03.18
ANR(Application Not Responding)  (0) 2017.03.14
Inflate  (0) 2017.03.13
could not install *smartsocket* listener:cannot bind to ..  (0) 2017.03.09

ANR 이란 무엇인가?

Application Not Responding의 약자로 , 어플리케이션이 응답하지 않는 경우 안드로이드 시스템에서 보여주는 에러이다. 메인 스레드(일명, UI 스레드)가 일정시간 동안 잡혀 있으면 발생한다.

언제 ANR이 발생하는가?

터치를 통한 사용자 입력이 5초 내에 처리되지 않았을 때
브로드캐스트가 10초 내에 처리되지 않았을 때
서비스가 20초 내로 처리되지 않았을 때

왜 ANR이 발생하는가?

앱이 무한 루프에 빠지거나 OOM이 나야 ANR이 발생하는게 아니다. 시간이 좀 걸리는 처리를 해도 충분이 ANR이 발생할 수 있다.

ANR이 발생하지 않도록 하려면..?

시간이 오래 걸리는 작업은 스레드를 통해 처리한다.
사용자에게 프로그레스바 등을 이용해 진행 과정을 안내해 기다리도록한다.



'웹 개발 > 안드로이드' 카테고리의 다른 글

Parcelable  (0) 2017.04.08
Intent  (0) 2017.03.18
SurfaceView 와 SurfaceHolder  (0) 2017.03.14
Inflate  (0) 2017.03.13
could not install *smartsocket* listener:cannot bind to ..  (0) 2017.03.09

Inflate 는 사전적 의미로 '부풀리다' 라는 뜻입니다. 안드로이드에서 inflate를 사용하면  xml에 정의되어 있는 view를 실제 view객체로 만드는 역할을 한다. 

사용법

inflate를 사용하기 위해서는 우선 inflater를 얻어와야 함.

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

다음은 설계도 역할인 XML 이 필요합니다. 이때 XML의 root view의 layout 타입이 뭔지 알아야 한다.

LinerarLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.inflate_example , null);

이제 가져온 view를 화면에 그린다.

setContextView(linearLayout);


'웹 개발 > 안드로이드' 카테고리의 다른 글

Parcelable  (0) 2017.04.08
Intent  (0) 2017.03.18
SurfaceView 와 SurfaceHolder  (0) 2017.03.14
ANR(Application Not Responding)  (0) 2017.03.14
could not install *smartsocket* listener:cannot bind to ..  (0) 2017.03.09

하이브리드 앱을 개발하게 되어서 안드로이드 스튜디오로 개발 및 테스트 하는 도중 adb respond 하며 디바이스 연결 인식이 되지 않는 오류가 발생되었다.


ADB란?

Android Debug Bridge 는 명령줄 도구로 , 앱 개발자가 데스크톱 컴퓨터를 사용해 연결된 안드로이드 디바이스와 통신하거나 디바이스 에뮬레이터를 실행할 수록 도와주는 도구.


오류해결 방법.

ADB 서버를 재시작하여 해결.  명령프롬프트 실행 후 adb가 설치되어 있는 곳으로 이동 또는 환경설정으로 path를 잡아줌.

> adb kill-server 
> adb start-server

adb start-server를 할 때 글 제목과 같은 오류메세지가 발생한다면 이미 실행중인  adb서버가 있을 때 발생하는 오류. 다음 명령어 입력하여 확인

> tasklist | findstr /i adb 
를 입력하면 아마 실행중인 adb.exe 리스트가 보일건데 , 다음 명령어로 다 죽이면 됨.

>taskkill /f /im adb.exe
프로세스를 죽인 후 다시
>adb start-server 를 입력하면 정상적으로 디바이스 인식이 가능.


'웹 개발 > 안드로이드' 카테고리의 다른 글

Parcelable  (0) 2017.04.08
Intent  (0) 2017.03.18
SurfaceView 와 SurfaceHolder  (0) 2017.03.14
ANR(Application Not Responding)  (0) 2017.03.14
Inflate  (0) 2017.03.13

+ Recent posts