[Kotlin] val 프로퍼티에 대해서


Android App 개발시 Java를 사용할때에는 상수를 정의할때, final 을 사용했습니다.


처음 Kotlin을 접했을때에는 상수를 정의할때에는 어떤것을 써야하지? 라는 의문이 생겼고 지금까지는 val 프로퍼티가 상수로 불변값으로 생각했었습니다.


하지만 Kotlin 사이트내 설명 문구에서


"Classes in Kotlin can have properties. These can be declared as mutable, using the var keyword or read-only using the val keyword."


진하게 표시된 Read-Only 라는 글이 보이시나요?


네, 그렇습니다. immutable이 아닌 read-only 네요..;;


갑자기 궁금해져서 val 가 immutable이 아닌것을 확인해보고 싶었습니다.


테스트 코드 가동!!



class KotlinSpec {

    interface Counter {
        val count: Int
    }

    class SomeCounter: Counter {
        var _counter = 0

        override val count: Int
            get() = _counter++
    }

    @Test
    fun isValMutableTest() {
        val counter = SomeCounter()
        assertEquals(counter.count, 0)
        assertEquals(counter.count, 1)
    }
}


위와 같이 코드를 짜서 테스트를 돌리니 테스트가 정상으로 성공하네요.


따로 getter를 두지 않고 변수 선언과 동시에 초기화를 하게 되면 set을 할 수 없으니 immutable과 같다고 볼 수 있겠지만, 정확하게 알고 가는게 좋을것 같습니다.

(레퍼런스 사이트에서 영어라고 꼼꼼하게 읽어보지 않은 제 잘못이 크죠...)


간단한 내용이지만 읽어주셔서 감사합니다~

[액티비티내 화면 캡처 방지하기]


오래간만에 블로그에 글을 남기네요^^;;


다시 작은글부터 시작해서 하나 둘씩 제가 성장해가는 내용들을 남겨보고 싶습니다..



[Java Source Code]

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);


[Kotlin Source Code]

window.addFlags(WindowManager.LayoutParams.FLAG_SECURE)


코틀린이 안드로이드 공식언어로 채택된 만큼 최대한 코틀린을 사용해보려고 합니다 ㅎㅎ


화면캡처 방지 소스코드를 위의 한줄을 액티비티의 onCreate 호출시 설정해두면 적용이 됩니다.


만약 액티비티내 특정 영역에서 화면 캡처를 허용해야한다면, window.clearFlags를 사용하시면 됩니다.


여러 단말을 모두 테스트 해본것은 아니지만, 일부 단말에서는 "보안정책에 따라 화면을 캡처할 수 없습니다." 라는 토스트 메시지가 발생합니다.

알파값이 0.0 의 경우는 0% 라고 생각하면 된다.

100%  FF

99% — FC

98% — FA

97% — F7

96% — F5

95% — F2

94% — F0

93% — ED

92% — EB

91% — E8

90% — E6

89% — E3

88% — E0

87% — DE

86% — DB

85% — D9

84% — D6

83% — D4

82% — D1

81% — CF

80% — CC

79% — C9

78% — C7

77% — C4

76% — C2

75% — BF

74% — BD

73% — BA

72% — B8

71% — B5

70% — B3

69% — B0

68% — AD

67% — AB

66% — A8

65% — A6

64% — A3

63% — A1

62% — 9E

61% — 9C

60% — 99

59% — 96

58% — 94

57% — 91

56% — 8F

55% — 8C

54% — 8A

53% — 87

52% — 85

51% — 82

50% — 80

49% — 7D

48% — 7A

47% — 78

46% — 75

45% — 73

44% — 70

43% — 6E

42% — 6B

41% — 69

40% — 66

39% — 63

38% — 61

37% — 5E

36% — 5C

35% — 59

34% — 57

33% — 54

32% — 52

31% — 4F

30% — 4D

29% — 4A

28% — 47

27% — 45

26% — 42

25% — 40

24% — 3D

23% — 3B

22% — 38

21% — 36

20% — 33

19% — 30

18% — 2E

17% — 2B

16% — 29

15% — 26

