C언어 포인터



안녕하세요 열코입니다.


이번시간에는 C언어 포인터에 대해 알아보겠습니다.


포인터(Pointer)란 프로그래밍 언어에서 변수의 메모리 주소를 가리키는 변수를 말합니다.


포인터는 Low Level 언어(C/C++/어셈블리...등)에서 많이 사용됩니다.



이번 포스트는 다음과 같이 진행됩니다.


1. 포인터 사용법


2. 포인터 활용


3. 포인터와 배열의 차이점



준비되셨으면 그럼 시작하겠습니다!!


먼저 포인터에 대한 사용법에 대해 알아보겠습니다.



1. 포인터 사용법


포인터를 사용하려면 먼저 두가지 연산자에 대한 이해가 필요합니다.


& 연산자와 * 연산자입니다.


scanf에 대해 공부하셨다면 &연산자에 대해 보신적이 있을텐데요.


& 연산자에 대해 조금 설명하자면 변수의 주소에 액세스 하기위한 단항 연산자입니다.


(참고 영어로는 ampersand라고 합니다.)


그래서 scanf는 표준 입력함수로 콘솔에서 입력을 변수에 메모리에 접근하여 저장하기 위해 


& 연산자를 사용하는 것입니다.


아래 예제는 & 연산자를 이용하여 변수의 주소를 출력하는 코드입니다.


#include <stdio.h> // 표준 입출력 라이브러리


int main(void) {

int num = 10; // 정수형 변수 선언

printf("%p", &num); // num의 주소값 출력

}


위 코드는 num이라는 이름을 가진 정수형(Integer) 변수를 선언하고 그 값으로 10이라는 


정수(10진수)를 정의했습니다.


그리고 이 num이라는 변수는 메모리 어딘가(스택영역)에 할당됩니다.


(참고 : 메모리공간은 크게 데이터, 스택, 힙 공간으로 분류됩니다.


여기서 num 변수는 main() 함수의 지역변수이기 때문에 지역변수의 저장 공간인 스택영역에 저장되게 됩니다.)


표준 출력함수인 printf() 함수를 통해 num 변수의 주소값을 출력해보겠습니다.



첫번째 매개변수로 %p를 주었습니다. 왜 %d가 아닌 %p일까요?


%d 는 decimal의 줄임말로 변수를 10진수로 표현하기 위한 포맷(format)입니다.


%p 는 주소값을 표현하기 위한 포맷이라고 생각하시면 되겠습니다.


두번째 매개변수로는 num앞에 &연산자를 추가했습니다. 이는 num변수안에 저장된 값 10이 아닌


num변수가 저장된 메모리 주소에 접근하기 위해 연산자 &를 사용한 것입니다.



우리가 사용하는 컴퓨터의 메모리는 RAM인거 다 아시죠?


RAM은 Random Access Memory의 줄임말로 접근이 임의인 메모리입니다.


따라서 num 변수의 주소값은 출력할 때마다 매번 다른 값을 출력하게됩니다.(직접해보세요)



이제 포인터를 사용하기 위해 * 연산자에 대해 알아보겠습니다.


앞서 배운 & 연산자를 일반적으로 참조 연산자라고 부르며, * 연산자를 역참조 연산자라고 부릅니다.


포인터를 사용하기 위해서는 변수와 자료형 사이에 * 연산자를 추가하면 됩니다.


아래 예제 코드를 참고하세요.


#include <stdio.h> // 표준 입출력 라이브러리


int main(void) {

int num = 10; // 정수형 변수 선언

int *p; // 정수형 포인터 선언

p = &num; // 포인터가 num 변수의 주소값을 가리킴


printf("%d\n", p); // 포인터가 가리키는 변수의 주소 출력

printf("%d\n", *p); // 포인터가 가리키는 변수의 값 출력

printf("%d\n", &p); // 포인터 변수의 주소 출력

}


자 *도 많고 &도 많고 참 헷갈린다 그쵸?


먼저 글로 최대한 간단히 설명하고 그림으로 설명드리겠습니다.


첫번째 줄 부터 설명하겠습니다.




① num이라는 정수형 변수를 선언했습니다. 이로써 스택영역에 num 변수의 메모리가 할당됩니다.


② p라는 정수형 포인터를 선언했습니다. 이로써 힙영역에 p 변수의 메모리가 할당됩니다.


