반응형

지난 시간에 게임 저작권에 대해서 글을 올렸습니다.

이번에 사이트를 확인하다 정책이 변경된 내용이 있어 공유합니다.

내용은 캡콤에서 새로운 게임 스트리밍 정책을 2021년 1월 6일 발표했습니다.

www.capcom.co.jp/site/privacy_06.html

 

株式会社カプコン:カプコン動画ガイドライン

カプコン動画ガイドライン(個人向け) 最終更新日 2021年1月6日 カプコンは、当社タイトルのゲーム映像を使用した魅力的な動画を作成したいと考えるお客様に感謝するとともに、動画の創

www.capcom.co.jp

캡콤 사이트 캡쳐

일본어로 되어 있지만 크롬을 사용해서 번역하면 한글로 확인이 가능합니다.

정책 변경 내용은 개인 사용자는 영리 목적으로 게임 스트리밍을 허용하는 부분과

법인 사업자는 허용하지 않는 부분을 확인할 수 있습니다.

게시 가능한 동영상은 Youtube, Twitch, Twitter, Facebook 이며

게임 공략, 소개, 실황, 해설 동영상을 게시할 수 있습니다.

단 사용자가 만든 콘텐츠를 회사의 공식 동영상으로 홍보할 수 없습니다.



또한 지난 글에 말씀 드린것 처럼 음악은 저작권이 별도 있을 수 있다는 것을 명시했습니다.

스포일러와 부정한 정보 공개는 허용하지 않습니다.

캠콤 사이트 캡쳐

이번 정책에서 가장 크게 변경 된 부분은 법인(프로덕션 소속의 개인 포함)일 경우 동영상 전송을 허용하지 않습니다.

즉 수익을 창출할 수 있는 케이스에서 법인 또는 프로덕션 소속의 개임일 경우 게임 스트림밍을 할 수 없다는 내용입니다.

캡콤은 리메이크와 몬스터 헌터로 많은 인기를 끌면서 정책적으로 법인에서 스트리밍 하는 것을 막으려는 것으로 판단됩니다.

스위치 버전 몬스터 헌트 발매전에 정책을 발표하는 것을 보니 몬스터 헌터 인기를 다시 한번 확인할 수 있겠네요.

모두 변경된 저작권 다시 확인하시고 영상을 업로드 해주세요.

감사합니다.

반응형
반응형

오늘은 코틀린에서 가변 인자를 사용하고 싶을 경우 어떻게 사용해야 하는지 알아보겠습니다.

함수를 사용할 경우 고정된 파라미터를 사용하기도 하지만 가변적인 배열을 사용하고 싶은 경우도 있습니다.

코틀린에서는 이런 경우 vararg를 사용해서 배열을 정의합니다.

    fun IntMax(vararg numbers:Int):String
    {
        val sum = numbers.max()
        return sum.toString()
    }
    
    val rString = IntMax(2,4,7,9,10,15)
    Toast.makeText(this, rString, Toast.LENGTH_SHORT).show()

vararg 를 선언하게 되면 파라미터가 배열러 인식됩니다.

아규먼트(argument) 2, 4, 7, 9, 10, 15를 입력하면 MAX 항목인 15를 리턴합니다.

출력시 15를 확인할 수 있습니다.

INT 형태 배열을 사용해서 INT 가변 인자를 확인 할 수 있습니다.

그럼 이번에는 String을 사용해보겠습니다.

    fun StringAll( vararg StringList:String):String{
        val rText = StringList.joinToString()
        return rText
    }
    
    val rString = StringAll("A","S","D", "H", "I")
    Toast.makeText(this.application, rString, Toast.LENGTH_SHORT).show()

StringAll 함수는 파라미터(parameter) StringList를 vararg로 선언했습니다.

함수 내부에서 String 배열을 확인해서 입력된 아규먼트를 확인할 수 있습니다.

StringAll 함수는 입력된 String를 연결해서 리턴하게 되어 있습니다.