14% — 24

13% — 21

12% — 1F

11% — 1C

10% — 1A

9% — 17

8% — 14

7% — 12

6% — 0F

5% — 0D

4% — 0A

3% — 08

2% — 05

1% — 03

0% — 00


1. 코틀린을 사용하기 위한 사전 작업


(1) 플러그인 설치


안드로이드 스튜디오에서 코틀린을 사용하기 위해서는 플러그인 설치를 우선적으로 진행해야합니다.


아래 보이는 이미지와 같이 Settings -> Plugins 로 이동한 뒤,


Install JetBrains plugin... 버튼을 클릭합니다.





그리고 나서 아래 그림과 같이 검색창에 kotlin 을 입력 한 뒤 코틀린 플러그인을 설치 후 안드로이드 스튜디오를 재시작 해줍니다.




(2) 빌드스크립트 (build.gradle)에 플로그인 추가


 - 프로젝트 빌드 스크립트 파일을 열고 난 후, 아래와 같이 추가 합니다.


[build.gradle]

buildscript {
repositories {
jcenter()
mavenCentral() // 코틀린을 사용하기 위한 추가
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.0.0' // 코틀린 플러그인 적용
}
}

allprojects {
repositories {
jcenter()
mavenCentral() // 코틀린을 사용하기 위한 추가
}
}


- 모듈 빌드 스크립트 파일을 열고 난 후, 추가 해야하는 부분은 아래와 같습니다.


[app/build.gradle]

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' // 코틀린 플러그인을 적용합니다.

android {
compileSdkVersion
24
buildToolsVersion "24.0.2"

.....//중략
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

sourceSets {
main.
java.srcDirs += 'src/main/kotlin' // src/main/kotlin 디렉터리를 소스 디렉터리에 추가합니다.
}
}

repositories{
mavenCentral()
}

dependencies {
compile fileTree(
dir: 'libs', include: ['*.jar'])
compile
'com.android.support:appcompat-v7:24.+'
....'
compile 'org.jetbrains.kotlin:kotlin-stdlib:1.0.5' // 코틀린 라이브러리를 참조하도록 설정합니다.
}


코틀린을 사용하여 작성한 코드를 별도의 디렉토리로 분리하기 위해 sorceSets 부분을 정의했습니다.


src/main/kotlin 폴더를 생성하지 않았기 때문에 안드로이드 스튜디오의 Project 뷰를 Android -> Project로 변경하고 src/main 폴더에 kotlin 폴더를 생성합니다. 

(설정이 제대로 되었다면 java 폴더와 같이 kotlin 폴더의 색상 또한 파란색 폴더 [소스코드] 로 변경되는것을 확인할 수 있습니다)






이클립스에서는 custom debug keystore 를 사용해서 한개의 프로젝트를 여러 PC에서 같은 컴파일을 할 수 있게 했는데

Android Studio에서는 해당기능이 안보이는것 같아 사용하지 않고 있다가 이제서야 방법을 찾게 되어 블로그에 올릴 수 있게 되었다.


- Eclipse 에서 Custom debug keystore 지정화면 -

(참고 URL : http://stackoverflow.com/questions/17189076/what-is-the-equivalent-of-eclipse-custom-debug-keystore-in-android-studio)


Android Studio 에서는 gradle을 통해 빌드를 하기 때문에 gradle에 설정을 해야한다.


제가 알고 있는 방법은 2가지입니다.


(1) Project Structure 옵션을 통해 등록하기


1. File 메뉴 클릭 후 -> Project Structure 클릭 (Ctrl + Alt + Shift + S 혹은 아래 버튼 클릭해도 됨)



2. Modules 부분의 app 클릭, 우측의 Signing Tab 클릭



3. 아래와 같이 입력, 보통 debug key store 파일은

윈도우 : c:\User\사용자이름\.android\debug.keystore 이다.

리눅스 : /home/username/.android/debug.keystore

MAC : /Users/username/.android/debug.keystore



4. OK 버튼을 클릭하고 나면 build.gradle (app 폴더) 파일에 아래와 같이 생성된다.


signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storeFile file('C:/Users/Donghyun Kim/.android/debug.keystore')
storePassword 'android'
}
}


