■ 잡담Linked List의 장단점이 무엇입니까? 면접관님의 질문이였습니다. 지원자는 그 순간 머리를 재빠르게 굴리기 시작했지만 시원한 답변을 하지 못했습니다. 지원자는 Linked List의 구조를 숙지하고는 있었지만, 장단점에 대해서는 인지를 하고있지 못했기 때문입니다. 이번 포스팅에서는 이와같은 불상사가 발생하지 않기 위해 Linked List를 이해하고 그의 장단점에 대해 알아보도록 하겠습니다. ■ 단일 연결 리스트연결 리스트는 각각의 노드가 다음 노드를 가리키며 연결되어 있기 때문에 연결리스트라고 합니다. 단일 연결 리스트의 경우에는 각 노드가 다음 노드만을 가리키기 때문에 단일 연결리스트라고 불립니다. 단일 연결리스트에 대한 정확한 이해는 그림을 통해 확인해 보도록 하겠습니다. 단일연결리스트..
■ 직렬화 - Serialization여러 프로젝트를 진행하다보면 가끔씩 객체를 파일로 저장하거나 네트워크를 통해 전송하고 싶은 경우가 있습니다. 이럴경우 객체를 JSON으로 일일이 바꿔서 전송했는데요, 이처럼 불편한 방식을 사용하지 않고 정말 깔끔하게 객체그 자체를 저장하거나 전송할 수 있는 방법이 있습니다. 짐작하셨다싶이 그 방법은 바러 직렬화(Serialization)인데요, 이번 포스팅은 이 직렬화에 대해 알아보고 예제를 통해 사용 방법을 알아보도록 하겠습니다. ■ 직렬화란?직렬화라는 단어에는 무언가 일자로 늘어놓는것이 연상되는데요, 실제로 직렬화라는 개념은 이와 비슷합니다. 직렬화는 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것 입니다. 다시말해 객체의 내용을 바이트 ..
■ JVM - Java virtual machineJVM은 자바를 실행하기 위한 가상 머신입니다. java가 어떤 플랫폼에도 상관 없이 독립적으로 구동될 수 있는 비밀이 바로 이 JVM에 있습니다. Java로 작성된 프로그램은 모두 이 JVM이라는 가상 컴퓨터 위에서 구동되기 때문에 Java 애플리케이션이 실행되기 위해서는 받드시 JVM이 필요합니다. JVM은 Java의 컴파일에 관련하여 연관이 깊은데 이에 대한 내용은 이전 포스팅에서 이미 다뤘습니다. (http://boxfoxs.tistory.com/244) 이번 포스팅에서는 이러한 JVM의 메모리 구조에 대해서 알아보고자 합니다. ■ JVM의 메모리 구조응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 J..
■ 잡담병합정렬에 대해서는 고등학교 1학년인 작년에 이미 배워서 직접 짜본적도 있었습니다. 하지만, 정렬 알고리즘을 사용하지 않다보니 배웠던것도 까먹게 되더군요.. 그래서 이번에는 병합정렬 알고리즘에 대해 알아보도록 하겠습니다. ■ 병합정렬병합정렬은 이름만 듣게되면 무언가 합치는 정렬이라고는 짐작이 될것 같습니다. 일부분은 맞는 말 입니다.병합정렬은 전체 원소를 하나의 단위로 분할한 후 분할한 원소를 다시 병합하는 정렬방식이며 분할정복 기법중 하나입니다. 1. 분할정렬되지 않은 데이터를 위의 그림과 같이 최소한의 크기로분할합니다. 2.합병분할한 데이터를 2 그룹씩 짝을지어 합병하고 정렬을 수행합니다. 이 과정을 반복하게 되면 최종적으로 데이터 정렬을 모두 마치게 됩니다. 3.정렬분할된 데이터를 정렬하며 ..
안녕하세요 박스여우입니다. 이번에는 DataBase의 트랜잭션 회복기법에 대해 알아보도록 하겠습니다. ■ UNDO & REDOUNDO : 만약 해당 트랜잭션이 어떤 이유든 정상적으로 종료될 수 없게 되면. 즉, 데이터베이스의 내용 자체는 손상되지 않았지만 변경 중이거나 변경된 내용에 대한 신뢰성을 잃어버린 경우에 트랜잭션이 변경한 페이지들은 원상 복구되어야 합니다. 이러한 복구를 UNDO라고 하며 로그를 이용하여 모든 변경을 취소시키는 방법입니다. 이를 통해 트랜잭션의 원자성을 제공합니다. REDO : 데이터베이스 내용 자체가 손상이 된 경우에 가장 최근의 복제본을 적재시킨 뒤 복제본 이후에 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스를 복원하는 것을 Redo라고 하며 이를 통해 트랜잭션의..
안녕하세요 박스여우입니다.오늘은 바로 어제 해커톤에서 처음 시도해 보았던 javascript에서 AJAX나 form 태그 없이 POST를 전송하여 Google URL Shortener API를 사용하는 방법에 대해 다뤄보고자 합니다. ■ With JQueryWebView를 이용해 사이트 내에 있는 data-src 정보를 받아오는데 url의 길이가 너무 길어 코드로 넘어올때 자동으로 중간이 ...으로 요약되서 넘어와 문제가 발생했습니다. 그래서 javascript에서 url정보를 넘겨받을때 url을 단축시켜 받고자 Google URL Shortener를 사용하였습니다. Google URL Shortener API를 사용하는 방법은 그냥 POST 방식으로 request를 보내면 되서 간단하게 사용할 수 있습..
안녕하세요 박스여우입니다. 이번에는 JavaFX를 이용하여 가장 기본적인 버튼 클릭 이벤트를 구현해보도록 하겠습니다. ■ FXML & Controller지난 포스팅때도 말씀드렸다 싶이 JavaFX는 MVC 패턴을 사용하여 View를 FXML과 CSS로, 컨트롤러는 전달된 UI 컴포넌트를 의존성 주입 방식으로 활용하게 됩니다. 따라서 UI를 디자인 하는 디자이너와 프로그램을 개발하는 개발자 사이의 일을 명확하게 구별할 수 있습니다. 이번에는 이런 JavaFX의 기능들을 활용하여 FXML로 UI를 구현하고, 그 UI를 Controller로 다뤄보도록 하겠습니다. ■무작정 따라해보기지난 포스팅에서 진행한 eclipse에서의 JavaFX 셋팅을 진행해 주셔야 이번 과정을 수행하실 수 있습니다.eclipse에서 ..
안녕하세요 박스여우입니다. 오늘은 GUI 개발을 위한 JavaFX에 대해 알아보도록 하겠습니다. ■ Swing은 가라! JavaFX는 기존 Java의 표준 GUI 라이브러리인 Swing을 대체하기 위해 개발되었지만 훨씬 가볍고 강력합니다. GUI에서 컴포넌트를 호출할 때 애니메이션 전환, 흐림 효과나 drop shadow등과 같은 효과(effect)들은 유저 경험에 큰 변화를 만들 수 있는 중요한 요소 입니다. 이러한 요소들은 작고 디테일해서 크게 신경쓰지 않는 부분이지만, 응용 애플리케이션에 도입하게 되면 세련된 UI를 만들 수 있습니다. 이와같은 애니메이션과 전환 효과 등은 Swing으로 구현이 가능하지만 매우 고통스러운 작업을 거쳐야 구현이 가능합니다. 특별한 컴포넌트를 만들기 위해서는 셀 수도 없..
■프로토콜프로토콜은 통신 규칙과 방법입니다. 통신을 원하는 개체간에 무엇을, 어떻게, 언제 통신할 것인가를 정해놓은 규약 입니다. 국제 표준 기구에서 이를 표준화 하여 대부분의 통신 장비들에서는 표준에 맞춘 프로토콜을 사용하고 있습니다. ◆프로토콜의 기능분할 - 큰 용량의 데이터를 전송하기 위해 데이터를 나누는 기능 입니다.재조립 - 분할된 데이터를 사용하기 위해 재조립 하는 기능 입니다.캡슐화 - 데이터에는 계층을 거칠때 마다 헤더가 계층별로 붙게 되는데, 이를 캡슐화라고 합니다.순서 제어 - 전송되는 데이터의 순서를 조율하고 이를 통해 데이터가 중복되거나 유실되는지 체크하는 기능 입니다.흐름 제어 - 송신되는 데이터의 양과 전송률을 제한하는 기능 입니다.오류 제어 - 데이터가 올바르게 수신되었는지 에..
안녕하세요 박스여우입니다.최근 학교의 잔류조사 시스템 개발을 마무리 하고 있는데요, 사감선생님의 편의를 위해 조사된 결과를 엑셀 파일 형태로 출력해야 했습니다. 그래서 오늘은 Java에서 엑셀 파일(xls, xlsx)을 읽고 쓰는 방법을 소개해 드리려고 합니다. ■ Apache POI우선 엑셀파일을 텍스트 파일처럼 읽고 쓸수는 없습니다. 때문에 Java에서 엑셀파일을 다루기 위해 Apache POI 라이브러리를 사용해야 합니다. Apache POI 라이브러리를 다운받기 위해서는 https://poi.apache.org/download.html 요 주소로접속한 뒤에 스크롤을 내리다 보면위와같이 Binary Distribution 항목이 있습니다. 여기에서 빨간색 부분(poi-bin-3.15-beta2-....