객체지향 프로그래밍에서 많이 사용하는


자료구조중 하나는 


key 와 value 쌍으로 데이터를 저장하는 HashMap 이다.


아래의 코드는 Php 문법을 통해 HashMap처럼 사용하는 코드이다.




$hashMap['myKey']  = "value1";
$hashMap['myKey2'] = "value2";


위와 같이 배열에 바로 key값을 작성하고 값을 넣어주면 된다.


$hashMap = array('mykey'=>"value1", 'mykey2' => "value2");


위와 같이 array를 이용해서 한번에 작성할 수 도 있다.

=>의 의미는 key로 value를 가리키는 의미로 첫번째 예시와 같은 형태로 저장된다.




포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

아래의 코드를 보자.



public class Test{

  private Test mTest;

  public int add(int a, int b){

    int sum = a + b;

    return sum;

  }

}


Test 클래스의 변수엔 'm' 을 붙인 변수 mTest로 선언했고,


add메서드 안에 사용한 sum 변수는 m이 붙질 않았다.


라이브러리나, 가이드라인을 볼 시 많은 개발자들은 변수에 m을 붙이길래


궁금하여 찾아본 결과,


m은 Member의 약자라고 한다. 즉, 클래스의 멤버변수일시 m을 붙여줘 구분하는 것이였다.






'Java' 카테고리의 다른 글

JAVA - DownCasting(다운캐스팅)  (25) 2016.08.27
JAVA - HashMap key 구하기.  (1) 2016.08.25
JAVA - UpCasting(업캐스팅)  (9) 2016.06.07
JAVA - Casting(캐스팅)  (0) 2016.05.26
JAVA - ArrayList에서 배열로, 배열에서 ArrayList로  (2) 2016.04.25

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee


안녕하세요, 개발자 mommoo입니다 ㅎㅎ


교통정보 컨텐츠 개발 마무리가 생각보다 무척 길어졌습니다 ㅠ.ㅠ


약 1개월 반 동안 과기DAY에 새로운 기능을 추가하였는데요,


다음과 같습니다 ^^




1. 계절학기 시간표 연동


방학의 꽃ㅎㅎ 계절학기를 들으시는 분들을 위해 시간표를 갱신했습니다.


앞으로는 정규학기 뿐만 아니라 계절학기 시간표도 확인이 가능하십니다.










2. 대중교통 메뉴 완성


드디어!! 학우 분들께 엄청나게 도움이 될 듯한 대중교통 메뉴가 완성되었습니다.


그 전에 로딩 페이지에 광고가 달리게 되었습니다.....미관상 별로시겠지만...양해 부탁 드립니다 ㅠ 











지하철이 달려오고 나면 아래와 같이 일곱 개의 대중교통 카테고리가 등장합니다.


상단은 지선버스, 가운데는 지하철, 하단은 마을버스 입니다.


과학기술대 학우분들이 자주 이용하시는 노선으로 이루어져 있습니다 ㅎ


이 중에서 학교 내부까지 운행하는 마을버스 13번 정보를 확인해 보도록 하겠습니다~








아래와 같이 마을버스 13번의 노선도가 쫙 펼쳐집니다 ㅎㅎ


현재 버스가 어딨는 지 아시겠나요 ㅋ


보시면 원자력병원 입구와 대학본부앞 정류장 옆에 좀 더 큰 원이 보이실 겁니다~


실제로는 깜빡이는 원이라서 바로 눈에 잡힙니다.


즉 정류장 이름 옆에 깜빡이는 원이 있으면 버스가 왔다고 보시면 됩니다^^








대학본부앞 정류장을 살짝 터치해보면...


이렇게 현재 13번 버스 시간뿐만 아니라 다음 13번 버스의 도착 시간까지 알 수 있습니다 ㅎ


다른 정류장도 마찬가지로 버스 도착 정보가 실시간으로 제공되고 있습니다.