여기에서 buildTypes 부분에 아래와 같이 추가한다.

debug {
signingConfig signingConfigs.debug
}


(2) gradle.properties 파일에 경로를 따로 빼놓기


(1) 방법의 4,5 번을 진행 후 signingConfigs에 들어가는 값을 gradle.properties로 뺀다. (서명키 보안 강화하기 방법이다)

gradle.properties 파일은 프로젝트를 생성할때 기본으로 생성되며, 만약에 생성이 안되어있으면 프로젝트 폴더내에 생성하면 된다.


properties 파일내에 keystore 파일에 대한 정보를 기입한다.

(debug_keystore 는 제가 따로 사용하기 위해 네이밍한것이기 때문에 변경가능합니다)


debug_keystore=경로
debug_keystore_pass=android
debug_key_alias=androiddebugkey
debug_key_pass=android


(2) signingConfigs 파일에 아래와 같이 기입한다.


signingConfigs {
def Properties props = new Properties()
def propFile = new File('gradle.properties')
if(propFile.canRead())
props.load(new FileInputStream(propFile))
debug {
storeFile file(props['debug_keystore'])
storePassword props['debug_keystore_pass']
keyAlias props['debug_key_alias']
keyPassword props['debug_key_pass']
}
}


슬랙에서 분명 Bold처리가 될텐데라는 생각으로 자료를 검색하니 볼드말고도 재밌는것들이 많이 있습니다.


참고 사이트 : https://get.slack.help/hc/en-us/articles/202288908-Formatting-your-messages


1. 강조 (bold), 기울임

bold 처리할 글자 양쪽 끝에 * 표시를 붙인다.

ex> 지금은 *bold test* 중입니다.

기울임은 글자 양쪽 끝에 _ 표시를 붙인다.



2. 취소선

취소선을 적용할 글자 양쪽 끝에 ~ 표시를 붙인다.

ex> ~취소선입니다~


3. • 표시, 개행

윈도우 : Alt + 0149 (숫자키로)

MAC : Alt + 8

개행은 Shift + Enter


4. Blockquote

한줄은 >

여러줄은 >>>


5. Code Block

한줄에 대해 적용하려면 원하는 글자 양쪽 끝에 ` 표시를 붙인다 (여러줄에 걸쳐 표시를 붙이게 될 경우 적용 안됨)

여러줄에 대해 적용하려면 원하는 글자 양쪽 끝에 ``` 표시를 붙인다.


'개발자 > Slack' 카테고리의 다른 글

[Slack] 슬랙에서의 볼드처리 (Slack Formatting)  (0) 2016.09.06
[Slack] 계정 생성하기  (0) 2016.08.10
  • 슬랙 사이트에 접속한다. https://slack.com/
  • 화면처럼 입력창에 이메일 주소를 입력하고 ‘creat a new team’ 버튼 클릭
  • 팀 이름을 적은 후에 Next 클릭(영문으로만 작성할 수 있음)
  • 웹주소를 지정한 후 Next 클릭 - 이미 사용 중인 웹주소를 입력한 경우에는 새로운 주소로 다시 입력하도록 안내된다.
  • 사용자명 지정 후 Finish 클릭
  • 앞서 지정한 내용들 최종 확인한다. 별다른 이상이 없을 시에는 Creat 클릭
  • 초대할 사람들의 주소를 입력하고 Send 클릭(건너뛰고 싶으면 Skip for now 클릭)

  • 아래와 같이 팀 계정이 생성되었다.

  • 화면 왼쪽에서 + Invite people을 클릭하여 구성원을 초대할 수 있다. 무료계정에서는 Full Members 초대하기만 가능하다. 이메일 주소만 입력해도 무방하며, Add another 버튼을 클릭해서 더 많은 구성원을 입력할 수 있다. 다 입력했으면, ‘Invite (입력한 인원 수) Person’ 버튼 클릭.

  • 성공적으로 초대되었다면 아래와 같은 화면을 볼 수 있을 것이다.
  • 초대받은 사람의 경우에는 아래 화면처럼 이메일을 받게 된다. Join team을 클릭하고, Username(사용자명)과 패스워드를 입력한다.
  • 성공적으로 수락 완료 !

  • 유료 버전으로 업그레이드하기 위해서는, slack 사이트 첫 화면에서 오른쪽 상단 메뉴의 Pricing 클릭하여 다음의 상품들을 비교, 선택한다.

