JAVA언어에서 어쩌면 가장 많이 활용하며 사용하는 Map입니다.

Map은 기본적으로 Key와 Value를 묶어 한쌍 으로 저장 합니다.

그리고 많은 양의 데이터를 빠르게 검색 할 수있는 성능의 장점이 있습니다.


JAVA의 Map도 종류가 많은데요. (Hash, Tree, Linked)

그중 HashMap과 LinkedHashMap의 차이점에 대해 알아 보려합니다.


1. HashMap, LinkedHashMap 사용법 


1
HashMap hashMap = new HashMap<>();
cs


HashMap 객채 생성을 합니다. 

HashMap은 제네릭타입을 지정하여 생성 할 수도 있습니다.

LinkedHashMap도 동일합니다.

(LinkedHashMap linkedHashMap = new LinkedHashMap<>();)


1
2
3
4
hashMap.get("key"); // 키쌍 매핑된 데이터를 가져옵니다. return value
hashMap.isEmpty(); // 맵안에 데이터가 있는지 여부를 확인 합니다. return true/false
hashMap.containsKey("key"); // 맵안에 해당키가 있는지 여부를 확인합니다. return true/false 
hashMap.size(); // 맵의 크기를 확인 합니다. return int
cs


기본적으로 많이 사용하는 HashMap 메소드들 입니다.

LinkedHashMap도 동일합니다.


get() : 매핑한 키의 value값을 가져옵니다.

isEmpty() : 맵안 데이터 존재 여부를 확인 합니다. 비어있다면 true를 리턴합니다.

containsKey() : 맵안에 해당 키가 존재하는지 확인합니다. 있다면 true를 리턴합니다.

size() : 맵의 크기를 확인합니다. 키쌍매핑이 1개라면 int 1 리턴합니다.






2. HashMap VS LinkedHashMap  차이점&성능


먼저, HashMap과 LinkedHashMap의 큰차이점은 키쌍을 매핑했을때 순서 입니다.


HashMap은 순서대로 저장이 되지 않습니다.


1
2
3
4
5
6
HashMap hashMap = new HashMap<>();
hashMap.put("apple""apple");
hashMap.put("banana""banana");
hashMap.put("tomato""tomato");
            
System.out.println(hashMap.toString());
cs




반면, LinkedHashMap은 순서대로 저장 됩니다.


1
2
3
4
5
6
LinkedHashMap linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("apple""apple");
linkedHashMap.put("banana""banana");
linkedHashMap.put("tomato""tomato");
                
System.out.println(linkedHashMap.toString());

cs




그렇다면.. 둘의 성능차이가 있을까? 라는 의문을 품게 되었습니다.

왜냐하면, LinkedHashMap은 정렬이 되어 저장되기 때문입니다.


결론을 말씀드리면 LinkedHashMap이 약간 더 우세하다라는 의견이 더욱 많았습니다.

맵을 Create하는 시간이 조금더 걸리는반면, Access속도와 Iterate속도가 조금 더  빠르게 작용하였습니다.

(물론, 제가 퍼포먼스 테스트한것은 아닙니다.)


하지만, HashMap과 LinkedHashMap의 최종 속도 차이는 큰차이가 없다는 결론 입니다.

(아래 참고 링크를 확인해주세요.)

* 출처 StackOverflow : https://stackoverflow.com/questions/12998568/hashmap-vs-linkedhashmap-performance-in-iteration-over-values



간단하게, 성능차이가 궁금하여 검색해보던 중 포스팅 정리하게 되었습니다.

감사합니다.


반응형


안녕하세요.


이제Hello, World 부터 스위프트(Swift)를 정리하려고 합니다.

Swift가 업데이트가 되면 코드가 많이 변화되는 편이라 겁이나는데요.

항상 최신버전을 익히려고 공부하려 합니다.

(될수 있다면 매주 1~2회는 포스팅 할 계획입니다.)


그렇다면 이제,  Swift4의 Hello, world를 시작으로 프로젝트 생성부터 시작해보도록 하겠습니다.