출력 결과 "A,S.D.H.I"를 확인 할 수 있습니다.

vararg는 다른 파라미터와 함께 사용이 가능합니다.

 

 

 

fun AllValue( Value1:Int, Value2:String, vararg StringList:String):String{
        val rText = StringList.joinToString()
        val AllText = Value1.toString() + Value2 + rText
        return AllText
    }

val rString = AllValue(123,"더하기","D", "H", "I")
Toast.makeText(this.application, rString, Toast.LENGTH_SHORT).show()

AllValue 함수는 파라미터 INT, String, vararg String를 사용합니다.

아규먼트 123, "더하기", "D", "H", "I"를 입력합니다.

결과는 "123더하기D,H,J" 입니다.

vararg는 다양한 가변 인자를 사용해서 함수를 유연하게 생성할 수 있습니다.

함수에 한개의 vararg만 사용이 가능합니다.

오늘은 코틀린(Kotlin) vararg에 대해서 알아보았습니다.

감사합니다.

반응형
반응형

유트브 인기가 커지면서 다양한 컨텐츠 영상이 증가하고 있습니다.

그중에서도 가장 쉽게 접할 수 있는 게임 영상은 정말 많습니다.

오늘은 게임 영상 관련해서 저작권 침해 내용에 대해서 알아보겠습니다.

저는 블로그를 하다 이미지 저작권 때문에 크게 힘든적이 있었습니다.

이후 부터 저작권에 대해서 매우 신중하게 생각하면서 블로그 및 유튜브를 운영하고 있습니다.


저작권이란

사람의 생각이나 감정을 표현한 결과물에 대하여 그 표현한 사람에게 주는 권리를 말합니다.


우리가 매일 접하는 게임 같은 경우는 저작권에 대해서 자유롭다고 많이 생각합니다.

 시대가 변하면서 게임 녹화에 대한 기능이 너무 쉽기 때문에 누구나 사용할 수 있어 그런것 같습니다.

기본적으로 유튜브에서는 게임 영상도 저작권이 있다고 확인할 수 있습니다.

support.google.com/youtube/answer/138161?hl=ko

 

비디오 게임 및 소프트웨어 콘텐츠 - YouTube 고객센터

도움이 되었나요? 어떻게 하면 개선할 수 있을까요? 예아니요

support.google.com

명시되어 있는 것처럼 라이선스에 문제가 없을 경우 수익을 창출할 수 있다는걸 확인할 수 있습니다.

자신이 구매한 게임을 진행하면서 유튜브 영상을 업로드해도, 저작권에 문제가 생길 수 있습니다.

게임 영상을 유튜브에 올리기 위해서는 공식 문의사항, 공식 메일 등 다양한 경로로 허가를 받아서 사용해야 합니다.

현재 공식적으로 부분 허용을 하고 있는 게임사 내용을 확인해보겠습니다.

store.steampowered.com/video_policy

 

Video Policy

 

store.steampowered.com

스팀에서는 공식적으로 부분 허용을 하고 있습니다.

모든 게임에 포함되는 내용이 아니기 때문에 스트리밍을 할 경우 추가적으로

허용여부를 개발사측에 정확하게 확인해야 합니다.

forums.ubisoft.com/showthread.php/773563-Ubisoft-policy-on-YouTube-videos-updated-Jan-2016-Forums?s=234f04c293eb61f409deb0a5d57b0aa8

 

Ubisoft policy on YouTube videos [updated Jan 2016] | Forums

Ubisoft policy on YouTube videos [updated Jan 2016] Ubisoft Video Policy Last updated: Jan. 2016 We consider ourselves extremely fortunate to have fans actively engaging and creating with our game content. Using the guidelines below, we encourage you to ma

forums.ubisoft.com

유비소프트에서도 공식적으로 스트리밍을 부분 허용하고 있습니다.

부분 허용은 스트리밍 게임에 문제가 될 수 있는 발언, 이미지, 추가적인 영상과 함께만 하지 않는다면