아, 그리고 자주 타는 정류장을 접속 시 바로 보이게 할 수 있는 핀기능도 추가했습니다.


예를 들어 대학본부앞 정류장에서 자주 타는 경우, "대학본부앞" 글자를 꾸우우우욱 누르면 핀설정이 돼서


다음 접속 시에 대학본부앞 정류장이 바로 나타나게 됩니다.








하단에 보시면 스패너 모양의 아이콘이 있는데요~


터치 시 세 가지 버튼이 나오게 됩니다.


둥근 화살표는 새로고침, 연필은 새로고침 전체 혹은 부분 선택, 물음표는 TIP을 제공해 드립니다.


사용하시다 보면 유용할 것입니다 ㅎㅎ










마지막으로 SETTING에 교통기능 옵션 설정 및 팁을 추가했습니다.


이 쪽에서도 얼마든지 설정 가능하시니 심혈을 기울인 대중교통 메뉴 많이 이용해 주십시오!!!!












다음 업데이트는 캘린더 메뉴에 스케쥴러 기능을 추가할 예정입니다.


읽어주셔서 감사합니다~ 


과기DAY 많이 애용해 주십시오:)






'과기DAY > Notice' 카테고리의 다른 글

개인정보 처리 방침  (0) 2018.05.15
과기DAY - 2.0v 업데이트  (2) 2016.11.06
과기DAY - 1.5v 업데이트  (4) 2016.05.16

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

먼저 URL 의 약자를 풀어보면 아래와 같다.


Uniform Resource Locator


균일화 된 자원 위치 정도로 해석할 수 있겠다.


무슨 의미일까?


URI 랑 비슷하지만, URI랑은 확실한 차이점이 존재한다.