(스위프트를 공부하려면 기본적으로 맥OS가 구동되는 PC가 있어야 하는데요. 윈도우에 가상으로 설치해도 되지만 불안정하여서 가급적 Mac을 구비하시는게 좋습니다.)



 Xcode 프로젝트생성 'Hello, World'



먼저 앱스토어(App Store)에서 Xcode를 다운받으셔야 합니다.

그리고 Xcode를 처음 실행시킨 화면 입니다.


실행 시키신후  'Create a new Xcode project'를 누르시면 프로젝트를 생성하실수 있고, IOS전용 앱을 만들수 있습니다.



프로젝트 생성을 누른뒤, 템플릿을 선택하는 화면이 나오니다.

보통은 'Single View App'을 많이 사용합니다.


빈 껍데기 View 입니다.

이외에, 게임용 OpenGL뷰를 생성해주는 템플릿, 증강현실 앱 개발용 템플릿 등 있습니다.


저는 간단한  Hello World용 뷰를 생성할것 이기 때문에 'Single View App'을 선택하였습니다.


두번째 제품 명과, 패키징명등을 정의하는 화면으로 넘어옵니다.

필요하신 대로 작성해주시면 될것 같습니다.



마지막 Next이후에 프로젝트를 저장할곳을 선택하라는 화면이 나옵니다.

편하신곳에 저장하시면 될것 같습니다.



프로젝트 생성을 마치고 난뒤 Xcode에서 실행된 화면 입니다.

기본적인 프로젝트설정값에 대해 나타납니다.



오늘의 목적은 Label에 간단히 Hello World를 그리는것 입니다.

먼저 좌측에  Main.storyboard를 더블클릭하시면 스크린샷과 같은 View가 나타납니다.

현재 나타나는 View는 View를 이어나가고, 구성하는 역할을 합니다.




참고사항으로 우측상단 스크린샷에 빨간색으로 표시된부분 보조편집기 입니다.

보조 편집기는 소스코드를 입력하거나 스크립트가 입력이 필요한경우 화면 영역을 분할하여 작업 할 수 있습니다.




이제 본격적으로 Hello World를 띄워보겠습니다.

오브젝트 라이브러리를 실행 시켜야 합니다.

스위프트의 오브젝트들을 다모아놓은것 이라고 생각하시면 됩니다.

(버튼, 라벨, 텍스트필드 등..)


우측 상단 빨간색으로 표시된 부분을 누르시면 오브젝트 라이브러리 목록이 나타납니다.

(혹은 command + shift + L )


오브젝트 라이브러리에서 Label을 View에 드래그앤 드롭하시면 됩니다.



라벨이 드롭된 모습입니다.

Label이 드롭된 후에 더블클릭하면 Label명을 변경 하실수 있습니다.



혹은, 우측 상단에 인스펙터 버튼을 눌러주시면 세세하게 설정이 가능합니다.

(색상변경, 정렬 등)



저는 라벨, 버튼, 텍스트필드등 오브젝트 라이브러리에서 꺼내왔고

Hello, World로 텍스트 변경 하였습니다.



이제 에뮬레이터를 실행하겠습니다.

우측 상단에 에뮬레이터를 클릭하시면..



원하는 기종의 아이폰을 선택하실수있고 테스트 하실수 있습니다.

원하는 기종을 선택하신후 Xcode의좌측상단 '▶︎' 버튼을 누르시면 시작 됩니다.



에뮬레이터가 시작 됩니다.



해상도 정렬이 맞지 않지만

Hello, World가 정상적으로 나타났습니다.


추가한 버튼과 텍스트 필드도 보이네요.


이상 Swift4 Hello World, Xcode 프로젝트 편을 마치겠습니다.




반응형


안녕하세요.


오랜만에 포스팅을 하게 되었습니다.


당분간은 Mac에 적응하여 Swift와 간단한 Mac 사용법을 포스팅하려 합니다.


오늘은 맥의 마우스 기본값은 흔히들 많이 접하시는 윈도우 휠방향과 반전이 되어있는데요.


오랫동안 윈도우에 적응된 유저들은 상당히 불편합니다. (저 또한 그렇습니다.)


