안녕하세요 박스여우입니다.이번에는 안드로이드 스튜디오에서 패키지명을 변경하는 방법을 알아보겠습니다. Google Play Store에 앱을 등록하려 하니 com.example 패키지 명은 허용되지 않는다고 합니다. 그래서 패키지 명을 변경해야할 필요가 있습니다. 저처럼 패키지명이 com.example로 바로 나와버리는 경우나 모든 패키지가 하나로 표시되는 경우에는 위의 톱니바퀴모양을 눌러 Comapct Empty Middle Packages 체크를 푸시면 됩니다. 그다음에 바꿀 패키지를 우클릭하여 Refactor -> Rename을 누르시면 아래처럼 창이 나오게 됩니다. 저같은 경우에는 패키지와 디렉토리 모두 이름을 변경해 주었습니다! 그리고 아래 콘솔창(?)에 뜨는 부분을 클릭해서 Build Confi..
안녕하세요 박스여우입니다.이번에는 AES란 무엇이고 Java로 구현한 AES 암호화/복호화에 대해서 알아보겠습니다. ■ AES(Advanced Encryption Standard) 암호화 알고리즘AES 는 벨기에의 2명의 암호학자로부터 탄생한 암호화 알고리즘 입니다. NIST는 기밀문서를 안전하게 암호화 시켜 보호하기 위해 DES 암호화 알고리즘을 대체할 새로운 암호화 알고리즘이 필요했고, 1997년에 보다 강력한 알고리즘을 찾기 위한 공모전를 진행했습니다. 그중 MARS, RC6, Rijndael, Serpent, Twofish 이 다섯 개의 암호화 알고리즘이 후보에 올랐고, 결국 Rijndael(레인달) 암호화 알고리즘이 체택되었습니다. 이때 AES 후보 알고리즘들은 다양한 방식의 공격에도 안정성을 ..
안녕하세요 박스여우입니다.이번엔 수 많은 기기들을 구별할 수 있는 고유 식별자 UUID를 알아보겠습니다. ■ UUID - Universally unique identifier : 범용고유식별자기존에는 수 많은 디바이스들을 구별하기 위해서 IP나 MAC Address를 사용햇습니다. 하지만, 모바일 디바이스는 네트워크를 ON OFF만 해도 IP가 변경되고, 위치에 따라 수시로 바뀔 수도 있고, 여러 대의 스마트폰이 한 개의 WIFI를 통해 접속하거나 DHCP(내부 IP 자동할당)기능을 끄고 다른 기기에다 이전에 사용했던 내부 ip를 할당하게 되는등의 상황을 고려하면 ip는 절대 고유한 값을 가진다고 볼 수 없습니다. 또, Mac Address는 네트워크 카드의 고유 값이라고 하지만, 만약 wifi를 거치게..
안녕하세요 박스여우입니다.이번에는 안드로이드의 인텐트(Intent)에 대해 알아보겠습니다. ■ Intent - 인텐트인텐트는 안드로이드 OS 상에서 서로 다른 객체들 간에 자료를 전달하거나 호출해 실행하는 단위 입니다. Intent는 애플리케이션 내부와 애플리케이션 간의 메시지를 전달 할 때 사용되는 클래스 입니다. 안드로이드 기기 내의 모든 애플리케이션 컴포넌트 간의 상호작용을 할 수 있습니다. (쉽게 말하자면 인텐트를 통해 해당 애플리케이션에서 다른 애플리케이션을 실행시킨다던가, 데이터들을 주고 받을 수 있습니다.)인텐트는 명시적 인텐트(Explicit Intent)와 암시적 인텐트(Implicit Intent) 두 가지로 나눌 수 있습니다. ■ Explicit Intent - 명시적 인텐트명시적 인..
안녕하세요 박스여우입니다.이번에는 객체지향과 클래스를 알아보겠습니다. ■ 객체지향 - Object-Oriented객체지향이라는 의미를 알아보기 위해 먼저 객체(Object)에 대해 알아봅시다.객체(Object)란 사전적 의미로는 실세계에 존재하는 모든 사물을 일컫는 말입니다. 지금 현재 우리 주의에서 볼 수 있는 모든 것들을 객체라고 하지요. 그럼 객체지향이란? 이런 실세계에 존재하는 객체를 컴퓨터 상에서 표현하는 것을 말합니다. ■ 객체지향의 특징객체지향은 코드의 재사용성이 높습니다. 클래스 를통해 객체를 정의해 두면, 그 객체를 여러 프로젝트나 프로그램등에 재사용 될 수 있습니다. 객체지향의 특징 두 번째로는 코드의 관리가 용이합니다. 클래스별로 속성과 기능을 정의해 두었기 때문에 클래스만 수정하거나..
얼마전에 안드로이드 스튜디오를 업데이트 했더니 GCMService에서 Notification.setLatestEventInfo 부분에서 오류가 발생하더군요. 구글링 하여 문서를 찾아본 결과 CompleSdkVersion이 23이상일 경우 setLatestEventInfo 분이 삭제되어서 사용할 수 없게 되었다는 소식이 있었습니다. 그래서 해당 코드를 사용하지 않고 Notification Builder를 사용하여 동일한 Notification이 띄워지도록 하겠습니다. 1234567891011121314 String msg = intent.getStringExtra("msg"); try { msg = URLDecoder.decode(msg, "EUC-KR"); } catch (UnsupportedEncodi..
현재 제가 서버와 클라이언트 간의 통신 규격으로 사용하고 있는 JSON을 Java에서 라이브러리를 통해 사용하는 방법을 알아보겠습니다. ■ 데이터 교환 형식 - JSON우선, JSON이란 경량의 데이터 교환 형식으로 사람이 읽고 쓰기도 편하고, 기계역시 마찬가지 입니다.JSON은 JavaScript에서 객체를 만들 때 사용되는 표현식이지만 완전히 독립적이여서 어떠한 언어에서도 사용이 가능합니다. ● JSON 표기법JSON을 사용하기 위해 우선적으로 JSON의 표기법을 알아야 합니다. 형식도 모르고 그냥 라이브러리만 이용해서 사용한다면 JSON을 완벽하게 사용하지 못하는 것 과 마찬가지 입니다. 우선, JSON의 가장 큰 단위는 Object입니다. Object는 중괄호로 표기하고, 이 Object 안에 K..
안녕하세요 박스여우입니다.지난시간에 배웠던 배열 강좌에서 배열에 대한 아주 기초적인 것만 설명하고 넘어갔습니다. 이번에는 배열의 길이를 구하는 방법과 사용법에 대해 알아보겠습니다. ■ 배열의 길이를 구하는 length배열의 길이는 프로그램이 동작할때 상수로 주어줄 때도 있지만, 사용자가 원하는 만큼의 길이를 입력하거나, 다른 방법을 통해 배열의 길이를 정할 수 있습니다. 이럴때는 배열의 길이를 알 수 없겠죠? 하지만 length를 통해 알 수 없는 배열의 길이를 구할 수 있습니다.length의 기본적인 사용 방법을 알려드리기 위해 위의 코드를 살펴봅시다. 첫 라인은 int형배열 arr를 선언한 후 길이를 10으로 지정했습니다. 그리고 두번째 라인에는 배열의 길이를 출력했네요. 이러면 당연히 10이 출력되..
안녕하세요 박스여우입니다.이번에는 다른 쓰레드 상에서 UI를 다루는 방법에 대해 다루도록 하겠습니다. 앱 개발을 하던중에 네트워킹을 요구하는 작업이 필요해 별도의 쓰레드를 사용하는데, 그 쓰레드에서 UI까지 호출했더니 골치아픈 일이 벌어졌습니다.123456789101112131415161718192021222324 TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.textview); new test().start(); } pri..
안녕하세요 박스여우입니다.Algorithm이번에는 선생님이 장난으로 내 주신 과제. 하노이탑에 대해 알아보도록 하겠습니다. 우선 하노이탑의 해결 과정을 알아내기 위해 Youtube의 여러 하노이탑 영상들을 찾아봤습니다. 저는 위의 두 영상을 보고 해결되는 규칙을 찾아냈습니다.위의 하노이탑 해결 과정에서 반복적으로 움직이는 블럭을 하나 찾아봅시다. 만약 위의 영상을 보고도 반복적인 모습을 찾지 못했다면 아래 영상을 통해 다시한번 살펴봅시다. 위의 영상에서 가장 작은 블럭의 움직임을 자세히 살펴보면,반복적으로 움직이고 있다는 모습이 보일 것 입니다. 가장 작은 블럭은 1번기둥, 2번기둥, 3번기둥 순으로 반복적으로 움직이고 있고,가장 작은 블럭이 한번 움직이면 가장 작은 블럭이 ..