(num이라는 정수형 변수를 가리키기 위한 포인터로써 정수형 포인터를 선언합니다. 


또한 포인터는 힙 영역에 할당 됩니다.)


③ p라는 정수형 포인터에 num 변수의 주소값을 대입했습니다.


(포인터의 주소값을 대입하는 표현을 편의상 가리킨다라고 표현합니다.)



여러분들의 이해를 돕기위해 그림을 직접 그려서 대령했습니다.(짝짝)


메모리는 데이터, 힙, 스택영역이 있다고 위에 설명했죠?


따라서 지역변수인 num은 스택영역할당되고, 포인터 변수인 p는 힙 영역에 할당되었습니다.


그리고 num의 주소값을 p에게 대입(p가 num을 가리킴)을 화살표로 표현했습니다.



여기서 출력값에 대해 알아보면


printf("%d\n", p); // 포인터가 가리키는 변수의 주소 출력


printf("%d\n", *p); // 포인터가 가리키는 변수의 값 출력


printf("%d\n", &p); // 포인터 변수의 주소 출력


은 각각 어떤 값을 출력할까요?


맞추시는 분께는 열코 블로그 3개월 구독권을 드립니다! (필요없음)




자 하나씩 살펴보도록 합시다.


첫번째 p의 출력값은 p가 가리키는 변수의 주소 출력, 따라서 num의 주소값이 0(임의의 주소값)이 출력되겠죠?


두번째 *p의 출력값은 p가 가리키는 변수의 값 출력, 따라서 num의 값 10이 출력됩니다.


세번째 &p의 출력값은 p의 주소값, 따라서 100이 출력됩니다.


위 과정에 대한 이해가 안되시는분은 댓글로 질문남겨주시면 더욱! 더욱! 상세히 설명드리겠습니다.



2. 포인터의 활용은 다음 포스팅에서 소개하겠습니다. ^0^




이상 'C언어 포인터'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.



'C, C++' 카테고리의 다른 글

C/C++ 구조체 사용법 및 예제  (1) 2018.10.08
C/C++ 배열 사용법  (0) 2018.10.05
C 파일처리  (0) 2018.10.02
C++ 벡터 사용법  (2) 2018.09.26
C++ 자바 상속 비교  (0) 2018.09.08
C 랜덤 - 난수 생성하기  (7) 2018.09.06
C++ String 문자열 사용법 정리  (0) 2018.08.20
[C++] C# 연동하기 / C# dll 파일 만들기  (1) 2018.08.18


안녕하세요 열코입니다.


이번시간에는 파이썬의 랜덤(난수) 클래스에 대해 알아보도록 하겠습니다.

파이썬에서 난수를 생성하기 위해서는 random 모듈을 사용합니다.

프로그래밍을 하면 난수를 생성해야하는 일이 많이 생기는데요. 

이때 random 모듈을 사용하시면 됩니다.


사용법은 간단합니다.

여러가지 상황에 따라 코드로 설명하겠습니다.


① 1부터 10까지 난수 생성

import random

num = random.randrange(1, 11) # 1부터 10 사이의 난수 생성