문제가 없다는 내용입니다.

cdprojektred.com/en/videopolicy

 

CD PROJEKT RED - Award-winning creator of story-driven role-playing games.

Award-winning creator of story-driven role-playing games

cdprojektred.com

CD Projekt RED는 적극적으로 게임 스트리밍을 허용하고 있습니다.

 

이처럼 기본적으로 게임 스트리밍 허용을 하고 있는 게임회사는 생각보다 많이 있습니다.

기본적으로 허용을 하고 있는 게임은 스트리밍 시 문제가 없을 가능성이 매우 높습니다.

 


스트리밍 허용 게임에도 주의해야할 점이 있습니다.


 

게임 스트리밍 시 게임에는 저작권을 허용했지만, 게임 상에서 나오는 음악 및 이미지는 별도 저작권으로 구분 될 수 있습니다.

즉 게임 스트리밍 시 특정 음악에 저작권이 별도로 있다면는 게임과 상관 없이 저작권 문제가 발생할 수 있습니다.

 

이처럼 저작권 문제는 매우 복잡하기 때문에 기본적으로 허용 여부를 반드시 판단하고 제작해야 추후 문제가 없습니다.

처음에 쉽게 시작하려고 하다가 한번에 모든게 물 거품이 될 수 있으니 모두 꼭 한번 확인하고 접근해주세요.

감사합니다.

 

 

 

 

 

 

 

반응형
반응형

어제 애드센스 광고를 등록하고 목록에 적용하려고 하니까

활성화가 안되는 문제가 발생했습니다.

블로그 스킨을 변경해서 그런거 같습니다.

애드센스 광고 설정 화면에서 목록 상단 광고를 클릭하면

치환자가 없다는 메시지를 출력합니다.

반응형
목록 상단 치환자를 직접 추가하라고 합니다.

목록 하단을 활성화하면 이번에는

반응형
스킨에 직접 추가하라고 합니다.

자 그럼 이제 이걸 어떻게 추가하는지 알아보겠습니다.

편집을 하기 위해서 설정 -> 꾸미기 -> 스킨 편집을 클릭해서 우측 상단에 있는 html 편집을 클릭해주세요.

'찾기'를 사용해서 s_list를 검색해주세요.

그럼 확인할 수 있습니다.

이 치환자가 목록 내용입니다.


먼저 위, 아래로 

반응형
 ,  
반응형
 치환자를 복사해주세요.

저장 후 다시 광고 설정에서 활성화를 클릭하면 정상적으로 잘 됩니다.

그런데 전 이상하게 목록 이름에 광고가 위, 아래로 출력됩니다.

그래서

반응형
치환자를 list 아래쪽으로 변경하니까

정상적으로 목록 내용에서 광고를 확인할 수 있었습니다.

광고 설정을 수정하기전에는 상단에 광고가 출력되지 않습니다.

치환자를 적용 후 정상적으로 광고가 출력됩니다.

티스토리는 html 코드를 편집해서 변경하는 방법이 매우 다양합니다.

처음 광고를 추가하시면 꼭 설정에 모든 항목을 활성화 해주세요.

감사합니다.

반응형
반응형

요즘 일이 바빠서 블로그를 관리 하지 못하고 있었습니다.

그런데 광고 수익을 보니 너무나 형편 없어 이상하다 생각해서 티스토리 '헉' 광고가 사라졌습니다.

너무나 당황해서 이것저것 찾아 보니 설정이 모두 변경된 겁니다.

그래서 오늘은 티스토리에 신규 구글 AdSense 추가 방법을 알아보겠습니다.

먼저 프러그인을 확인하면 기존에 사용하던 AdSense가 없습니다.

아무리 찾아봐도 처음보는 내용들 뿐입니다.

이것 저것 확인하다 "수익"이라는 메뉴를 확인할 수 있었습니다.

지금은 설정되어 있는 상태이지만 처음에는 연동하기 버튼만 활성화 되어있습니다.

