같은 CSS 명령어 지만, 브라우저 마다 다르게 해석하거나,


지원하는 방법이 틀린 것들이 존재한다.


이는 CSS3의 웹표준이 아직 정해지지 않았기 때문이다.


따라서, 개발자들은 크로스 브라우징을 구현 해야한다.


방법은 브라우저 접두사를 사용하여


다양한 브라우저에 같은 결과를 내게끔 코딩한다.


아래의 접두사를 참고하자.


- webkit -          :  사파리, 크롬


- moz -             :  모질라, 파이어폭스


- o -                 :  오페라


- ms -               :  마이크로소프트


아래는 column-count라는 속성의 예시다.


브라우저 마다 아직 지원하는 방법이 틀리기 때문에 아래와 같이 사용해야 한다.


- webkit - column-count : 3;

- moz - column - count : 3;

column - count : 3; /* 표준이 정해 질 시 사용하게 될 속성. 브라우저에 따라 적용되지 않을 수 있다. */



'Html5 & CSS3' 카테고리의 다른 글

HTML 캔버스 해상도  (2) 2017.07.27

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

Buy me a coffeeBuy me a coffee

오늘은 Enum 자료형에 대해 포스팅 한다.

자바 1.5가 추가 됨으로써, 새로운 참조자료형이 추가 됬다.

그중 하나는, 열거자료형(Enum Type)이라 불리는

새로운 종류의 클래스이다.

보통 자바에서 상수의 열거는 아래와 같이 작성한다.


public static final int AMERICANO = 0;

public static final int CAFE_MOCHA = 1;

public static final int CAFE_LATTE = 2;


public static final int APPLE_JUICE = 0;

public static final int ORANGE_JUICE = 1;

public static final int GRAPE_JUICE = 2;


책에서 말하길, 이 기법은 int enum 기법이라 한다.

하지만, 이 기법은 치명적인 단점이 있다. AMERICANO 와 APPLE_JUICE는 우리가 보고있는 이름은 틀리지만,

값은 0으로 같은 상황이다. 즉, 아래와 같은 메서드가 있다고 가정할 시,


public static void makeCoffee(int coffeeType){

  //..........

}


해당 메서드는 APPLE_JUICE를 넣더라도 컴파일 오류 없이, 아메리카노를 넣은 것과 똑같이 잘 실행이 된다. 

이유는 위에서도 적었다 시피, 같은 0값이기 때문이다.

또한, 우리는 값 0으로 구분하는 것이 아닌 이름, 즉 변수명으로 구분한다. 변수명을 보고

이것이 아메리카노, 오렌지 쥬스등을 파악하기 때문이다. 하지만, int enum기법은 문자열로 변환하기가 녹록치 않다.

원하는 문자열로 변환해주는 메서드 if ~ else 조합으로 만들 수는 있겠지만, 해서는 안될 짓이다.

왜냐하면 아이템이 추가 될때마다, 단적으로 else를 추가해 줘야하고,  

그 메서드로 인해 영향을 받는 모든 코드들을 수정해야 하기때문에 유지보수에 큰 난항을 겪기 때문이다.


그렇다면, 문자열로 변환하기 쉽게 toString() 메서드를 제공하는, String 클래스를 이용하여 아래와 같이 열거형을 만들면 어떨까? 

public static final String AMERICANO = "0";

위와 같이 열거형을 구성하면, AMERICANO.toString()을 실행하면 원하는 문자열인 "AMERICANO"를 얻을 수 있지만,

String enum 패턴이라 불리는 이 패턴은 해서는 안 될 패턴이다. 

문자열 비교는 성능을 떨어 트릴 수 있고, 클라이언트 입장에서

인자를 넣기를 AMERICANO변수를 이용하지 않고, "0"으로 메서드를 실행 할 수 있는 가능성이 있기 때문에, 좋지 않다.

이렇게 됬었을 시, 설계자가 AMERICANO를 바꿨을시, 클라이언트의 코드는 원하느 결과가 나오지 않을 뿐더러,

컴파일 오류가 나지 않는 경우는 버그를 찾기 힘들기 때문이다.