그래서 오늘은 Mac 에서 마우스 휠 방향 전환하는법을 알아보도록 하겠습니다.



간단 설정하기 



먼저 상단에 사과모양을 눌러주세요.

(혹은 바로 시스템환경설정을 실행 시켜주시면 됩니다.)



시스템 환경 설정을 눌러주세요.

(바로 실행시키신분들은 다음 스크린샷을 확인해주세요.)




마우스를 눌러주세요.



마우스 설정에서 '스크롤 방향: 자연스럽게' 체크가 되어있습니다.



마우스 설정에서 '스크롤 방향: 자연스럽게' 체크를 풀어주세요.

그렇다면, 평상시 적응된 마우스 휠 방향으로 반전이 됩니다.



오늘은 오랜만에 간단한 팁 포스팅을 진행하였습니다.

감사합니다.


반응형


안녕하세요.

오늘은 API 대해 포스팅을 하려고 합니다.


먼저, 기획자 신입으로 취직을 한 제 친구가 있습니다.

그 친구는 컴퓨터와 전혀 관련없는 과를 졸업하였구요. 


개발자인 저에게 "API가 뭐야? 이해가 잘안돼" 라고 물었습니다.

저로써는 "아.. API를 같은 종사자라도 잘 모르는 사람도 있겠구나" 싶어서 포스팅하게 되었습니다.


그럼 API가 무엇일까요?


 

 "API"는 Application Program Interface을 의미합니다. 


 약자를 풀어서 해석을 해도 이해가 잘 되지 않으실 껍니다.


 하지만 먼저 약자를 풀어서 의역아닌 해석을 해보자면 '어플리케이션 프로그램 구조?' 정도로 해석하면 될까요?


 일단 흔히 API가 뭐냐고 하면 라이브러리에 접근하기위해 작성된 규칙 정도로 교과서적인 설명이나 글을 볼 수 있을껍니다.


 맞는 말이기도 합니다.


 하지만 더 쉽게 예를들어 설명을 해드리겠습니다.


 구글 지도는 API덩어리라 해도 무방 합니다.

 

 구글지도는 단순히 지도만 보여주고 있지 않습니다. 음식점을 검색했을때 위치와 평점등을 보여주고, 또한 길찾기를 했을때 경로를 알려줍니다.


 하지만 구글 지도를 개발할때 음식점정보를 넣어서 개발한것이 아니라, 외부 음식점 정보 라이브러리를 연결시켜서 정보를 표현해준것 입니다.


 여기까지 말씀드려도 이해를 잘 못하실수 있을수도있습니다.


 더 쉽게 설명하자면, 구글 지도 개발자와 음식점 정보 개발자는 서로다르고 서로다른 프로그램이라고 이해하시면 됩니다.


 즉, 음식점 정보 프로그램에서 구글 지도 프로그램으로 연결시켜줄수있는 연결고리를 API라고 합니다.


 지금은 API방식을 굉장히 많이 사용하고있구요.


 정부에서 제공하는 Open API 도 존재 합니다. 즉 수많은 라이브러리가 많고 이것들을 활용하여 자신만의 프로그램을 개발할수 있는환경 입니다.


 Open API는 특정 서비스를 제공하는 업체가 자신들의 서비스에 접근할 수 있도록 외부에 공개해놓은 라이브러리 입니다.


 즉, 해당서비스로 접근하기 위한 규칙으로 보면 되겠습니다.




* 참고링크

https://terms.naver.com/entry.nhn?docId=4383195&cid=59941&categoryId=59941


반응형


안녕하세요.


오늘은 하이브리드 앱으로 많이 사용하고있는 웹뷰를 제작해보도록 하겠습니다.


웹뷰란? 간단하게 설명을 드리겠습니다.

어플리케이션 화면상에 내가 만든 웹페이지 혹은 내가 띄우고싶은 웹페이지를 어플리케이션 안에서 보여주는 프레임을 말합니다.