"연동하기"를 클릭하고 구글 로그인을 완료하면 상세보기가 활성화 됩니다.

그리고 다시 페이지를 확인하니 그래도 광고가 안보입니다.

 

 

 

다시 메뉴를 확인하니까 수익 아래쪽에 "애드센스 관리" 메뉴를 클릭할 수 있습니다.

"광고 설정" 항목에서 원하는 광고를 켜주면 광고가 연동됩니다.

다시 확인하니까 정상적으로 광고를 확인할 수 있습니다.

처음 보는 기능이라서 조금더 사용해보고 좋은 정보 있으면 공유하겠습니다.

혹시 처음 광고가 안뜬다고 당황하지 마시고, 꼭 확인해주세요.

감사합니다.

반응형
반응형

오늘은 유튜브에 사용할 수 있는 음성파일을 만드는 방법에 대해서 알아보겠습니다.

음성파일을 만들 수 있는 다양한 사이트가 있지만 간단하게 다양한 언어를 적용할 수 있는 편리한 사이트가 있습니다.

아래 주소에서 확인 해보세요.

soundoftext.com/

Sound of Text는 무료로 영문은 100자, 한글은 50자까지 사용이 가능합니다.

기본적으로 다양한 언어를 지원해서 간단하게 사용하기 매우 편리합니다.

사용방법은 매우 간단합니다.

유튜브에 사용 글자를 "Text" 항목에 써주세요.

그리고 아래쪽에 잇는 Voice를 선택해주고, "Submit"를 클릭하면 아래쪽에 음성 파일이 생성됩니다.

지원하는 음성은 매우 많습니다.

한글은 조금 어색하지만 무료 버전이 이정도면 만족합니다.

 

한글 변환 파일입니다.

"PLAY"를 클릭하면 음성을 확인할 수 있습니다.

영문 변환 파일입니다.

"DOWNLOAD"를 클릭하면 음성을 다운로드할 수 있습니다.

조금더 높은 퀄리티 음성을 만들고 싶다면 월 5달러로 최대 25만자의 고품질 음성을

받을 수 있습니다.

사이트 중간에 메일과 정보를 확인할 수 있습니다.

하단에는 API 연동 소스를 Git에서 확인할 수 있습니다.

Sound of Text는 매우 심플하면서 간단하게 음성을 만들 수 있는 사이트입니다.

유트브에 텍스트와 음성을 함께 사용하고 싶다면 한번 체험해 보는 것도 좋다고 생각됩니다.

감사합니다.

반응형
반응형

SSD 및 하드 디스크를 구매하면 정상 동작 여부와 속도를 확인해야 합니다.

오늘은 SSD 및 하드 디스크 벤치마크 방법을 알아보겠습니다.

디스크 벤치마크 방법은 여러가지 있지만 대표적인 3가지 프로그램을 알아보겠습니다.

CrystalDiskMark

첫 번째 CrystalDiskMark는 아래 사이트에서 다운로드할 수 있습니다.

crystalmark.info/en/software/crystaldiskmark/

 

CrystalDiskMark

CrystalDiskMark is a simple disk benchmark software. Download Standard Edition Shizuku Edition System Requirements OS Windows XP/Vista/7/8/8.1/10Windows Server 2003/2008/2012/2016/2019 Architecture x86/x64/ARM64 Installer does not support Windows XP/2003(N

crystalmark.info

아래쪽으로 스크롤하면 다운로드 버튼을 확인할 수 있습니다.

CrystalDiskMark 외에도 다양한 프로그램이 있습니다.

ZIP 파일 압축을 풀면 4개의 실행파일이 나오는데 그중 PC 사양에 맞는 프로그램을 선택하면 됩니다.

CrystalDiskMark 실행화면입니다.

초당 최대 읽기와 쓰기 속도, 묶음 전송 속도, 순차 평균 읽기 쓰기 최고 속도, 저용량의 파일 읽기 쓰기 속도를 확인할 수 있습니다.

상단 왼쪽에 있는 "All" 버튼을 클릭하면 동작합니다.

실행 후 SSD 속도 측정 상태를 확인할 수 있습니다.

일반 SSD인데도 500MB/s 이상 속도를 확인할 수 있습니다.

AS SSD Benchmark

두 번째 AS SSD Benchmark는 아래 사이트에서 다운로드할 수 있습니다.

 

 

 

www.techspot.com/downloads/6014-as-ssd-benchmark.html

 

AS SSD Benchmark

Download AS SSD Benchmark. With AS SSD Benchmark you can determine your SSD drive's performance by conducting several specific tests.

www.techspot.com

우측에 있는 다운로드 버튼을 클릭하면 ZIP 파일을 받을 수 있습니다.

ZIP 파일을 풀어주면 프로그램을 확인할 수 있습니다.

하단 "Start"를 클릭하면 파일 읽기 쓰기 속도를 측정할 수 있습니다.

최종 Score가 평가되기 때문에 보기 편리합니다.

ATTO Disk Benchmark

마지막으로 ATTO Disk Benchmark는 아래 사이트에서 다운로드할 수 있습니다.

www.techpowerup.com/download/atto-disk-benchmark/

 

ATTO Disk Benchmark (4.01.0f1) Download

ATTO Disk Benchmark is a very popular harddisk and SSD benchmarking tool. Offers nice features to benchmark RAID setups.

www.techpowerup.com

상단 왼쪽에 다운로드 버튼을 클릭하면 ZIP 파일이 다운로드됩니다.

압축을 풀면 프로그램을 확인할 수 있습니다.

클릭으로 실행해주세요.

ATTO Disk Benchmark는 다양한 크기로 디스크 읽기 쓰기 속도를 측정합니다.

측정 결과는 512B ~ 64MB까지 확인이 가능합니다.

측정 결과 3개 프로그램 모두 500MB/s 이상 확인할 수 있습니다.

SSD 속도 측정을 정확하게 하기 위해서는 BIOS 내부 설정에서 CPU C-States 관련 항목을 모두 Disabled 해줘야 합니다.

CPU 전원 관리 옵션이 활성화되면 4K Q1T1 단일 측정 항목에 영향이 있을 수 있습니다.

또한 InSpectre를 사용해서 Meltdown 및 Spectre는 모두 NO로 설정해주세요.

www.grc.com/inspectre.htm

 

GRC | InSpectre

Easily examine and understand any Windows system's hardware and software capability to prevent Meltdown and Spectre attacks. Now determines and displays whether Intel has produced a microcode update patch for the Spectre vulnerability. “InSpectre” is a

www.grc.com

상기 내용은 일반 사용자분들은 안 하셔도 되지만, 정확한 측정을 원하신다면 꼭 확인해주세요.

최대 속도 측정이 필요할 경우는 USB 케이블 속도도 매우 중요합니다.

다양한 방법을 사용해서 구매한 SSD를 측정하면 정상 여부를 바로 확인할 수 있습니다.

감사합니다.

반응형
반응형

오늘은 코틀린을 사용해서 매주 부자를 만들어주는 로또 랜덤 번호 생성기를 구현해보겠습니다.

로또 번호는 45개의 번호 중 6개의 번호를 선택하는 규칙입니다.

로또 랜덤 볼을 개발하기 위해서는 먼저 로또 볼이 어떻게 구성되어 있는지 확인을 해야 합니다.

최종 로또 랜덤 볼 프로그램은 하단 버튼을 눌러 난수를 발생하여 겹치지 않는 6개의 번호를 생성하는 모습입니다.

로또 볼 이미지를 만들기 위해서 파워포인트를 사용해서 원형을 만들고 색상은 로또 사이트에서 확인하였습니다.

각 볼 이미지는 숫자는 자릿수가 2자리 이므로 위치를 45번 기준으로 정했습니다.

이미지는 아무렇게나 만들어 주세요. 중요한 건 45개의 이미지를 분리해야 합니다.

안드로이드 프로젝트는 "빈 프로젝트"로 설정하고,  코트린(Kotlin)을 선택해주세요.

"res -> drawable"를 선택하고 우클릭하여 "Show in Explorer"을 선택해서 폴더로 이동해주세요.

위에서 만든 45개의 이미지를 "drawable" 폴더에 복사해주십시오.

"drawable" 폴더에 이미지를 복사 후 Android Studio에서 "drawable" 하위에 자동으로 이미지가 등록됩니다.

자 그럼 이제 준비는 모두 완료되었습니다.

먼저 UI를 만들기 위해서 "layout" 하위 "activity_main.xml" 파일을 클릭합니다.

생성된 "<androidx.constraintlayout.widget.ConstraintLayout"를 삭제하고 "LinearLayout"를 새로 생성해줍니다.

ImageView, Button을 세로로 배치하기 위해서입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

orientation 속성은 "vertical"로 변경해주세요.

이제 볼을 저장하기 위한 ImageView를 6개 생성해줍니다.

ImageView는 위치를 고정하기 위해서 "layout_margin" 속성을 30px 정도 주었습니다.

<LinearLayout
        android:id="@+id/ll"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/ballView1"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView2"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView3"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView4"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView5"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView6"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
    </LinearLayout>

ImageView를 하나의 View로 고정하기 위해서 LinearLayout 내부에 구현했습니다.

가장 중요한 내용은 ImageView 속성 ID를 순차적으로 입력해야 합니다.

즉 "@+id/ballView1", "@+id/ballView2", "@+id/ballView3"~ "@+id/ballView6"순으로 지정해주세요.

마지막으로 랜덤 실행을 하기 위해서 버튼을 설정합니다.

 <Button
        android:id="@+id/btStart"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="시작"
        android:textSize="20sp" />

코드가 정상적으로 등록되었다면 Design에서 사진과 같은 것을 확인할 수 있습니다.

상단에 볼을 구현하기 위한 6개의 이미지가 있고 아래쪽에 실행 버튼이 위치합니다.

자 이제 "java" 폴더 하위에 있는 MainActivity.kt 파일을 클릭합니다.

먼저 볼을 저장할 수 있는 전역 변수를 선언합니다.

val BallList = ArrayList<Bitmap>()

BallList는 전역으로 사용하기 위해서 onCreate 위쪽에 선언해주세요.

"drawable"에 저장된 45개의 이미지를 한 번에 로드해서 BallList에 등록하는 코드입니다.

getResources()를 사용해서 저장된 정보 ID를 추출할 수 있습니다.

처음 저장된 이름을 순차적으로 저장하면 for문을 사용해서 한번에 ID를 추출해서 BITMAP을 생성할 수 있습니다.

생성된 BITMAP은 크기를 지정해서 BallList에 "add"함수를 사용해서 저장합니다.

 

 

 

Toast.makeText(this@MainActivity, "Create lottovall image.", Toast.LENGTH_SHORT).show()
        for( i in 0..44)
        {
            var bmp : Int = getResources().getIdentifier("lottoball" + (i + 1), "drawable", packageName )
            var bitmap:Bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), bmp),
                70,70, false)
            BallList.add(bitmap)
        }