(URI - http://mommoo.tistory.com/42 )


URL은 인터넷에 접속할 때, 네트워크 상에서 해당 자원이 어디 있는지를


알려주는 문자열 이다.


예를 들면, mommoo.tistory.com/preview.php 같은 주소 문자열은 URI 일까 URL일까?


답은 둘다 맞다. 왜냐하면 윗 문자열로 특정한 웹사이트로 이동 되므로 URI다.


또한 mommoo.tistory.com 안에 있는 preview.php 라는 파일을 여는 것이므로 파일위치를 알려주는


URL도 맞는 말이다. 그렇다면 URI 이지만 URL은 아닐 경우는 무엇일까?


아래와 같은 상황이다.


mommoo.tistory.com/users?id=mommoo


이러한 주소 문자열은 특정 웹사이트로 이동 되므로 URI이다.


하지만 get방식으로 id값을 원하는 값으로 셋팅해 웹사이트를 접근 하므로,


파일 위치라 볼 순 없다 따라서, URL은 아닌 것이다.


이렇듯 비슷한 개념이지만, 확실한 차이점이 있다





 


'용어정리 > 프로그래밍용어' 카테고리의 다른 글

GET방식 과 POST방식  (32) 2016.12.10
컴포넌트(Component)란?  (8) 2016.10.20
URI 이란?  (0) 2016.06.13
List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

먼저 약자를 살펴보면 아래와 같다.


Uniform Resource Identifier


영어 단어로만 해석 해보면, 


균일하된 자원 식별자 정도로 해석할 수 있겠다.


식별자라 하는 것은 구별되는 것이다.


즉, 인터넷에서 구별되어야 하는곳은 주소창이고


그러한 구분된 식별자를 통해 인터넷 사용자는 원하는 곳으로


접속 할 수 있는 것이다.


바꿔 말하면, 특정 사이트를 접속하기 위해 인터넷 주소창에 적는 문자열은


전부 URI라 표현할 수 있는 것이다.



'용어정리 > 프로그래밍용어' 카테고리의 다른 글

컴포넌트(Component)란?  (8) 2016.10.20
URL 이란?  (2) 2016.06.14
List와 Map의 차이 (2)  (0) 2016.04.27
List와 Map의 차이 (1)  (0) 2016.04.26
XML 이란?  (9) 2016.01.26

포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

저번 포스팅은 캐스팅에 관해 전반적으로 다루었다.


아래의 URL은 이전 포스팅 내용이다.


http://mommoo.tistory.com/40


이전 포스팅 내용을 요약하자면 아래와 같다.


자료형이 정해진 변수에 값을 넣을때는


변수가 원하는 정보를 하나도 빠짐 없이 다 넣어줘야 성립한다.



이전 포스팅은 기본형으로 캐스팅을 설명했다면,


이번 포스팅은 참조형으로 캐스팅을 설명하려 한다.


기본적으로 캐스팅은 서로 관련없는 데이터 끼리는 변환되지 않는다.


int a = (int) true;


boolean 자료형이랑 int 자료형이랑 은 서로 성질이 맞지 않는 데이터 이므로,


형변환이 안되는 것 이다.


참조형(자바에서는 클래스) 데이터 역시 마찬가지다. 


그렇다면 참조형 데이터가 서로 관련이 있다고 하는 것은 무얼 의미 하는 것일까?


아래와 같은 상황일 것이다.


1. 상속관계가 맺어진 경우.


2. 인터페이스로 인해 확장이 된 경우.



1번 경우인 상속관계를 통해 예시로 설명 하겠다.


class Parent , class Child extends Parent 클래스 가 있다고 가정하자.


Child 는 Parent 클래스를 상속 받으므로 Chiid 클래스가 Parent 클래스 보다 가지고 있는


데이터 양이 무조건 많다. 왜냐하면 Child 클래스는 적어도 Parent 클래스의 데이터를 가지고 있기 때문이다.



때문에 많은 이들이 두 클래스의 구식도를 표현 할때 는 위와 같이 많이 한다.


사람마다 틀리겠지만, 후에 업캐스팅 다운캐스팅 개념을 위해 위와 같이 알아 놓아야 한다.


클래스 데이터 즉, 참조형을 사용할때는 아래와 같이 쓴다.


Parent parent = new Parent();


Parent 데이터형인 parent 변수는 실제 데이터인 new Parent(); 란 인스턴스가 Parent 정보를 모두 가지고 있으므로


오류가 나지 않는다.


아래의 경우는 어떨까?


Parent parent = new Child();


윗 개념으로 생각해보자.


parent변수는 Parent 자료형 데이터 모두를 원한다.


new Child(); 라는 인스턴스는 Parent 자료형 데이터를 모두를 가지고 있을까?


대답은 Yes 이다. 왜냐하면 Child 클래스는 Parent 클래스를 상속 받았기 때문이다.


따라서 성립한다. 엄연히 말하자면 데이터형은 틀리므로 아래와 같이 형변환 기호를 붙여야 한다.


Parent parent = (Parent) new Child();


하지만 위에서 말했다 시피, 변수가 원하는 정보를 인스턴스가 모두 가지고 있으므로,


컴파일러가 형변환 기호를 붙이지 않더라도 다형성 측면에서 넘어가는 것이다.


위와 같은 캐스팅을 '업캐스팅' 이라 부른다.


왜냐하면 Parent 데이터형 에 Child형 데이터를 넣어 생기는 아래와 같은 구식도 때문이다.


Parent 에 Child데이터를 넣으므로 화살표 방향이 위로 향하게 된다.


이런식으로 구조를 이해한다면 업캐스팅인 경우를 외우지 않아도 가능 할 것이다.


준비한 내용은 여기까지다.



다음 포스팅은 다음 캐스팅에 다룰 것이다.



http://mommoo.tistory.com/51 - 다운캐스팅







포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘은 캐스팅의 관해서 포스팅 한다. (형변환이라 부르기도 한다.)


캐스팅은 OOP(객체지향프로그래밍) 에서 매우 중요하다.


왜냐하면 캐스팅은 OOP의 다형성과 관련이 있기 때문이다.


자바를 통해서 설명하겠다. (어떤 언어든 상관없다.)


자바에서의 데이터형은 아래와 같이 크게 2가지로 나눌 수 있다. 


데이터형 : 기본형 , 참조형.


자바에서 기본형은 8가지다. ( boolean, int, short, byte,double, long, float, char ) 이다.


자바에서 참조형은 만들기 나름이지만, 예시를 들자면, 많이쓰는 String 정도가 되겠다.


캐스팅의 목적은 데이터를 바꾸는 것이 주목적이 아닌, 


코드를 적는 프로그래머가 이미 데이터 정보에 대해 이해한 가정하에, OOP의 다형성 측면에서 사용한다.


기본 데이터형에서의 캐스팅은 원칙적으로 데이터손실을 막고자 한다.


아래의 예시를 보자.


int a = 1.0; 


위의 예시는 컴파일 에러가 뜬다.


변수는 분명 int 정보만 원하고 있다. 1.0이라는 실제데이터는 int 정보를 이미 가지고 있고, 소수점을 표현하는


double형 데이터이다. 변수라는 것은 원하는 정보가 실제데이터에 있을 시, 문제 없이 받아 올 수 있다.


하지만 위의 예시는 왜 컴파일 에러가 뜰까?


답은 실제 데이터 1.0이라는 것이 a 변수에 들어 가면 1로 바뀌기 때문에 실제 데이터가 손실되는것을 막고자 하는 것이다.


하지만, 코드를 작성하는 프로그래머가 데이터가 손실된 다는 것을 이미 알고 있고 OOP의 다형성을 이용하고 싶을때는


아래와 같이 캐스팅을 하는 것이다. 


int a = (int)1.0;


실제데이터 앞에 (데이터 자료형) 을 붙여주면 캐스팅이 된다. 따라서 a 에는 1.0 대신 캐스팅된 1이 들어간다.


반대의 상황은 어떨까? 아래의 상황을 보자.


double b = 1;


위의 상황은 컴파일 에러가 뜨지 않는다. 하지만 의문을 가져야 한다.


분명 변수가 원하는정보는 더블형 데이터 자료형 이지만, 실제 데이터는 1이라는 int 자료형만 넣었다.


원칙으로는 변수가 원하는 정보를 충족하지 않을 시, 컴파일 에러가 떠야 한다.


하지만 컴파일 에러가 뜨지 않는 이유가 무엇일까?


그 이유는 기본형 끼리의 캐스팅이기 때문이다. 분명 실제 데이터는 1밖에 넣질 않았지만,


기본 자료형은 이미 컴파일러가 알고 있는 자료형이다. 따라서, 더블형 데이터의 형태를 추측으로 알 수 있는 것이다.


즉, 컴파일러가 자동적으로 더블형으로 바꿔주는 것이지, 원칙으론 안된다는 것을 알아야 한다.







실제로, 다음 포스팅할 다운캐스팅 같은 경우는 참조형 끼리의 형변환 이므로, 컴파일러는 참조형 데이터를 추리하지 못한다.


따라서, 윗 개념과 일맥상통하게 기본적으로 다운캐스팅은 성립되지 않는 개념이다. 


다음 포스팅때 업캐스팅과 다운캐스팅에 대해 그 의문을 풀어볼 것이다.



http://mommoo.tistory.com/41 - 업캐스팅

http://mommoo.tistory.com/51 - 다운캐스팅 



포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

오늘은 안드로이드 최신 위젯에 속하는


플로팅액션버튼(FloatingActionButton)에 대해 포스팅 한다.


먼저 아래의 유알엘(안드로이드 디벨로퍼) 에서 발췌한 


플로팅액션버튼에 관한 내용이다.


https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html


Floating action buttons are used for a special type of promoted action. They are distinguished by a circled icon floating above the UI and have special motion behaviors related to morphing, launching, and the transferring anchor point.

Floating action buttons come in two sizes: the default and the mini. The size can be controlled with the fabSize attribute.

As this class descends from ImageView, you can control the icon which is displayed via setImageDrawable(Drawable).

The background color of this view defaults to the your theme's colorAccent. If you wish to change this at runtime then you can do so viasetBackgroundTintList(ColorStateList).



간단하게 해석해보자면, 


플로팅액션버튼은 다른 View 들과 구별되게끔 공중에 떠있는듯한(그림자 효과를 이용- 엘리베이션 효과) UI이며,


또한 이버튼은 특정 지점으로 부터 애니메이션적 특징을 가질 수 있다고 한다.


xml 속성인 fabSize를 이용하여 크기를 정할 수 있고, 크기를 정하지 않을시 default 사이즈로 셋팅이 된다.


이미지뷰(ImageView) 위젯을 상속 받았기 때문에 이미지뷰 와 똑같이 이미지를 셋팅할 수 있고,


버튼의 색상은 theme 색깔인 colorAccent 기준으로 정해진다. 만약 코드로 바꾸고 싶다면,


setBackgroundTintList( 컬러값 ) 으로 바꿀 수 있다.



해당 위젯을 쓰기위해선 그래들에 아래와 같이 적어 sync 해야한다.


compile 'com.android.support:design:22.2.0'



이제, 코드를 통해 사용해보자. 중요한 점은 플로팅액션버튼의 에니메이션 특징이라던가


다른 View와 적절하게 이용되는 것들은( ex) snackBar가 나타날때 플로팅액션버튼이 스낵바위로 올라가는 애니메이션 발동,


리사이클러뷰를 스크롤할때 플로팅액션버튼이 숨겨지는 애니메이션 발동등)


