
ICBM용어를 처음 들었을 때 대륙간 탄도미사일과 무슨 연관이 있을까 라는 생각을 한 적이 있다. ICBM은 Internet of Things(사물 인터넷), Cloud(클라우드), BigData(빅테이터), Mobile(모바일)의 첫 문자로 구성된 용어로 4차 산업 혁명의 핵심 기술로 미래창조과학부가 2014년 4월 사물인터넷 기본 계획을 발표한 자료에 처음 출현 한 것을 알고 있다. 개인적으로 대륙간 탄도미사일과 같은 파괴력으로 다가왔다. 우연이겠지만 진짜 이름 잘 짓는다... .. ICBM용어를 풀어서 이야기하면 자동차, CCTV, 온도센서, 습도 센서와 같은 장비와 같은 사물에서 데이터를 수집하여 클라우드에 저장하고 저장된 데이터를 빅테이터 분석 기술로 분석하여 위치 기반 서비스, 통계 서비스, ..

프로그램에서 복사는 데이터의 복제본을 만드는 것을 의미하는데 많이 실수하는 것이 Shallow Copy와 Deep Copy이다, 특히 객체를 가지고 작업을 하는 경우 특히 주의해야 한다. 다음 코드를 보자 ( 코드는 setter, getter, equals를 작성해야 하지만 lombok 라이브러리를 사용하였다. ) @Getter @Setter @Builder(toBuilder = true) @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode class 서비스요소VO implements Cloneable { private String 이벤트코드; private String 요소코드; private String 파라메터; public 서비스요소VO(서비스요..
프로그램 코드에서 데이터를 표현하기 위해서 배열, Map등을 사용한다, 특히 Map은 필드(Key), 값(Value)로 되어 있어필요시 필드(Key) 정의하여 사용하여 유연하게 사용할 수 있지만 를 적용할 수 있지만 프로그램 코드 여러 군데에서 필드를 정의(새롭게 만듬)하여 사용하면 Map으로 선언된 필드의 명확성이 없어서 contains를 사용하여 검사를 하는 로직을 넣어야 하는 단점이 있다.이것은 데이터의 의미가 가변적으로 변하는 것으로 프로그램 코드 작성시 주의를 해야 한다. 특히 파라메터로 전달 해서 필드(Key)를 추가하는 경우는 피해야 하는 것 중에 하나이다. 아니 하지 많아야 하는 것 중에 하나이다. 데이터의 값이 여러 곳에서 변경되면 데이터의 필드는 명시적으로 표현이야 명확하여야 한다. 명..
프로그램에서 함수는 기능을 처리 하기 위한 작은 단위로 하나의 기능만 처리해야 하지만 실제 함수에 여러 기능을 만들어서 라인 수가 많아 진다. 라인이 많으면 프로그램을 수정할 때 많은 잠재적 오류를 낼 수 있으며 복잡도가 높아져서 언젠가는 수정 불가능 할 정도가 된다. 어느 정도가 적당한 라인수 인가? 20라인 10라인 5라인... 라인수 보다는 함수 안에는 하나의 기능 있어야 한다는 것을 기억해야 한다. 하나의 기능으로 된 함수는 getter, setter와 같이 값을 설정하는 것을 제외하고 동사 수준으로 기능 코드는 5줄 미만이 되어야 하고 많아야 10줄 미만의 라인수를 의미한다. 함수의 이름은 함수가 수행하는 기능을 표현할 수 있는 이름으로 작명을 해야 한다. 프로젝트의 도메인에 따른 용어 사전을 ..
프로그램 코드를 작성할 때 일정 조건까지 반복해서 수행하기 위해서 반복문을 사용한다. 반복한다는 것은 시작값이 있고 종료값조건이 있고 얼마나 증감 또는 감소하는 값 즉 스텝이 있다. 모든 언어의 반복문은 비슷한 문법구조를 가지고 있으며 반복문을 사용하게 만드는 컬렉션은 언어마다 다른 타입이 있으며 컬력션 타입에 따라 사용방법이 조금씩 틀리다. 자바에서 set을 하우스키핑기법으로 코드로 작성할 수 있을까? for ( int I = p; i < carSet ; I++) { CarSet carSet = ..... } ... 에 어떤 문장을 완성해야 할까? 한번 생각해 보자. foreach문을 사용해야 한다. 즉 프로그램 언어별로 제공되는 타입에 따라서 적절히 사용해야 한다. 반복문을 다음과 같은 방법을 제공한..
프로그램코드를 작성하다 보면 일반적인 사항과 예외적인 사항이 존재하지만 초보 개발자가 실수하는 부분은 예외보다 일반적인 사항을 먼저 생각하는 경향이 있다. 파일 안에 특정문자나 단어를 찾는 프로그램을 개발한다고 생각해 보자 무엇을 먼저 해야 할까요. 일반적으로 다음과 같이 생각할 것이다. 파일을 오픈한다. 파일을 읽으면서 원하는 단어나 문장을 찾는다. 파일을 닫는다. 더 고려할 것이 없는지 생각해 보자... 파일을 오픈하는데 파일이 없거나 파일은 있지만 파일이 비어 있어서 읽은 것이 없거나 찾을 단어나 문장이 없으면 어떻게 할 건지를 우리는 먼저 생각하고 처리 방법에 대해서 고려해야 한데 조건문은 일반적인 사항만을 생각해서 코드를 작성하면 잠재적 오류가 발생할 수 있는 요소를 가지고 있는 것으로 예외 사..
오늘은 프로그램 코드를 작성할 때 어떻게 구조를 잡아야 아름다운 코드가 될 수 있는지에 대해서 이야기하고자 한다. 프로그램을 처음 접하는 개발자는 어떻게 프로그램을 작성해야 하는지를 생각하게 된다. 프로그램은 언어별 문법에 맞으면 어떤 구조로 작성을 하여도 실행이 된다. 그러나 프로그램 코드는 다른 개발자와 의사소통을 하는 첫 번째 수단이다. 다음 코드를 보자 public void logprint(){ System.out.println("처음 작성") ; int a=5; System.out.println(a);} public void logPrint() { System.out.println("처음작성"); int a = 5; System.out.println(a); } logprint 메서드와 logPr..
프로그래머는 항상 자신의 코드가 정리 잘되어 있어 구조적으로 이쁘고 읽기 쉽게 코드를 작성하기 위해 많은 시간을 할애하여 코드를 작성한다. 이것이 리펙토링이라 생각한다. 서점에 나온 책이나 인터넷 사이트를 검색하다 보면 많은 기법이 있고 어렵다고 생각이 드는데 리펙토링은 자신이 작성한 코드나 다른 개발자가 작성한 코드의 기능을 유지하면서 코드를 구조화(이쁘게) 변경하는 것으로 레거시 시스템을 리펙토링 할때는 알려진 버그가 있어도 수정하지 않고 그대로 코드를 읽기 쉽게 만드는 과정이다. 개발자가 코드를 작성 할때 요구사항을 수집하고 요구사항에 따라서 기능을 정의하고 정의된 기능을 기초로 하여 설계하고 코드를 작성한다. 설계 시 작성한 물리적인 폴더 구조, 클래스, 함수, 메서드(이하 함수라함)의 각 기능을..