참고 URL : https://ufo101.gitbooks.io/-/content/slack_acc4_c815_c0dd_c131_d558_ae30.html


'개발자 > Slack' 카테고리의 다른 글

[Slack] 슬랙에서의 볼드처리 (Slack Formatting)  (0) 2016.09.06
[Slack] 계정 생성하기  (0) 2016.08.10

< Gradle 철저 입문 >

도서 링크http://bit.ly/1IOEqIi


소개글


그레이들(Gradle)은 차세대 빌드 툴로 주목받는 오픈 소스 제품이다.

이 책은 그레이들의 모든 것을 다루는 국내 첫 그레이들 바이블이다.

그레이들 설치부터 자바 프로젝트 빌드, 빌드 스크립트 작성, 의존관계 관리, 테스트 자동화, 안드로이드 프로젝트 적용, 빌드 결과물 퍼블리싱, CI 서버 연동, 다른 빌드 툴로 이식하는 방법까지 다양한 예제와 그림을 사용해서 자세히 설명한다.

 그레이들의 기본 개념은 물론, 실제 업무에서 그레이들을 적용할 때 참고할 수 있는 실용적인 내용들로 구성하여 그레이들을 처음 사용하는 사람부터 이미 사용하고 있는 사람까지 곁에 두고 필요할 때마다 찾아볼 수 있다.


±׷¹À̵éöÀúÀԹ®ǥÁö-ÀÔü.jpg (550×550)


도서 서평 이벤트

《카이 호스트만의 코어 자바 8》

이제 고전이 된 《Core Java™》가 핵심만 간추려 담은 Impatient 콘셉트로 다시 태어났다. 이 책은 데이터 타입이나 기초 문법, 객체 지향 프로그래밍은 100쪽 내로 핵심만 짚고 넘어간다. 이어서 자바 8에 추가된 람다 표현식을 비롯하여, 스트림, 병행 프로그래밍, 날짜와 시간 같은 최신 라이브러리에 관한 내용도 담았다. 단순히 자바 8에 추가된 개념과 특징을 기존 자바에 덧붙인 것이 아니라 기본 문법부터 라이브러리까지 현대 자바의 시각으로 자바의 모든 면을 배울 수 있게 해준다.

*도서 소개 ▶ http://bit.ly/1kbJcDS


웹 엔지니어의 교과서

현업 웹 엔지니어가 신입사원이 꼭 알아두길 바라는 내용을 다룬다. 웹 엔지니어가 어떤 일을 하는지부터 프런트 엔드, 서버사이드 기술까지 골고루 담았으므로 신입사원 교육에도 사용할 수 있다.

*도서 소개  http://bit.ly/1OhCPXA

 

Gradle 철저 입문

그레이들(Gradle)은 차세대 빌드 툴로 주목받는 오픈 소스 제품이다. 이 책은 그레이들의 모든 것을 다루는 국내 첫 그레이들 바이블이다. 그레이들 설치부터 자바 프로젝트 빌드, 빌드 스크립트 작성, 의존관계 관리, 테스트 자동화, 안드로이드 프로젝트 적용, 빌드 결과물 퍼블리싱, CI 서버 연동, 다른 빌드 툴로 이식하는 방법까지 다양한 예제와 그림을 사용해서 자세히 설명한다. 그레이들의 기본 개념은 물론, 실제 업무에서 그레이들을 적용할 때 참고할 수 있는 실용적인 내용들로 구성하여 그레이들을 처음 사용하는 사람부터 이미 사용하고 있는 사람까지 곁에 두고 필요할 때마다 찾아볼 수 있다.

*도서 소개  http://bit.ly/1IOEqIi