CoordinatorLayout이랑 같이 사용해야 한다는 점이다. CoordinatorLayout이 여러 위젯,View들을 통솔하고 관리하는 역할을 하기 때문이다.


CoordinatorLayout 과 같이 사용할시 anchor (특정지점) 을 정할 수 있는것도 특징이다. 아래의 예시를 보자.




acitvity_mainxml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>

</android.support.design.widget.AppBarLayout>

<FrameLayout
android:id="@+id/frameLayout"
android:background="#ffff0000"
android:layout_width="match_parent"
android:layout_height="300dp"/>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

위와 같이 코딩 했을 경우 FrameLayout(빨간배경)과 상관없이 FloatingActionButton의 위치는 아래의 그림과 같이 배치된다.




위에서 말한 anchor 속성을 적용해 FrameLayout(빨간배경) 에 위치시켜보자.

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>

</android.support.design.widget.AppBarLayout>

<FrameLayout
android:id="@+id/frameLayout"
android:background="#ffff0000"
android:layout_width="match_parent"
android:layout_height="300dp"/>

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email"
app:layout_anchor="@id/frameLayout"
app:layout_anchorGravity="right|bottom"/>

</android.support.design.widget.CoordinatorLayout>

위와 같이 FloatingActionButton 안에 app:layout_anchor="~" , app:layout_anchorGravity="~" 를 추가했다.


해당 속성은 CoordinatorLayout이 가지고 있다. 특정지점을 frameLayout이란 id값을 통해 알려주고,


레이아웃 그래비티를 적절히 사용해 배치시켜 봤다. 아래의 그림이 결과물이다.



중요한점은 플로팅액션버튼, 즉 자기자신의 위젯의 그래비티와는 무관하다는 점이다. 


만약 위젯 레이아웃 즉, layout_gravity 속성을 적을시 그에 맞게 anchor 지점에서 이동한다.


anchor 지점을 정하는것은 CoordinatorLayout이 담당하는 것이므로, 당연히 다른 위젯들도 anchor를 정할 수 있다.


또한 anchor 을 지정해줌으로써, 특정 애니메이션의 행위를 보장 해줄 수 도 있다.


포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts