전체 글 477

기본적인 UX에서 취해야할 점

평소에 UI UX에 관심이 있던지라 UX관련 책을 지인에게 소개 시켜달라고 했더니 콘텐츠UX디자인 이라는 서적을 추천받았다. 디자인하시는 분들에게는 교과서라고 불린다고 해서 호기심에 구입하고 읽어보았다. 이 책은 90년대 2000년대 초반의 닷컴 붐에 따른 난잡한 디자인으로 망가진 웹사이트들을 예시로 들며 이야기하고 있는데, 모바일 퍼스트인 지금의 유행과는 다소 방향이 다르다고 볼 수 있다. 모바일은 PC웹화면과는 다르게 해상도가 작고 다양한 인터페이스를 활용할 수 있다. 그러나 기본적인 사용자의 특성이나 콘텐츠를 인지하는 방향은 현재와 같으므로 이를 기초로 습득, 변형하여 활용이 가능할 것으로 보인다. 개발자인 나로서는 디자이너보다 UI/UX적인 지식이 떨어질 수도 있고, 바라보는 방향이 다를 수도 있..

jqeury 스크롤 내리다가 특정 영역(부분) 이벤트 발생시키기

웹을 개발하다가 보면 스크롤을 내리다가 특정부분이 되면 혹은 특정 div가 나오게 되면 이벤트를 발생시키고 싶어 할 때도 있다. 아닐때도 있고, 갑자기 하고싶을 때도 있다. 이때 아래와 같이 사용하게 되면 이벤트를 딱 한번만 발생을 시킬 수 있다. HTML scroll down to see the div CSS body, html { height: 100%; } #wrapper { height: 400%; background: none repeat scroll 0 0 #f99ccc ; text-align:center; padding-top:20px; font-size:22px; } #tester { padding-top:1200px; height: 600px; background: none repeat ..

[Effective Java]가능하면 제네릭 자료형으로 만들 것

컬렉션 객체 선언을 제네릭화 하거나, JDK가 제공하는 제네릭 자료형과 메서드를 사용하는 것은 일반적으로 어렵지 않다. 그러나 제네릭 자료형을 직접만드는 것은 어렵지만 그래도 배워둘만한 가치가 있다. 1. 제네릭을 사용하지 않고 Object class를 활용하여 만든 Stack class12345678910111213141516171819public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void pu..

[Effective Java]무점검 경고(unchecked warning)를 제거하라

제네릭으로 프로그램하다보면 많은 컴파일러 경고메시지를 보게 된다. 아래가 그러한 경고이다. 무점검 형변환 경고(unchecked cast warning)무점검 메서드 호출 경고(unchecked method invocation warning)무점검 제네릭 배열 생성 경고(unchecked generic array creation warning)무점검 변환 경고(unchecked conversion warning)etc...제네릭에 대한 경험이 많고 코드에 대한 경험이 많다면 경고메시지가 줄어들지만 아직도 많은 제네릭 코드들이 경고메시지를 날리고 있다. 이러한 경고메시지를 제거하기 위해서 @SupressWarnings("unchecked") 어노테이션(annotation)을 사용해 억제한다. 하지만 @Su..

[TECH]멀티채널 커머스의 UX 최적화와 넥스트 트랜드

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 16:20 ~ 16:50 멀티채널 커머스의 UX 최적화와 넥스트 트랜드(팀인터페이스 문윤정 그룹장) 팀인터페이스/문윤정 그룹장 과거와는 다른 새로운 경험이 소비자에게 제공 동영상과 라이브스트림 컨텐츠 확산 생활 기계(사물인터넷 등)와 SNS채널 화면 밖의 Interaction(chat, 음성, 사진, VR 등) 오프라인 컨텍스트최근 e-Commerce UX 조사 내용채널 연결과 확장으로 인한 새로운 시나리오, 새로운 니즈들 "급해서 픽업하려는 건데 픽업상품 찾는 게 오래 걸려요" "온라인 품절일 때 가까운 매장 재고라도 알려줬으면 좋겠어요" "시댁이랑 우리집 배송 것 한꺼번에 장볼 때는 불편해요" "(온라인)상품화..