*참여 방법

이벤트 기간 동안 원하는 도서 1권의 제목과 받고 싶은 이유를 간략하게 작성하신 후, 본 게시물과 신청하신 도서 소개 링크(위의 url 주소)를 본인의 블로그나 SNS 등에 퍼가서 게시해주시면 됩니다.

게시한 곳을 덧글로 함께 남겨주시면 당첨 확률이 더 높아지겠죠^^


*추첨 방식 

댓글을 다신 분 중 총 15명을 추첨하여 도서를 보내드립니다(각 도서당 5명).



*이벤트 기간

2015년 12월 22일(화)~2015년 12월 31일(목)까지



*당첨자 발표

2016년 1월 4일(월)


*서평 등록

당첨되신 분들은 책을 배송 받은 후 교보문고, Yes24, 알라딘, 반디앤루니스, 영풍문고, 네이버 중에 2곳 이상 서평을 남겨주세요.

서평을 남기시고 본 게시물의 댓글에 링크를 달아주세요^^


'공유' 카테고리의 다른 글

[도서소개] Gradle 철저 입문  (3) 2015.12.24
  1. 2015.12.25 09:54

    비밀댓글입니다

  2. 1466103382 2016.06.17 03:56 신고

    좋은글 감사

  3. 1467029186 2016.06.27 21:06 신고

    반가와요

저는 안드로이드를 OS Ver 2.2 부터 지원하는 앱을 만들기 때문에 Notification 같은 경우에도


NotificationCompat 를 사용해서 알림을 표시합니다.


Ongoing 알림 같은 경우에는 계속 표시가 되어있어야하기 때문에 상단바나 잠금화면에서 알림이 표시되지 않았으면 하는 바램이 있었는데요.


해당 부분에 대해 이제야 찾았네요~!


해결방안

 NotificationCompat.Builder -> setPriority(NotificationCompat.PRIORITY_MIN);


위의 우선순위(Priority)를 Min(-2)로 사용하게 되면 알림영역에는 알림을 표시하고 있지만, 상단바나 잠금화면에서는 알림을 표시하지 않습니다.


레퍼런스 사이트에는 이렇게 적혀 있네요.


Set the relative priority for this notification. Priority is an indication of how much of the user's valuable attention should be consumed by this notification. Low-priority notifications may be hidden from the user in certain situations, while the user might be interrupted for a higher-priority notification. The system sets a notification's priority based on various factors including the setPriority value. The effect may differ slightly on different platforms.

취업 후 첫 해외출장~!! 일본 도쿄로 출발하게 되었는데요,

좀 급작스럽게! 그리고 홀로 출발하게 되어 많이 당황했습니다.

우선 준비물부터 챙겨보자고 정리를 해보는데...

첫 생각이 드는것이 인터넷~!


나혼자 가는데... 일본말도 잘 못하는데... 인터넷이라도 잘되어야지 라고 생각을 하는 찰나,

데이터로밍을 사용하게 되면 인터넷이 3g라서 그런가 무척 느리더라구요.

(요즘 한국의 LTE는 X4인데..)


그러던 찰나, 직상 선배의 추천으로 포켓 와이파이! 를 알아보게 되었습니다.

(포켓 와이파이? 에그 같은것인가..? 라고 생각을 했습니다)


아래 사진이 포켓 와이파이입니다.


samsung | SM-N916S | Normal program | Center-weighted average | F/2.2 | 4.8mm | 2015:05:20 18:47:00

(스카이패스로밍 포켓 와이파이)


일본에서 3G가 아닌 LTE급의 인터넷을 사용할 수 있습니다.


저는 통신사를 SKT를 이용하는데 데이터 무제한 요금제를 사용하면 하루에 9000원인데, 그만큼의 값어치를 못하는것 같더라구요.

포멧 와이파이는 제가 사용한 스카이패스로밍 기준으로 하루에 약 8200원 정도 했던것 같아요~


그런데!!! 제가 사용할때에는 2,000원 할인 쿠폰이 딱!! 예약하는 화면에 있던데요.