이러한 문제점을 해결하기 위한 대안이 바로 열거형 자료형인 Enum 이다.

위에서 예로 적은 상수들을 아래와 같이 Enum 열거형으로 바꿔보았다.

public enum Coffee { AMERICANO, CAFE_MOCHA, CAFE_LATTE }

public enum JUICE { APPLE_JUICE, ORANGE_JUICE, GRAPE_JUICE }

위 enum클래스는 클라이언트가 접근 할 수 있는 생성자가 없다. 또한 final 이 내부적으로 선언되 있으므로,

객체생성, 상속이 되지 않는다. 


enum의 장점 중 하나는 컴파일 시점 시 형 안정성을 제공해준다. 

Coffee자료형은 반드시 Coffee안에 존재하는 열거 상수를 받아야 하지,

JUICE의 열거 상수가 들어가면 컴파일 오류가 발생한다. 

위에서 말한 int enum의 문제점인 makeCoffee안에 APPLE_JUICE를 넣더라도 실행되는걸 막을 수 있단 얘기이다.

또한 enum은 같은 값을 가진 상수들을 평화롭게 공존 시킬 수 있는데,

enum의 이름으로 각 상수들을 구분 할 수 있기 때문이다.

enum은 각 상수마다 toString 메서드를 사용 할 수 있어, 문자열로 쉽게 변환이 가능하다.

enum역시 클래스므로, 변수와 메서드를 추가 할 수 있다. 

위에서 작성한 열거 상수들은 변수가 아닌 상수임에 유의 하자.

변수와 메서드를 추가 하는 이유는 간단하다. 상수를 좀더 멋지게 사용하고 싶은 생각이 있는 것이다.


해당 내용은 다음 포스팅에서 계속한다.


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

Buy me a coffeeBuy me a coffee

안녕하세요. mommoo 입니다.


1.7버전 업데이트 이후로,

꽤 많은 시간이 흘렀는데요.

그때부터 지금까지 열심히 만든 기능들의 

2.0v 업데이트 내용인 캘린더 기능에 

대해 포스팅 하고자 합니다.

Swipe 메뉴


캘린더 기능을 더욱 더 효과적으로 쓰기 위한

메뉴입니다!. 해당 메뉴는 앱 상단 왼쪽에 메뉴 버튼을 누르셔도 되구요,

왼쪽 끝 에서 오른쪽 방향으로 스와핑 하셔도 됩니다.

표시 캘린더 아래에는, 개인 디바이스의 저장소가 들어 있구요,

특이점은 학사일정 저장소가 있습니다.

학사일정 저장소를 예시로 설명해드리자면,


학사일정 저장소는 서울과학기술대학교 학사정보를 위한 저장소 입니다.

해당 저장소를 체크시, 캘린더 화면에는 서울과학기술대학교 학사정보가 표시가 됩니다. 

아래의 스크린샷 처럼요!

캘린더 메인 화면

스와이핑 메뉴를 잘 활용 하시면 표시하시고 싶은 캘린더만 표시할 수 있습니다.

세부 사항을 보고 싶다면 해당하는 date영역을 터치해주세요.

세부 사항 보기

해당 하는 date 영역을 클릭시, 나오는 화면입니다.

해당 date는, 개인 일정 없이 학교 일정만 존재하는 모습입니다.

리스트의 일정을 터치 시, 세부 사항을 볼 수 있으며 수정가능한 일정은

수정,삭제 등이 가능합니다.

일정 추가는 어떻게 하는 걸까요?

오른쪽 아래 +버튼을 터치하면 아래와 같은 일정 추가화면이 나옵니다.

일정 추가 하기

위와 같이 일정 등록을 편하게 하기 위한 Form이 열려,

어렵지 않게 일정 등록 하 실 수 있습니다.

------------- 2016년 11월 7일 추가----------------

일정 등록 시간을 '하루종일'로 설정 시, 제대로 적용되지 않는 버그가 있습니다.

해당 버그를 픽스할

2.0.1v 업데이트를 진행 할 예정입니다.

----------------------------------------------------------------------