num2 = random.randrange(1, 11, 2# 1부터 10 사이의 난수(홀수) 생성

print(num) 

print(num2)


random 모듈을 import 해서 추가하고, random.randrange() 함수를 사용하여 간단하게 

난수를 생성할 수 있습니다.

random.randrange() 함수의 매개변수는 첫번째 시작 숫자, 두번째 끝 숫자 + 1입니다.

- 1부터 10까지의 난수를 생성하고자 하면 1, 11을 입력하면 됩니다.

- 5부터 25까지의 난수를 생성하고자 하면 5, 26을 입력하면 됩니다.



세번째 매개변수는 난수들 사이의 간격인데 1부터 10까지 숫자중 2씩 간격을 두면

모두 홀수만 출력되겠죠? 만약 짝수만 출력되게 하고 싶으면 첫번째 매개변수를 짝수로 주면 됩니다.


만약 랜덤 소수가 필요하신 분은 아래와 같이 사용하시면 됩니다.

import random

num = random.random() # 0과 1사이의 임의의 소수

print(num) # 0.8003784774477363 출력


위 코드와 같이 random.random() 함수를 그냥 호출하면 0과 1사이의 임의의 소수가 출력됩니다.

소수점을 제한해서 출력하고 싶으면 print(round(num, 2)) 이렇게 사용하시면 됩니다.


② 이미 정의된 리스트형 자료 섞기(셔플)

import random

myList = [ 1, 2, 3, 4, 5 ]

random.shuffle(myList) # 순서 섞기 (셔플)

print(myList) # [5, 2, 1, 3, 4] 출력


난수를 생성해서 리스트로 만드는 방법도 있겠지만 이미 생성된 리스트가 존재하는 경우?

해당 리스트를 마구잡이로 섞어버리는 함수가 있습니다.

바로 shuffle() 이라는 함수인데요. 대충 보셔도 아시겠지만 셔플은 카드 게임에서도 섞는것을 의미하죠?

random.shuffle() 함수에 리스트를 매개변수로 호출하면 리스트가 뒤죽박죽으로 순서가 바뀝니다.


③ 랜덤으로 하나 선택(초이스)

import random

menu = [ '김치찌개', '된장찌개', '치킨', '피자', '햄버거', '카레', '김밥', '족발', '보쌈', '라면', '초밥',

 '돈까스', '파스타', '닭발', '우동', '오돌뼈', '떡볶이']

dinner = random.choice(menu) # 랜덤으로 하나 선택

print(dinner)


점심 또는 저녁메뉴로 뭘 먹어야 할지 매번 고민인 당신에게

파이썬 random 모듈이 오늘의 식사 메뉴를 직접 선택해주는 프로그램을 만들어보았습니다.

random.choice() 함수는 매개변수로 입력된 리스트 중 랜덤으로 하나를 선택해주는 함수입니다.

menu의 리스트에 메뉴를 더 추가하시고 직접 저녁메뉴를 골라보세요!



④ 랜덤 문자열 생성

또한 문자열 중 랜덤으로 문자를 추출해 랜덤 문자열(임의의 문자열)을 만들어서 

비밀번호 또는 코드로 사용할 수 있습니다.

import random

import string

pw = "".join([random.choice(string.ascii_uppercase) for _ in range(10)]) # 대문자

pw1 = "".join([random.choice(string.ascii_lowercase) for _ in range(10)]) # 소문자

pw2 = "".join([random.choice(string.ascii_letters) for _ in range(10)]) # 섞어서

print(pw) # BAISKPLYXR 출력

print(pw1) # rhgopkcbew 출력

print(pw2) # fdUFmexRKU 출력


⑤ 중복 되지 않는 난수 생성

난수를 생성하여 사용하다보면 중복되는 숫자들이 많은데, 이를 해결하기 위해 간단한 코드를 

삽입하여 해결 가능합니다.

import random


myList = []

num = random.randrange(0, 10)


for i in range(10) :

    while num in myList : # 중복될 경우

        num = random.randrange(0, 10) # 다시 난수 생성

    myList.append(num) # 중복 되지 않은 경우만 추가


# myList.sort() # 정렬이 필요하다면

print(myList)




이상 '파이썬 난수 생성'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.


이번에는 자바에서 크기가 동적인 배열을 사용할 때 주로 사용하는 

두가지 클래스 벡터(Vector)와 어레이리스트(ArrayList)에 대해 

비교분석 해보겠습니다.


먼저 벡터에 대한 설명입니다.


☞ Vector란?

- 벡터 클래스는 예전의 자바에서 제공했던 레거시 클래스입니다.

- 레거시 클래스란 Collections 프레임워크가 포함되어 있지 않던 초기 자바 버전에서 정의한 인터페이스입니다.

- 현재는 재구성 및 설계되어서 현재의 Collections 프레임워크와 완벽하게 호환됩니다.


 Vector의 특징

- 필요에 따라 크기를 동적으로 조절할 수 있는 동적배열을 구현합니다.

- 배열과 마찬가지로 정수 인덱스를 이용하여 배열에 액세스 할 수 있습니다.

- 동기화(Thread Safe) 되어있으며 한번에 하나의 스레드만 벡터의 메소드를 호출 할 수 있습니다.


※ 벡터에 대한 사용법은 추후에 포스팅하겠습니다.



다음 어레이리스트에 대한 설명입니다.


☞ ArrayList란?

- Collections 프레임워크의 일부이며 java.uitl 패키지 내에 존재합니다.

- 벡터와 마찬가지로 동적 배열을 사용하기 위해 사용됩니다.


☞ ArrayList의 특징

- 자바 표준 배열보다 약간 느릴수 있지만 배열에서 많은 조작이 필요로할때 유용하게 사용됩니다.

- 기본 데이터 타입(int, char 등)에 대해 만들수 없기때문에 Integer, Object 등의 객체에 대해 참조해서 사용합니다.


※ 어레이리스트에 대한 사용법은 추후에 포스팅하겠습니다.



이렇게 비슷한 두 클래스 벡터와 어레이리스트의 차이점은 무엇이며 어떤 상황에서 어떤 클래스를 사용 야 하는

지에 대해 알아보겠습니다.

실제로 두 클래스는 많은 차이점이 있지만 이 포스트에서는 주요 차이점에 대해서만 언급하겠습니다.


ArrayList와 Vector의 주요 차이점


1. 동기화(Synchronize)

Vector가 동기화 된다면 ArrayList는 동기화가 되지않은 상태입니다.

쉽게말해 Vector는 한번에 하나의 스레드만 엑세스(접근) 가능하며, ArrayList는 동시에 여러 스레드가 

작업할 수 있습니다.

ArrayList에서 여러 스레드가 동시에 엑세스하는 경우 개발자가 명시적으로 동기화하는 코드를 추가해야합니다.



2. 스레드 안전(Thread Safe)

스레드 안전이란 멀티 스레드 프로그래밍에서 여러 스레드가 동시에 접근이 이루어져도 프로그램 실행에 

문제가 없음을 뜻합니다.

앞서 말했듯이 Vector는 동기화 되어있기 때문에 한번에 하나의 스레드만 접근할 수 있기때문에 스레드 

안전합니다.

ArrayList는 동기화되지 않았기 때문에 명시적으로 동기화 할 필요가 있습니다.

 

3. 성능

ArrayList는 동기화 되지않았기 때문에 동기화 된 벡터보다 더 빠릅니다.


4. 크기 증가

Vector와 ArrayList 모두 동적 배열 클래스로 최대 인덱스를 초과할 때 추가되는 인덱스 수가 다릅니다.

Vector는 현재 배열의 크기의 100%가 증가하며, ArrayList의 경우 현재 배열의 크기의 50%가 증가합니다.



★ 결론

멀티스레드 환경이 아닌 경우 ArrayList를 사용하는것이 바람직합니다.

Vector를 사용하기 위한 명시적 요구 사항이 없는경우 ArrayList를 사용하도록 합시다.



이상 '자바 벡터와 어레이리스트의 비교'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.


이번에는 파이썬을 활용하여 지메일(Gmail)로 메일 보내기에 대해 알아보겠습니다.

파이썬에서 메일을 보내기 위해서는 외부 라이브러리가 별도로 필요하지 않으며,

'SMTP lib' 이라는 기본 라이브러리를 제공합니다.

SMTP(Simple Mail Transfer Protocol)이란 인터넷 상의 유효한 이메일 아이디로

이메일을 보내는 데 사용되는 클라이언트입니다.


또한 지메일 외에 다른 메일 서비스도 제공하는데, 이번시간에는 지메일에 대해서만 다루겠습니다.

지메일 계정에서 메일을 보내는 단계는 매우 간단하며,

아래에 소개한 순서대로만 따라오시면 누구나 쉽게 프로그램을 통해 메일을 보낼 수 있을거에요.

(전체 코드는 페이지 맨 아래에 첨부하였습니다.)


자 그럼 시작하겠습니다.

1. 먼저 smtp를 사용하기위해 모듈을 추가해야겠죠?

아래 코드와 같이 추가합니다.

import smtplib

from email.mime.text import MIMEText

smtplib은 SMTP를 사용하기 위한 모듈이고, MIMEText는 메일을 보낼 때 메시지의 제목과 본문을

설정하기 위한 모듈이라고 보시면 되겠습니다.


2. 다음 SMTP 세션을 아래 코드와 같이 설정합니다.

# 세션 생성

s = smtplib.SMTP('smtp.gmail.com', 587)

세션을 만들기 위해 SMTP 인스턴스를 이용하여 SMTP 연결을 캡슐화합니다.

첫번째 매개변수는 지메일을 사용하기 위한 SMTP 변수이며,

두번째 매개변수는 포트번호를 입력합니다. 지메일의 경우 포트번호 587을 사용합니다.


3. 다음 순서로 지메일은 보안상의 이유로 SMTP연결을 TLS(전송 계층 보안) 모드로 설정해야 합니다.

지메일 TLS 보안은 아래 코드와 같이 설정합니다.

# TLS 보안 시작

s.starttls()


4. 그다음 지메일 계정 로그인을 아래 코드와 같이 인증합니다.

# 로그인 인증

s.login('지메일 계정', '앱 비밀번호')

지메일 SMTP의 로그인을 인증하기 위해서는 지메일 계정과 앱 비밀번호가 필요합니다.

지메일 계정은 모두 갖고 계시겠죠? xxxxx@gmail.com < 이런 형식을 입력하시면 됩니다.

그렇다면 앱 비밀번호는 무엇일까요?



단순히 계정 비밀번호를 입력해서는 안됩니다!

또한 지메일 계정을 다른 디바이스에서 사용하기 위해서는 IMAP을 설정해주어야 하는데,

앱 비밀번호 생성 및 IMAP 설정 방법은 아래와 같습니다.


☞ IMAP 설정하는 방법

1. 지메일 계정에 로그인합니다.


2. 우측 상단에 아래 사진과 같이 톱니바퀴 모양의 아이콘을 눌러 설정에 들어갑니다.


3. 상단의 카테고리중 '전달 및 POP/IMAP' 카테고리를 선택하고 IMAP 액세스에서

IMAP 사용을 눌러줍니다.


4. 변경사항 저장을 꼭 눌러줍시다.


※ IMAP을 설정하지 않을 경우 아래와 같은 보안 메일을 받게됩니다.


앱 비밀번호 생성하는 방법

1. 여기에 접속합니다. 접속하시면 아래와 같은 사진이 나옵니다.

앱 비밀번호를 얻기 위해서는 2단계 인증을 완료해야합니다.

2단계 인증을 누르고 사이트에서 시키는 대로 해줍시다...(휴대폰 인증 해줍니다)

2단계 인증이 끝나고 나면 앱 비밀번호를 생성할 수 있는 화면이 위 사진과 같이 나타나게됩니다.


2. 앱 비밀번호 생성하기

본인이 사용하는 프로그램에 대한 앱과 기기를 선택해줍니다.

본 포스트는 파이썬을 활용한 메일보내기 프로그램이기 때문에 

앱은 메일을 선택하고, 기기는 Windows 컴퓨터를 선택해줍니다.

그러면 생성버튼이 활성화 되는데, 생성버튼을 눌러주도록 합니다.



3. 아래 노란색 박스에 앱 비밀번호(16자리)가 생성되면 해당 비밀번호를 복사해서

위 코드에서 로그인 인증부분의 앱 비밀번호에 복사해줍니다.

이로써 IMAP 설정 및 앱 비밀번호 생성이 완료되었습니다.

다시 코드로 돌아갑시다~


5. 메시지 작성

이메일을 보내기 위해서는 메일의 제목과 본문 내용이 필요하겠죠?

아래 코드와 같이 작성하시면 됩니다.

# 보낼 메시지 설정

msg = MIMEText('내용 : 본문내용 테스트입니다.')

msg['Subject'] = '제목 : 메일 보내기 테스트입니다.'


6. 메일을 보내고 세션을 종료합니다.

# 메일 보내기

s.sendmail("보내는 이메일", "받는 이메일", msg.as_string())


# 세션 종료

s.quit()

보내는 이메일에 본인의 지메일 계정을 입력하고, 받는 이메일에 받는 사람의 이메일 계정을 적습니다.

저는 받는 이메일에 제 네이버 메일을 작성했습니다.


자 이로써 모든 코드를 작성했고, 실행버튼을 눌러 실행해봅시다.

로그나 표준입출력을 설정하지 않았기 때문에 따로 오류 코드가 뜨지않는다면

성공적으로 프로그램이 실행된 것입니다.

이제 받는 이메일로 설정된 네이버 이메일로 가보겠습니다.


위 사진과 같이 아주 잘 보내지고 받아지는것을 확인 할 수 있습니다.

아래에 프로그램 전체 코드를 첨부합니다.


import smtplib

from email.mime.text import MIMEText


# 세션 생성

s = smtplib.SMTP('smtp.gmail.com', 587)


# TLS 보안 시작

s.starttls()


# 로그인 인증

s.login('지메일 계정', '앱 비밀번호')


# 보낼 메시지 설정

msg = MIMEText('내용 : 본문내용 테스트입니다.')

msg['Subject'] = '제목 : 메일 보내기 테스트입니다.'


# 메일 보내기

s.sendmail("보내는 이메일", "받는 이메일", msg.as_string())


# 세션 종료

s.quit()


받는 이메일을 wjhv115@naver.com로 설정해서 열코에게 이메일을 보내보세요. ^^

추첨을 통해 티스토리 초대장을 드립니당!





이상 '파이썬 메일보내기'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.





안녕하세요 열코입니다.

안드로이드 앱 개발 중 알림 기능을 구현하는 도중 휴대폰이 꺼져있는 상태에서

알림이 발생하면 화면을 깨우는 기능이 필요하여 검색하는 도중

안드로이드에서 제공하는 WakeLock에 대해 알게되었고 이에 대한 내용을 정리했습니다.

WakeLock은 PowerManger 클래스의 메소드이며 앱이 항상 켜져있음을 나타내는 메커니즘입니다.

그러면 이제 WakeLock을 사용하는 방법에 대해 알아보겠습니다.


안드로이드 기능 WakeLock을 사용하기 위해서는 안드로이드 권한을 얻어야합니다.


※ WakeLock 기능 사용을 위해 안드로이드 권한 얻는 법

WakeLock 권한을 얻는 방법은 간단합니다.

AndroidManifest.xml에 다음과 같은 코드를 추가합니다.

<uses-permission android:name="android.permission.WAKE_LOCK" />




안드로이드에게 WakeLock 권한을 얻었으니 이제 사용하러 가야겠죠?

MainActivity로 갑니다.

WakeLock을 사용하기 위해 PowerManager와 WakeLock객체를 선언해야합니다.

WakeLock을 사용하려는 코드쪽이나 클래스 상단부분에 다음과 같이 선언합니다.


PowerManager powerManager;

PowerManager.WakeLock wakeLock;


그리고 WakeLock을 사용하려는 코드쪽이나 onCreate 클래스내에 다음과 같이 정의합니다.


powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE);

wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "WAKELOCK");


WakeLock 객체 정의 부분에 newWakeLock 함수의 매개변수에 대한 설명입니다.


PowerManger.SCREEN_BRIGHT_WAKE_LOCK : CPU와 화면을 밝게하며 키보드는 off 상태입니다.

(여기서 화면을 살짝 어둡게 키기위해서 PowerManger.DIM_WAKE_LOCK을 사용할 수도 있습니다.

또한 CPU만 On시키기 위해 PowerManger.PARTIAL_WAKE_LOCK을 사용하기도 합니다.)

PowerManger.ACQUIRE_CAUSES_WAKEUP : WakeLock에게 조명이 켜지도록 합니다.

PowerManger.ON_AFTER_RELEASE : WakeLock이 Release되고 조명이 오래 유지되도록 합니다.


자 이제 WakeLock을 사용하기 위한 모든 준비가 끝났습니다.

WakeLock을 사용하려는 코드쪽으로 이동해서 다음과 같은 코드를 추가합니다.


wakeLock.acquire(); // WakeLock 깨우기

wakeLock.release(); // WakeLock 해제



위와 같이 acquire() 함수를 통해 잠들어있는 단말기를 깨울 수 있습니다.

여기서 바로 release() 함수를 통해 WakeLock을 해제해줍니다.

WakeLock을 사용하는 순간 단말기에 많은 배터리가 지속해서 소모하기 때문에 WakeLock이

더이상 필요없는 시점에 최대한 빨리 release() 작업을 수행하는것이 바람직합니다.

그렇기 때문에 단말기를 깨운 직후 바로 WakeLock을 해제해주는 것입니다.


또한 acquire() 함수에 long 형식의 매개변수를 추가함으로써 WakeLock을 해제하기 전까지

시간제한(milisecond 단위)을 지정할 수도 있습니다.


또한 안드로이드 WakeLock에 대해 더 궁금하신 사항은 여기를 확인하세요.



이상 '안드로이드 WakeLock'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.




to Top