링크 : http://www.skypassroaming.asadal.com/bbs.php?table=blog&query=view&uid=34&p=1

(스카이패스로밍 일본 포켓 와이파이 예약화면)


2,000원 할인데 결제할때 카드사용하는것으로 할인되는것도 있어서 생각보다 저렴하게 사용하고있습니다.




저는 김포공항에서 포켓와이파이를 대여했는데요.


홈페이지에서 결제를 하고, 해당 날짜에 공항에서 찾아가면 됩니다.

설명을 보니 인천공항은 따로 센터? 같은것이 있는것 같던데.

김포공항은 물품보관소에서 찾아라고 해서 보관함에 따로 들어있는지 알았어요.


그런데 그게 아니라 물품보관소 가면 사람들이 계시니 말씀하시면 됩니다.

(저는 맨첨에 잘못 찾아온지 알았어요;;;)



(공항 포켓 와이파이 대여 지점)


김포 공항에서는 이용시간은 07:00 ~ 20:00까지구요. 만약에 반납할 경우 그 시간이 아니라면 "ZOO COFFEE"라는 카페에 가시면 됩니다.



samsung | SM-N916S | Normal program | Center-weighted average | 1/24sec | F/2.2 | 0.00 EV | 4.8mm | ISO-125 | Flash did not fire | 2015:05:20 14:45:42


위 사진은 물품을 받았을때의 모습이구요.


samsung | SM-N916S | Normal program | Center-weighted average | 1/30sec | F/2.2 | 0.00 EV | 4.8mm | ISO-160 | Flash did not fire | 2015:05:20 14:46:00


가방안을 열면 , 충전선, 어댑터, 쿠폰, 포켓 와이파이 단말기가 들어있습니다.


samsung | SM-N916S | Normal program | Center-weighted average | 1/24sec | F/2.2 | 0.00 EV | 4.8mm | ISO-125 | Flash did not fire | 2015:05:20 14:46:19


포켓 와이파이 뒷면에서는 SSID, 비밀번호가 적혀 있구요. 포켓 와이파이에 여러대의 기기가 접속할 수 있습니다.


samsung | SM-N916S | Normal program | Center-weighted average | 1/30sec | F/2.2 | 0.00 EV | 4.8mm | ISO-80 | Flash did not fire | 2015:05:20 14:46:49

음.. 이 쿠폰은 다음에 사용할 수 있도록 주시는거겠죠?ㅎㅎ 3000원 할인이면 좋네요 ㅎㅎ


아직 저는 일본에 계속 있는데요 (8일동안 있습니다 ㅠㅠ)

채팅, 음악 등등 전혀 불편함 없이 사용하고 있습니다.


아참!


사용법은

1. 포켓 와이파이 전면에 전원 버튼을 3초 정도 꾹 누르고 있는다.

2. 화면에 글자가 뜨고 안테나가 제대로 서있는지 확인

3. 휴대폰이나 노트북으로 와이파이 연결!


장점은

1. 기본 데이터로밍이라는 속도면에서 차이가 어마어마하다.

2. 데이터로밍보다 비용이 저렴!

3. 단말기 하나로 여러명(기기)이 사용할 수 있으니 더욱 저렴하다!!!!


단점은

1. 휴대폰말고 단말기(포켓와이파이)를 하나 더 들고 다녀야한다는것이 단점!


간혹 사용중에 인터넷이 제대로 안되는 경우가 있다면 단말기 전원을 끈 후 다시 켜주시면 제대로 사용이 됩니다.

(제가 봤을때에는 일본에서 포켓 와이파이를 많이 사용하시는것 같아요~)


자세한 내용은 스카이패스로밍 홈페이지를 참고해주세요


링크 : http://www.skypassroaming.asadal.com/bbs.php?table=blog&query=view&uid=28&p=1 

링크 (포켓와이파이 국가별 화면) : http://www.skypassroaming.asadal.com/bbs.php?table=blog&query=view&uid=27&p=1






'여행 > Japan' 카테고리의 다른 글

일본 데이터로밍? 포켓 와이파이!! 스카이패스로밍  (0) 2015.05.24

+ Recent posts