학우들이 과기DAY로 학교생활을 편리하게 이용했으면 합니다 ^^.

읽어주셔서 감사합니다.


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

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

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

Buy me a coffeeBuy me a coffee

컴포넌트(Component)개념의 등장배경 과 의미에 대해 기술한다.


컴포넌트 개념의 유래

 

  많은 하드웨어 제품들은 각각 독립된 기능을 가진 모듈로 만들어진다.

이 제품들은 회사 상관없이 서로 조합하여 하나의 제품이 만들어진다.

이러한 제품들의 부품은 문제가 발생했을 시,

해당 부품만 다른 부품으로 바꾸어도 제품은 문제없이 작동한다.

컴퓨터와 스마트폰과 같은 제품들을 상상해보면 금방 이해가 갈것이다.


 반면에, 소프트웨에 에서는 상황이 틀리다.

소프트웨어를 독립적으로 개발되지 않은 경우가 많을 뿐더러, 독립적으로 개발되어도

다른 모듈과의 호환을 생각하지 않고 개발한다. 

이는 결국 소프트웨어의 재사용을 어렵게 하고 유지보수 비용이 크게 증가하는 원인이 된다.

이러한 상황에서 소프트웨어의 재사용의 중요성 과 필용성을 위해 나온 기술이 컴포넌트 기술이다.


컴포넌트는 독립적인 단위모듈이다.

 

  하드웨어처럼 독립적인 기능을 수행하고 추후에 교환될 수 있도록 해야한다.

또한 컴포넌트의 세부사항은 겉으로 드러나선 안되는것 이며, 일부러 끄집어 내려는 시도조차

하지 말아야 한다. 필요한것은 단지 해당 컴포넌트를 쓰기 위해 제공해주는 일종의 '장치'가 필요하다.

예를들어서, 스마트폰의 밧데리 수명이 다했을 경우 밧데리를 새로 구입하여,

스마트폰에서 밧데리만 교체했을 것이다. 이때 스마트폰 단자와 밧데리 단자가 맞물려야 제 기능을

발휘하는데 이때 밧데리 단자가 앞서 말했던 일종의 '장치'가 된다.


컴포넌트 개념을 객체지향 언어에 대입

 

  스마트폰과 밧데리가 각각 독립적으로 문제없이 돌아간다고 가정할때, 상호간의 단자만 규격에 맞을시, 

어떠한 밧데리를 교환하더라도 스마트폰은 정상 작동할 것이다.

이와 같이 소프트웨어 에서도 단자와 같은 일종의 장치가 필요하다. 객체지향 언어에서는 이러한 장치를

인터페이스(interface)로 제공해준다. 인터페이스는 사용자에게 해당 소프트웨어를 쓰기위한 

메서드(=장치)를 공개하고, 규격화된 메서드 환경에서 소프트웨어를 개발할 수 있는 환경을 제공해준다.

소프트웨어의 세부내용은 인터페이스를 구현받은 클래스가 작성한다.

이렇게 함으로써 객체지향 개념은 정보은닉개념을 수행할 수 있을 뿐더러,

각각 독립된 모듈로 소프트웨어를 만들수 있도록 크게 이바지 할 수 있다.



결론적으로, 컴포넌트는 각각 독립된 모듈을 뜻하며, 이는 흔히 JAVA같은 oop 언어등의 class등의

개념과는 다르다. 하나의 컴포넌트는 하나의 클래스로만 작성될 수 도 있지만, 여러개의 클래스로도

작성될 수 있기 때문이다. 컴포넌트 개념을 잘 적용한 소프트웨어란 부품(인터페이스를 구현받은 클래스)

만 바꾸어 주었을시, 오류 없이 잘 작동 되는것 을 의미한다.


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

DTO와 VO란?  (2) 2017.02.08
GET방식 과 POST방식  (32) 2016.12.10
URL 이란?  (2) 2016.06.14
URI 이란?  (0) 2016.06.13
List와 Map의 차이 (2)  (0) 2016.04.27

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

Buy me a coffeeBuy me a coffee

+ Recent posts