상단 Toast 메시지는 실행 구간을 확인하기 위해서 추가했습니다.

이제 저장된 45개의 이미지를 랜덤 하게 생성해서 이미지를 저장해보겠습니다.

먼저 버튼 클릭 이벤트를 설정합니다.

코틀린은 JAVA와 다르게 매우 직관적으로 클릭 이벤트를 설정할 수 있습니다.

val btn : Button = findViewById<Button>(R.id.btStart)

        btn.setOnClickListener{
            Toast.makeText(this@MainActivity, "button start.", Toast.LENGTH_SHORT).show()

            var set: TreeSet<Int> = TreeSet()

            while(set.size < 6){
                val random = Random()
                val num = random.nextInt(45)
                set.add(num)
            }

버튼 ID를 확인하고 setOnClickListener 함수를 설정해줍니다.

랜덤 번호는 겹치면 안 되기 때문에 TreeSet 이진 검색을 사용해서 저장해주세요.

코틀린은 JAVA와 동일한 알고리즘 클래스를 사용할 수 있습니다. 

마지막으로 랜덤으로 설정된 6개의 번호를 ImgView와 연결해줍니다.

Toast.makeText(this@MainActivity, "ball check.", Toast.LENGTH_SHORT).show()

            var nCount = 0
            for( i in set )
            {
                var tmpID : Int =  getResources().getIdentifier("ballView" + (nCount + 1),
                    "id", packageName )
                val imgView = findViewById<ImageView>(tmpID)
                imgView.setImageBitmap(BallList.get(i))
                nCount++
            }

            Toast.makeText(this@MainActivity, "button end.", Toast.LENGTH_SHORT).show()

for문을 사용해서 저장된 Treeset 이미지 번호를 전역 저장된 BallList에서 확인합니다.

ImageView 호출은 nCount를 사용해서 6번 반복하게 설정했습니다.

로또 랜덤 볼 생성 프로그램 실행 사진입니다.

하단 버튼을 클릭하면 새로운 번호가 출력되는 것을 확인할 수 있습니다.

코틀린과 JAVA를 두 개다 구현해보니 확실하게 코틀린이 더 편리합니다.

문법적으로도 매우 깔끔해서 가독성이 좋습니다.

오늘은 코틀린을 사용해서 로또 랜던 볼 생성 프로그램을 만들어 보았습니다.

감사합니다.

반응형
반응형

오늘은 코틀린 형식 확인 및 null에 대해서 알아보겠습니다.

코틀린(Kotlin)은 형식을 유추하기 위해서 굳이 지정하지 않아도 변수 선언 시점에 알아서 확인을 합니다.

하지만 코드가 길어지면 변수 형을 짐작하기 쉽지 않을 수 있습니다.

코틀린(Kotlin) 형식 확인

기본적으로 "text" 변수를 선언하고 텍스트 및 숫자를 대입하면 형식을 자동으로 확인합니다.

즉 "text" 변수에 텍스트를 지정하면 숫자 대입이 불가능합니다.

사진처럼 "text" 변수에 숫자 대입 시 오류를 확인할 수 있습니다.

더욱 정확한 표기를 하기 위해서 코틀린은 자바와 다르게 변수 뒤쪽에 형식을 지정합니다.

var text:String

var intValue:Int

지정된 형식은 처음 선언된 변수로만 대입이 가능합니다.

처음 선언 시점 변수 타입을 저장 후 대입 시 확인하여 오류를 발생합니다.

안드로이드 스튜디오를 사용할 경우 변수 대입 시점에 오류를 바로 확인할 수 있습니다.

하지만 String과 Int를 공통으로 지정할 수 있는 방식이 있습니다.

변수 선언 시점에 "Any"로 지정하면 됩니다.

"Any"는 자바 객체 형식과 동일하며 코틀린에 모든 클래스는 "Any"를 명시적으로 상속하고 있습니다.

"Pair"를 사용해서 변수를 초기화할 경우도 2가지 형태로 가능합니다.

"to"를 사용해서 지정하는 방법과 Pair 생성자를 사용하는 방법입니다.

상기 방법은 map 형태에도 동일하게 사용됩니다.

코틀린(Kotlin) null 사용법

코틀린(Kotlin)은 자바 시스템에서 가장 흔한 버그 패턴 "NullPointerException"을 방어하게 설계되어 있습니다.

기본적으로 null 초기화를 허용하지 않습니다.

자바 시스템에서는 null 확인 코드 구조를 확인하기 위해서 일종의 보일러 플레이트 코드로 사용합니다.

코틀린에서는 null로 초기화할 경우 컴파일 오류가 발생합니다.

코틀린에서는 null을 사용하기 위해서는 "?"를 좌측에 선언해 줘야 합니다.

"?"를 사용하면 컴파일 오류가 발생하지 않는 것을 확인할 수 있습니다.

"?"를 사용해서 함수 호출 시 리턴 값 또한 "?" 적용하여 null 허용을 지정해야 합니다.

즉 "?" 사용 후 리턴 값을 확인하기 위해서는 동일한 "?"를 지정해야 정상적으로 컴파일 됩니다.

null 적용 함수 리턴되는 변수 확인이 조금 불편하다면 엘비스 연산자 "?:"를 사용하면 됩니다.

엘리스 연산자를 사용하게 되면 null일 경우 선언된 값을 리턴합니다.

이상으로 코틀린 변수 확인 및 null에 대해서 마치겠습니다.

감사합니다.

believecom.tistory.com/entry/20200902Kotlin-2?category=1109462

 

코틀린(Kotlin) 안드로이드 배우기 (변수)

오늘은 코틀린(Kotlin) 변수에 대해서 알아보겠습니다. 코틀린에서 변수는 var, val로 구분할 수 있습니다. var, val 사용법에 따라서 코드를 안전하게 개발할 수 있습니다. VAR 먼저 var에 대해서 알아��

believecom.tistory.com

 

반응형
반응형

오늘은 코틀린(Kotlin) 변수에 대해서 알아보겠습니다.

코틀린에서 변수는 var, val로 구분할 수 있습니다.

var, val 사용법에 따라서 코드를 안전하게 개발할 수 있습니다.

VAR

먼저 var에 대해서 알아보겠습니다.

var은 기본적으로 변수값을 변경하고 싶을 경우 사용하는 변수입니다.

기본적으로 var을 선언 후 초기화를 진행하면, 이후 재 초기화가 가능합니다.

소스에서 같이 "cpu" 변수를 처음 "AMD"로 초기화하고, 이후 "INTEL"로 재 초기화해도 문제가 되지 않습니다.

컴파일 후 Toast를 사용해서 출력하면 "intel"이 잘 출력됩니다.

VAL

두 번째 변수는 val입니다.

val은 기본적으로 읽기 전용 참조이며, 초기화 후 재 할당이 불가능합니다.

즉 "cpu1" 변수에 "intel" 할 당 후 "AMD"로 초기화할 경우 오류가 발생합니다.

val 변수는 final 한정자 자바 변수와 동일한 기능을 합니다.

val 선언 후 재 초기화하면 error를 확인할 수 있습니다.

val은 기본적으로 변경은 불가능하지만, 참조된 객체의 상태는 변경할 수 있습니다.

배열을 사용해서 재 초기화할 경우는 오류가 발생합니다.

 

 

 

하지만, val로 선언된 배열에 함수를 사용해서 변경은 가능하다는 뜻입니다.

배열에 선언된 "list"에 remove를 사용해서 변경할 경우 정상적으로 아이템이 삭제됩니다.

변경된 변수를 for 문을 사용해서 출력했습니다.

코틀린(Kotlin) 변수는 var, val로 구분해서 오류를 최소화할 수 있어 매우 편리합니다.

정확한 변수의 개념을 이해해고 사용하면 더욱더 안전한 코드를 개발할 수 있습니다.

이상으로 코틀린 변수에 배우기를 마치겠습니다.

감사합니다.

https://believecom.tistory.com/entry/Kotlin-1-ClickEvent-when?category=1109462

 

코틀린(Kotlin) 안드로이드 배우기 #1 - ClickEvent, when

오늘은 코틀린(Kotlin) 안드로이드 배우기 #1 - ClickEvent, when에 대해서 알아보겠습니다. 코틀린(Korlin)을 사용하기 위해서는 기본적으로 안드로이드 스튜디오를 설치하면 바로 사용이 가능합니다. ��

believecom.tistory.com

 

반응형

+ Recent posts