[TECH]차세대 쇼핑 보안이슈 및 인증결제 혁신방안

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 15:50 ~ 16:20 차세대 쇼핑 보안이슈 및 인증결제 혁신방안(라온시큐어 김운봉 이사) 라온시큐어/김운봉 이사최근 FIDO 등 고도화된 인증방식을 사용하지만 최근 "요기어때" 사태처럼 보안이슈가 계속해서 생기고 있다. 아래는FIDO인증이 어떻게 진행되는지 알 수 있는 간단한 동영상이다. 인증혁신으로 인해 가까운 미래에는 비밀번호가 없어지고 웹에서도 생체인식이 도입(FIDO 2.0)될걸로 예상함.Money 20/20에서 나온 미래의 결제 3대요소(지난 2012년부터 시작해 매년 열리는 세계 최대 규모의 결제와 금융 관련 컨퍼런스 및 전시회로 금융, 카드사, 핀테크 기업을 비롯 모바일, 유통 분야의 글로벌 기업들..

[TECH]챗봇을 통한 대화형 커머스와 리테일 혁신

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 14:00 ~ 14:30 챗봇을 통한 대화형 커머스와 리테일 혁신(삼성SDS 조상원 부장) 삼성SDS/조상원 부장Retail Trend 이전에는 단일 채널(오프라인 점포)에서 소비하는 것에서 언제 어디서든 쇼핑하고 어느 채널(온,오프라인)에서든 동일한 고객경험을 하도록 바뀌고 있다.Retail은 Technology를 적용하기에 적합 ex. AI와 Chatbot을 합쳐서 기존의 직원의 설명을 대체 - 얼리어답터의 제품지식은 기존 직원보다 더 뛰어날 수도 있으므로Retail의 chatbot 시장동향 "2017년까지 4천만 미국인 Amazon Alexa를 사용할 것입니다. 지금 리테일 사업에 Conversational ..

[TECH]Alibaba Cloud Smart Logistics with Data Technology

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 13:30 ~ 14:00 Alibaba Cloud Smart Logistics with Data Technology(알리바바 클라우드 코리아 조성범 대표) 알리바바 클라우드 코리아/조성범 대표알리바바 클라우드에서 광군절(2016.11.11)을 대비하여 서버를 구축했다. 광군절 하루동안 170000건/s 주문, 120000건/s 결제를 기록함. 마윈의 미래 5대 트랜드신링쇼우(신유통) : 'On + Offline + 물류'가 결합한 물류유통 체계, 재고를 제로로 만드는게 핵심신즈짜오(신제조) : 데이터를 에너지로 사용신찐롱(신금융) : 전세계 고객에게 서비스 제공신지슈(신기술) : 모바일 위주가 될 것신쯔위엔(신자원..

[패널토론]4차 산업혁명과 디지털유통산업 발전방안

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 11:00 ~ 12:20 [패널토론]4차 산업혁명과 디지털유통산업 발전방안 패널(왼쪽부터) 이베이 코리아/나영호 본부장미래창조과학부/송상훈 과장전자신문/김승규 부장한국IBM/정주연 상무산업통산자원부/정종영 과장패널토론한국 IBM Tech를 통해 유통산업을 혁신하고 BM을 구축하는 것은 대세가 되고 있다.CRM을 통한 빅데이터를 통해 개인화를 제공하는 것이 중요하다. 단순 챗봇방식을 통해서 text로 소통하는 것이 아닌, voice를 통해서 개인화를 제공하는 것으로 발전하고 있다. (ex. staples) 블록체인 기술의 장점(정보의 투명성과 가시성)을 통해 유통 value chain에 있어서 우위에 차지 할려고 노..

[기조강연]4차 산업 혁명과 디지털 시대의 유통혁신

IT로 판 키우는 유통혁신디지털 실크로드 20172017. 4. 5(수) 코엑스 그랜드볼룸 09:40 ~ 10:2 4차 산업 혁명과 디지털 시대의 유통혁신(한국 IBM 손건일 파트너/전무) 한국IBM/손건일 파트너/전무 Dramatic technology forces are behind "creative disruption" 국내 유통 업태 별 시장규모(2014년->2016년) 모바일 : 10.3 -> 23.7(CAGR 52%) 편의점 : 12.7 -> 19.5(CAGR 24%)2014년 각 업체별 전체거래총액 대비 모바일 판매 금액 - Mobile 커머스 경쟁이 심화되고 있음 쿠팡 : 71% 11번가 : 30%2017 CEI(Customer Experience Index) Study 화두는 개인화를 통..

Javascript 예외처리

JAVA와 거의 유사하게 Javascript에서도 예외처리가 가능하다. 그런데 예외처리가 잘쓰이는지 잘 모르겠다. AJAX를 사용하면 AJAX에 있는 done, success와 같은 문구로 사용을 더 많이할 것같다. 1234567891011121314151617181920 function registerEventListener(node, event, listener){ try{ //firefox, chrome etc.. node.addEventListener(event, listener, false); } catch(exception){ //internet explorer node.attachEvent('on'+event, listener); } } window.onload = function(){ va..

Javascript 객체 개요

자바스크립트는 자바처럼 객체 선언이 가능하다.아래와 같은 방식의 객체생성이 여러 생성방법 중 한가지이다. 1234567 var product = { name : 'mango', type : 'sweet', from : 'India' };cs 자바스크립트 배열과 상당히 유사한데 객체의 atttribute에 접근하는것도 비슷하게 접근가능하다. 혹은 java처럼 접근도 가능하다 1234567var name = product['name'];var type = product['type'];var name = product['from'];//orvar name = product.name;var type = product.type;var from = product.from;cs attrubute와 method가 포함..

Java refactoring 자바 리펙토링 하루만에 파해치기

리펙토링강의 3/10OOP(Object Oriented Programming) 리펙토링중요한것 : operation(method) - interface등을 통해 전체 구조를 알 수 있기 때문더 중요한것 : 개발경험 - 개발경험을 통해서 다른 코드와 비교가 가능하기 때문(비교를 통해 불편&더러운 코드인 것을 파악)Java가 1.0->2.0->...->8.0 버젼이 올라가면서 달라지는 것을 직접 개발하는 것도 개발경험리펙토링겉으로 드러나는 기능은 그대로 - interface를 수정X @Override으로 메서드를 추가하여 구조변경을 하는게 중요!!코드 구조 변경 즉 기능추가X - like 자동차 튜닝가독성 높이고 유지보수 - 기존코드 절대 건드리면 안됨(특히 interface)오류해결은 리펙토링X기능추가 !..

[Effective Java]자료형을 정의할 때 표식 인터페이스를 사용하라

마커 인터페이스 혹은 표식 인터페이스(marker interface)는 아무 메서드도 선언하지 않는 인터페이스이다.(자세한 내용 참조 블로그) (Ex. Cloneable, serializable,Eventlistener,Remote,RandomAccess,EnterpriseBean 등) 표식 어노테이션 vs 표식 인터페이스표식 인터페이스는 표식이 붙은 클래스가 만드는 객체들이 구현하는 자료형이라는점, 표식 어노테이션은 자료형이 아니다.표식 인터페이스는 적용 범위를 좀더 세밀하게 지정할 수 있기 때문에 표식 어노테이션보다 낫다. 그럼 어떤 상황에서 표식 어노테이션과 표식 인터페이스를 선택해서 사용해야 하나?클래스나 인터페이스 이외의 프로그램 요소에 적용되어야 하는 표식은 어노테이션으로 만들어야 한다.표식을..

[Effective Java]Override 어노테이션은 일관되게 사용하라

어노테이션을 일관되게 사용하면 끔찍한 human error로 인한 버그들을 방지 할 수 있다. 123456789101112131415161718192021222324252627public class Bigram { private final char first; private final char second; public Bigram(char first, char second){ this.first = first; this.second = second; } public boolean equals(Bigram b){ return b.first == first && b.second == second; } public int hashCode(){ return 31 * first + second; } public..

[Effective Java]작명 패턴 대신 어노테이션을 사용하라

Java 1.5 이전에는 annotation이 존재하지 않았다. 그래서 이전에는 도구 or 프레임워크를 특별 취급하기 위해서 Java 1.5 이전에는 작명 패턴을 사용(ex. JUnit 테스트 이름을 test로 시작하는 것)했다. 그러나 이 방법을 사용하면 이름을 잘못 입력하면 문제가 발생하거나 무시해버리는 오류가 생기며, parameter을 전달할 방법이 없었음. 이를 해결하기 위해 Java 1.5에서는 annotation이 등장 했다.JAVA API Annotation 자료형 보러가기(클릭) Annotation 종류@Override - 해당 메소드가 부모 클래스에 있는 메소드를 오버라이드 했다는 것을 명시적으로 선언@Deprecated - 더이상 사용되지 않은 클래스나 메소드 앞에 추가@Suppres..

[Effective Java]int 상수 대신 enum을 사용하라

JAVA API Enum 자료형 보러가기(클릭) Java enum의 특징 1. enum은 가독성이 좋고 안전하며 강력함2. enum안에 데이터 또는 그 데이터에 관계된 메서드를 추가해 기능을 향상시킨 enum으로 만들 수 있음 3. C/C++/C# 언어의 enum(단순 int 값)과는 다르게 Java에서는 참조 자료형으로 사용한4. toString 메서드를 호출하여 문자열로 쉽게 변경 가능5. Object 메서드 사용가능6. Comparable, Serializable 인터페이스가 구현되어 있음 End of Document

[Effective Java]예외를 무시하지 마라

어떤 메서드에 대해 예외가 발생할 수 있다고 선언했다면, 그것은 API를 이용할 프로그래머에게 무언가를 알리려는 것이다. 무시하면 안된다. 아래와 같은 코드로 손쉽게 무시 할 수도 있다. 위와 같은 코드처럼 무시할 수도 있지만 매우 의심스럽고 가독성도 떨어지고 이유를 알기가 어렵다. catch블록안에 적절한 코드가 없다면 적어도 catch 블록 안에는 예외를 무시해도 괜찮은 이유라도 주석으로 남겨두기라도 해야만 한다. End of Document.

[Effective Java]실패 원자성 달성을 위해 노력하라

예외를 던지고 난 뒤에도 객체는 상태가 이전 상태와 동일하며 사용가능한 형태로 남아있어야 한다. 특히 checked exception의 경우 그렇다. 위와 같은 코드 처럼 빈 스택에서 뭔가 뽑아내려고 할때 먼저 상황을 체크하고 exception을 throw하여 실패 원자성(failure atomicity)을 갖춘 코드라 볼수 있다. 방법은 크게 두가지가 있다. 1. exception이 났을 때 roll back될수 있도록 코드를 구성한다.2. 실패할 가능성이 있는 코드를 전부 객체 상태를 바꾸는 코드앞에 배치한다. 이러한 실패 원자성은 권장하지만 가은 객체를 여러 스레드가 동기화 없이 접근하는 것과 같은 특수한 경우에는 객체 상태의 일관성이 깨질 가능성이 있다. 또한 실패 원자성을 달성하기 위해 코드의 ..

[Effective Java]어떤 오류인지를 드러내는 정보를 상세한 메시지에 담으라

런타임에서 catch하는 unchecked exception에서 프로그램이 죽으면 시스템은 자동으로 해당 예외의 스택 추적 정보(stack trace)를 출력한다. 스택 추적정보는 예외 객체의 클래스명 뒤에 상세 메시지가 오는 형태로 구성되어 있다. 그러므로 오류 정보를 쉽고 빠르게 포착해 내기 위해서는, 오류의 상세메시지에 "예외에 관계된" 모든 인자와 필드의 값을 포함시켜서 stack trace에서 볼 수 있도록 한다. 위와 같은 상세 메시지를 사용하게 되면 최종 사용자(프로그래머, 서비스 담당자)가 오류 원인을 분석하여 이해 할 수 있게 된다. 최종 사용자가 오류 원인을 분석하기 위해서는 가독성보다 내용이 훨씬 중요하기 때문일 것이다. End of Document

[Effective Java]메서드에서 던져지는 모든 예외에 대해 문서를 남겨라

메서드를 올바르게 사용하려면, 메서드에서 던져지는 예외에 대한 설명이 문서에 있어야 한다. 따라서 문서화는 아주 중요하다.(당연한 이야기) 1. Javadoc @throws 태그를 사용해서 정확하게 밝히기2. 같은 이유로 동일한 예외를 던지는 메서드가 많으면 메서드마다 문서를 만들지말고, 예외에 대한 문서를 클래스의 문서화 주석(documentation comment)에 남기자. 단순하지만 명확한 결론 결론 : 메서드가 던질 가능성이 있는 모든 예외를 문서로 남기자

[Effective Java]표준 예외를 사용하라

자바 플랫폼 라이블러리에는 대부분의 API가 필요로 하는 기본적인 unchecked exception들이 갖추어져 있다. 이미 있는 예외들은 재사용하면 아래와 같은 좋은 점이 있다. 1. 배우기 쉽고 사용하기 편리한 API를 만들 수 있다.2. 표준 예외를 사용한 API는 가독성이 높다.3. 예외 클래스 개수를 줄이면 프로그램의 메모리 요구량이 줄어들고, 클래스를 로딩하는 시간도 줄어든다.(확인 불가..) 아래는 가장 널리 재사용 되는 예외를 정리한 표이다. 예외 사용법 IllegalArgumentException null이 아닌 인자의 값이 잘못되었을 때 IllegalStateException 객체 상태가 메서드 호출을 처리하기에 적절치 않을 때 NullPointException null 값을 받으면 ..

[Effective Java]불필요한 점검지정 예외 사용은 피하라

자바에는 exception이라는 훌륭한 기능을 제공한다. 그중 두가지 exception 종류는 아래와 같은 표로 정리 할 수 있다. checked exception unchecked exception 처리여부 반드시 처리 명시적으로 처리 안해도 됨 확인시점 컴파일 런타임 대표예외 exception의 상속받는 하위 클래스 중 Runtime exception을 제외한 모든 예외 runtime exception 하위 예외 이 중 checked exception을 너무 많이 남발하게 되면 불편하므로 checked exception을 던지지 않는 소스로 리펙토링 하는 것도 좋은 방법이다. 위와 같이 file input output 소스가 있다고 한다면 아래와 같이도 바꿀 수 있을 것이다. 항상 이렇게 리펙토링 가..

[Effective Java]예외는 예외적 상황에만 사용하라

아래와 같은 코드를 써서 반복구문(loop)를 돌리는 개발자는 없다.(없어야만 한다) 문제점이 뭐냐? 크게 3가지로 볼 수 있다.(라고 책에 나와있다.) 1. 예외는 예외적 상황을 위해 설계된 것이므로 JVM수준에서 보면 빠르게 만들 필요가 없다.2. try-catch 블록안의 코드는 최신JVM의 최적화 기법 중 일부분이 적용되지 않는다.3. array 내부의 중복 검사가 이루어지지 않는다. 그런데 위 내용에서 추가적으로 책에서 설명한 부분이 있다. "사실 최신 JVM에서 돌려보면 예외를 통해 구현한 순환문이 표준적 순환문 보다 훨씬 느리다. 필자의 컴퓨터에서는, 100개 원소를 갖는 배열일 때 두 배 이상 느렸다." 라는 글을 보고 직접 실험해보기로 하였다. 1. for loop 2. try-catch..

[Effective Java]생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라.

규칙 2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라. Builder pattern은 객체에서 생성자에 들어갈 파라미터가 많든 적든 차례차례 파라미터를 받아들이고 모든 파라미터를 받은 뒤에 이 변수들을 통합해서 한번에 사용을 할 수 있다. 사진. 고도화된 빌더패턴 안드로이드에서도 이 패턴을 유용하게 많이 사용했는데, 이게 어떻게 이루어지고 사용을 했는지 몰랐다. AlertDialog가 그 예이다. 아래는 AlertDialog의 예시이다. 안드로이드를 하다보면 이 패턴을 자주보게 된다. AlertDialog 뿐만아니라 Uri, Geofence 등등 해당 패턴을 많이 사용하고 있다는 것을 알 수 있었다. 기존에는 오버로딩(Overloading)을 활용하여 객체를 생성했으나 이는 어떤 파라미터..