전체 글 50

[C언어] 구조체로 Byte, Bit 필드 사용

typedef struct { unsigned char BIT0:1;// 1BIT 크기의 데이터 unsigned char BIT1:1;// 1BIT 크기의 데이터 unsigned char BIT2:1;// 1BIT 크기의 데이터 unsigned char BIT3:1;// 1BIT 크기의 데이터 unsigned char BIT4:1;// 1BIT 크기의 데이터 unsigned char BIT5:1;// 1BIT 크기의 데이터 unsigned char BIT6:1;// 1BIT 크기의 데이터 unsigned char BIT7:1;// 1BIT 크기의 데이터 }BITS; typedef union { unsigned char BYTE; BITSBit; }BYTES; BYTES Data[10];

C언어 2021.01.13

[C언어] 함수포인터 배열 사용

/* 각 A,B,C,D 기능을 하는 함수가 있다고 하면 */ void Func_A(void); void Func_B(void); void Func_C(void); void Func_D(void); /* 포인터 배열로 함수포인터를 선언할 수 있음. */ /* 단, 동적할당이 안되어 불편함 */ void (*Func_Pointer[4])(void); void main(void) { int i = 0; /* 대충 이런식으로 주소를 지정해줄 수 있는데 비효율적임 */ Func_Pointer[0] = Func_A(); Func_Pointer[1] = Func_B(); Func_Pointer[2] = Func_C(); Func_Pointer[3] = Func_D(); /* 호출만 시켜줌 */ for(i = 0; i..

C언어 2021.01.13

[C언어] 함수 포인터

함수포인터를 사용해서 함수를 호출하는 프로그램은 가독성이 떨어질 수 있습니다. 그러나, 함수 포인터로 인자를 받아서 호출하게 되면 유지 관리가 편한 것과 추후 프로그램 수정이 필요할 때 유연하게 수정을 할 수 있습니다. 가독성이 떨어지기 때문에 디버깅도 힘들 수 있고 예외처리를 제대로 해주지 않으면 NULL 포인터에 진입할 가능성이 있으니 이 부분도 검사를 잘해줘야합니다. // 임의의 숫자 변수 선언 unsigned char Num = 0; // unsigned char형 매개변수를 갖는 void형 함수 포인터 생성 void(*Func_Pointer)(unsigned char p_Num); voidFunc(unsigned char p_Num) { num = p_Num; } void main(void) {..

C언어 2021.01.13

안드로이드 백그라운드 Thread,Looper,Handler

안드로이드 UI는 기본적으로 싱글 스레드 모델로 작동하므로, 이 영향을 고려해 개발하지 않으면 애플리케이션의 성능이 저하될 수 있습니다. 따라서 메인 스레드에서 긴 작업을 하는 것을 피하기 위해 여분의 스레드를 사용해야 합니다. 다른 스레드에서 UI 스레드로 접근할 수 있도록 안드로이드에서 제공하는 스레드 간 통신 방법을 소개합니다.소개안드로이드의 애플리케이션을 실행하면 시스템은 메인 액티비티를 메모리로 올려 프로세스로 만들며, 이 때 메인 스레드가 자동으로 생성됩니다. 메인 스레드는 안드로이드의 주요 컴퍼넌트를 실행하는 곳이자 UI를 그리거나 갱신하는 일을 담당할 수 있는 유일한 스레드이므로 UI 스레드라고도 불립니다.안드로이드 화면을 구성하는 뷰나 뷰그룹을 하나의 스레드에서만 담당하는 원칙을 싱글 스..

안드로이드 2017.03.28

[JAVA] 문자열 앞뒤 공백제거 메서드 trim()

JAVA 또는 안드로이드 프로그래밍에서 문자열을 처리하는 과정에서 앞과 뒤의 공백이 매우 거슬리는 경우가 있습니다.trim()이라는 메서드는 이 앞뒤 공백을 제거해주는 기능을 가지고 있으며 String 클래스에 정의되어 있습니다. 기능에 대해서 다시 얘기를 하자면,사실 trim() 메서드는 앞과 뒤의 공백을 제거한 후 문자열의 복사본을 반환합니다. 그럼 어떤 기능을 동작하는 지 바로 예제와 그 결과를 보면 쉽게 이해할 수 있습니다. 1-1. 예제 import java.io.*; public class Test{ public static void main(String args[]){ String Str = new String(" Welcome to Tutorialspoint.com "); System.ou..

JAVA 2017.03.19

안드로이드 액티비티에 데이터를 전달하기

1. Activity에 데이터 표시.새로운 Activity를 화면에 표시하는 목적은 여러가지가 있지만, 그 중에 많은 비중을 차지하는 것이 바로 사용자가 선택한 아이템의 상세 정보를 보여주는 것입니다. ListView에 아이템(예. 연락처 이름) 리스트를 표시하고, 사용자가 하나의 아이템을 선택하면 아이템의 상세 정보(예. 이름, 전화번호, 주소 등)를 새로운 Activity로 전달하여 사용자에게 표시하는 경우를 예로 들 수 있죠. [안드로이드 액티비티]에서, Activity를 실행하기 위해서는 Intent를 사용해야 한다고 설명했습니다. 실행하고자 하는 Activity 클래스를 Intent 객체에 지정한 다음, startActivity() 함수를 호출하는 간단한 코드를 소개했었죠. Intent inte..

안드로이드 2017.03.15

Thread1 - 핸들러 메세지 전송 방식으로 수행

어플리케이션을 위해서 프로세스가 하나 만들어 지면 메인 스레드에서는 최상위에서 관리되는 어플리케이션 객체인 액티비티와 브로드 캐스트 수신자 등 새로운 윈도우를 관리하기 위한 '메시지 큐'를 실행하게 됩니다. 이 '메시지 큐'를 이용해서 순차적으로 코드를 수행할 수 있고, 이렇게 '메시지 큐'를 이용해 메인 스레드에서 처리할 메시지를 전달하는 역할을 하는 것이 바로 '핸들러 클래스'입니다. 위의 그림에서 보이 듯이 새로만든 스레드 (스레드#1)가 수행하려는 정보를 메인 스레드로 전달하기 위해서는 먼저 핸들러가 관리하는 '메시지 큐'에서 처리할 수 있는 메시지 객체 하나를 참조해야 합니다. 객체 하나를 참조하기 위한 방법으로는 obtainMessage() 메소드를 이용할 수 있고 호출의 결과로 메세지 객체를..

안드로이드 2017.03.07

인텐트간 데이터 전달,수신 방법

인텐트 메소드(putExtra,getExtra,getIntent) 이용하여 Activity간 데이터 전달, 수신 방법 [String]public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String strArray[] = {"hi","hello"}; Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("itpangpan..

안드로이드 2017.03.03

인텐트에 대한 개념 및 구현 방법

1. 인텐트 핸드폰 어플리케이션을 사용할 때마다 버튼을 누르면 다른 화면이 뜨는 것은 당연하다는 듯이 생각해왔다. 이런 동작을 하기 위해서 사용되는 것이 바로 인텐트(Intent)라는 매커니즘이다. 하나의 액티비티에서 다른 액티비티를 시작하려면 액티비티의 실행에 필요한 여러가지 정보들을 보내주어야 하는데, 이 때 사용하는 메세지가 인텐트이다. 2. 인텐트의 종류 1) 명시적 인텐트명시적 인텐트에서는 타깃 컴포넌트의 이름을 지정한다. 다시 말해서 "어플리케이션 A의 컴포넌트 B를 구동하여라."와 같이 명확하게 지정하는 것이다. 흔히 동일한 어플리케이션 내에 있는 다른 액티비티를 실행할 때 사용된다. Intent intent = new Intent(this, NextActivity.class); startA..

안드로이드 2017.03.03

fcm push notification (firebase) 안드로이드 푸쉬알림 예제

Firebase Cloud Messaging을 사용해서 안드로이드 푸시 알림을 구현하는 방법 1. project level의 build.gradle 파일에 google-service를 추가dependencies { classpath 'com.android.tools.build:gradle:2.1.0' //classpath 'com.google.gms:google-services:3.0.0' classpath 'com.google.gms:google-services:3.0.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files }2. app leve..

안드로이드 2017.03.03