보통은 웹페이지로 앱상 UI나 기능을 구현을 해놓은 뒤, IOS나 안드로이드 모두 웹뷰를통해 띄우면 별도의 앱작업이 필요없이 어플리케이션을 완성시킬수 있습니다.


오늘은 간단하게 안드로이드로 웹뷰를 생성하는 방법을 포스팅 해보도록 하겠습니다.



안드로이드 프로젝트 생성하기 




안드로이드 프로젝트 생성은 많이 해보셨을꺼라 생각하고 간단하게 진행 하겠습니다.

먼저 도메인과 경로 앱이름등 설정해주시고 N눌러주세요.



저는 API23 마시멜로우로 생성하겠습니다.

설정하신뒤 'Next' 눌러주세요.



빈 액티비티로 생성을 하겠습니다.

선택후 'Next'를 눌러주세요.





액티비티 이름이나 레이아웃 이름을 정해주실분은 정해주세요.

저는 기본(Default)로 진행 하겠습니다.

마지막으로 'Finish'눌러주시면 프로젝트가 생성이 완료 됩니다.



간단하게 웹뷰 띄우기!



1. 매니페스트 설정


매니페스트는 간단하기 퍼미션허용 한줄만 추가해주면 됩니다.

인터넷관련 퍼미션을 열어줘야 웹뷰상 인터넷 동작이 가능합니다.


1
<uses-permission android:name="android.permission.INTERNET"/>
cs



2. 레이아웃 설정


레이아웃 설정도 기본 XML에 <WebView> 태그만 추가하여주었습니다.

크기는 "match_parent" 설정해주었습니다.


1
2
3
4
5
6
7
<WebView
    android:id="@+id/webView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true" >
</WebView>
cs



3. Main 코드 설정


기본적인 웹뷰 선언과, 웹뷰 셋팅 선언 하였습니다.

여기서 웹뷰 셋팅은 굉장히 많은데요.

웹페이지상 자바스크립트와 기타 기능들을 모두 동작하게 하려면 허용해줘야하는 설정이 많습니다.

(위 사진상 주석을 보고 설정값을 확인하시면될것 같습니다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package webview.test.myapplication;
 
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
 
public class MainActivity extends AppCompatActivity {
    private WebView mWebView; // 웹뷰 선언
    private WebSettings mWebSettings; //웹뷰세팅
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // 웹뷰 시작
        mWebView = (WebView) findViewById(R.id.webView);
 
        mWebView.setWebViewClient(new WebViewClient()); // 클릭시 새창 안뜨게
        mWebSettings = mWebView.getSettings(); //세부 세팅 등록
        mWebSettings.setJavaScriptEnabled(true); // 웹페이지 자바스클비트 허용 여부
        mWebSettings.setSupportMultipleWindows(false); // 새창 띄우기 허용 여부
        mWebSettings.setJavaScriptCanOpenWindowsAutomatically(false); // 자바스크립트 새창 띄우기(멀티뷰) 허용 여부
        mWebSettings.setLoadWithOverviewMode(true); // 메타태그 허용 여부
        mWebSettings.setUseWideViewPort(true); // 화면 사이즈 맞추기 허용 여부
        mWebSettings.setSupportZoom(false); // 화면 줌 허용 여부
        mWebSettings.setBuiltInZoomControls(false); // 화면 확대 축소 허용 여부
        mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 컨텐츠 사이즈 맞추기
        mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 브라우저 캐시 허용 여부
        mWebSettings.setDomStorageEnabled(true); // 로컬저장소 허용 여부
 
        mWebView.loadUrl("http://web-inf.tistory.com"); // 웹뷰에 표시할 웹사이트 주소, 웹뷰 시작
    }
}
 
cs



에뮬레이터로 간단히 실행을 해본결과 제 블로그가 정상적으로 로드되었고, 정상 작동하는것을 확인 할 수 있었습니다.


이상 간단한 웹뷰 생성 포스팅을 마치겠습니다.



반응형


안녕하세요.


오늘은 모자익플로우(MosaicFlow) 플러그인을 소개드릴려합니다.


MosaicFlow는 먼저 감이 안잡히실거라 생각이 듭니다.


쉽게설명을드리면, 사진데이터를 표현해주고싶은데 흔하게 게시판형식으로 정리하는것이 아닌 사이즈에 맞춰서 흐름대로 놓는 방식을 말합니다.


예를들어 표현한곳이 '핀터레스트(Pinterest)' 입니다.


핀터레스트 : https://www.pinterest.co.kr/


핀터레스트를 경험해보신분이나 아니면 오늘 처음 접해보시는분은 '아~ 저런모양이 모자익 플로우' 이구나 이해하시면 됩니다.


이 플러그인은 제가 만든 플러그인은 아닙니다.


단순 소개 목적차 Github에서 가져온 자료라는것을 알려드립니다.



모자익플로우 (MosaicFlow)



github에 나와있는 샘플 강아지 사진들 입니다.

서로 다른 크기의 모양에도 문제없이 정리 해줍니다.


제작자 sapegin, 다른 플러그인도 많이 있지만 사용하기 가장편하였습니다.

링크참고해주세요. ^^


MosaicFlow (sapegin) 참고 링크 : https://github.com/sapegin/jquery.mosaicflow 




사용법은 아주 간단합니다.

먼저 플러그인을 다운받아 사용할 프로젝트에 include 시켜주시면 됩니다.

jquery.mosaicflow.js 혹은 jquery.mosaicflow.min.js 중 하나 입니다.

(min파일은 미니멈을 의미하구요 최소한 필요요소만 담아놓은 파일입니다.)


전 용량상 큰차이가없어서 원본파일을 사용하였습니다.


또한! CDN을 통하여 바로 연결하여 사용할수도 있습니다.




지금부터 소개드릴내용은 제가 첨부해놓은 링크안에서 모두다 확인할수있으며 기본적인사항 입니다.

확장 기능을 원하시는분은 들어가셔서 자세히 읽어보시면 됩니다.


HTML 소스에서 작업해야할 내용입니다.

먼저, CDN이나 플러그인을 직접다운받아 적용시켜줍니다. 

(위 사진은 모두다 포함시켰습니다, 실제로는 1개의 연결만하면 됩니다.)



그리고 CSS를 수정할것이라면, CSS 스타일을 붙여넣어주시면됩니다.

적용결과 CSS가 없어도 기본으로 모양이 잡히긴하지만 디테일한부분은 꼭 필요 하실것 입니다.



그리고, 최종 표현할 사진이나 텍스트 등

class를 mosaicflow안에 mosaicflow__item으로 묶어주시면 정상 작동합니다.


잘모르겠으신분들은 샘플파일을 다운받아서 소스를 열어보시면 될것 같습니다.

비교적 간단한 플러그인 소개 였습니다.


반응형


한때 자바 유료화 이슈때문에 Open JDK와 Oracle JDK 논란이 있었는데요.

오늘은 간단히 Open JDK와 Oracle JDK에 대한 차이점을 말씀드리겠습니다.


먼저, JAVA를 실행하기위해서는 JVM(자바가상머신)이 필요합니다.

그리고 자바를 컴파일  하기위해선 JDK가 필요합니다. 보통 JDK와 JVM은 같이 설치가 됩니다.


상업용과 오픈소스기반으로 JDK는 2가지로 나뉩니다. 

이것이 바로 Open과 Oracle JDK의 첫번째의 큰 차이점 입니다.


Open JDK ? 


작년에 JAVA가 유료화된다는 소식을듣고 급하게 찾아본 기억이 있습니다.

JAVA프로그래밍 언어자체는 GPL라이센스로 '무료' 입니다.


하지만, 자바를 컴파일해주고(JDK), 실행시키는것(JVM)을 도와주는것이 구독형 라이센스로 변경이 되면서 논란이 되었습니다.


결론적으로는, Open JDK는 오픈소스 기반으로 '무료' 입니다.


오라클과 레드햇, Azul, AdoptOpenJDK 등의 OpenJDK 바이너리 파일을 제공 받을수 있습니다.


Oracle JDK ?


Oracle JDK 라이센스는 Oracle Binary Code License (BCL) 입니다. 


Open JDK와 달리 소스코드는 역시나 비공개 이며, 2018년 7월부터 구독형으로 지원합니다. (JDK 11부터)


유료인만큼.. Open JDK와 다른 기능과 좋은 피드백이 장점이 될수있다고 생각이 됩니다.


실제 사용자의 의견을 들어봤을때는, Open JDK로도 큰 문제없이 컴파일과 실행이 가능하다고 합니다.

실제로 Oracle JDK에서 제공하는 다른 기능은 쓸일이 잘 없고 대체가 가능한 부분이라고는 하는데, 이건 개인의 차이라고 생각됩니다.


* 참고 링크

https://www.infoworld.com/article/3284164/java/oracle-now-requires-a-subscription-to-use-java-se.html


반응형


안녕하세요.


내가 만든 파일 혹은 개발한 파일이 추가 플러그인등으로 인하여 실행파일을 제외하고도 포함되는 파일이 많은경우가 있습니다.

이것을 단 1개의 실행 파일로 줄여주는 툴을 소개하고자 글을 작성하게 되었습니다.


오늘 소개드릴 툴은 ' Enigma Virtual Box ' 입니다.


Enigma Virtual Box 공식 홈페이지 :  https://enigmaprotector.com/


이니그마 버추얼 박스(Enigam Virtual Box) 입니다.

해당 툴로 단일 싱글파일을 만드는 방법을 설명드리겠습니다.


 Single exe-file 단일 실행파일 만들기


먼저 제가 단일파일로 만들 파일 목록 입니다.

'app.exe' 가 실행파일이며 그 외 파일들은 실행을 돕는 파일 입니다.

(저는 NWJS를 통해 만든 배포파일을 샘플로 하였습니다.)


node-webkit 이전 포스팅 참고 : https://web-inf.tistory.com/28 


그럼 사용법을 시작해보겠습니다. 



먼저 위 공식홈페이지 링크로 들어가게되면 위와 같은 화면이 나옵니다.

저기서 다운로드 메뉴를 찾아서 들어가주세요.




Enigma Virtual Box를 다운받아주세요.

프리웨어 소프트웨어 입니다.


다운로드를 하신후 설치를 진행해주시고 실행을 시켜주세요.

(별도의 설치과정은 포스팅 하지 않았습니다. ^^)




이그니마 버츄얼 박스를 실행한 최초 화면 입니다.

먼저 Enter Input FIle Name에 단일 실행파일로 만들고싶은 EXE파일을 찾아 넣어 줍니다.



Enter Input File Name에 경로를 찾아서 넣어줬다면 Output 까지 자동으로 지정이 됩니다.

(Output경로 수정 가능합니다.)

최종 제작된 파일은 선택한파일 뒤에 '_boxed'가 자동으로 붙어 있는걸 알수있습니다.


그리고 이제 실행파일을 제외한 부수적 파일들을 등록해주어야 합니다.

부수 파일이 단일 파일이라면 Add File(s)

폴더라면 New Folder를 선택하여 동일하게 생성해주어야합니다.



먼저 'Add Files(s)' 로 단일 파일들만 선택해줍니다.



그리고 단일 폴더를 생성하고 이름을 동일하게 맞춰준후

폴더를 클릭후 -> Add... -> Add file(s)를 눌러 파일을 선택하여 줍니다.


그렇다면 잘 설정이 되었다면 지정된 파일목록을 확인 할 수 있습니다.



그리고, 최종적으로 Process를 눌러주면 작업이 진행 됩니다.

최종 Run 버튼이 활성화가 된다면 작업이 끝이 난 것입니다.


이제 Close와 툴을 종료해주시고, 아까 output으로 지정했던 경로로 들어가 확인을 합니다.


app_boxed.exe 단일파일로 잘 생성이 되었고, 실행결과 역시나 문제없이 실행이 잘됩니다.

(샘플 파일은 이전에 만들었던 NWJS 샘플 입니다.)


이상으로 단일 실행 파일 만들기 Enigma Virtual Box 사용법을 마치겠습니다.


반응형

+ Recent posts