본문 바로가기

전체 글155

Effective Java 아이템 7. 다 쓴 객체 참조를 해제하라 Effective Java 3판을 학습하며 요약한 내용입니다. 자세한 내용은 책을 참고해주시기 바랍니다. C, C++ 언어는 명시적으로 메모리를 할당해서 사용하고 자원을 다 사용하고 나면 개발자가 명시적으로 해제를 한다. 가비지 컬렉터를 갖춘 자바와 같은 언어를 사용하면, 가비지 컬렉터가 다 쓴 객체를 알아서 회수한다. 그래서 메모리 문제를 개발자가 전혀 신경쓰지 않아도 된다고 오해할 수 있다. 가비지 컬렉션 (Garbage Collection) 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블록 혹은 개체를 찾아서 자동적으로 다시 사용 가능한 자원으로 회수하는 것을 말한다. 가비지 컬렉션을 수행하는 부분을 가비지 컬렉터(Garbage Collector)라고 한다. Java에서는 개발자가 프로그램.. 2019. 4. 6.
백준 알고리즘 1152번 단어의 개수 1152번 단어의 개수 문제는 문자열 처리 알고리즘 문제이다. 1152번: 단어의 개수 첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열의 앞과 뒤에는 공백이 있을 수도 있다. www.acmicpc.net 단어 구분이 띄어쓰기만 이루어져 있으므로 문자열을 공백으로 분리한 뒤, 반복문을 통해 단어의 개수를 세면 결과값을 도출할 수 있다. 한 단어가 여러 번 등장하더라도 등장한 횟수만큼 모두 세는 것이기 때문에 별다른 조건문이 필요 없다. import java.util.Scanner; /** * 단어의 개수 문제 * 알고리즘 분류 : 문자열 처리 * * @.. 2019. 4. 6.
티베로 JDBC 연결 테스트 예제 이 글은 티베로(Tibero) 데이터베이스를 JDBC 클라이언트를 이용하여 연결 테스트하는 예제이다. 아래 코드를 실행하기 전에 데이터베이스 접속 정보를 변경해야 한다. 소스 코드 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; /** * Tibero DBMS Connection Example * * @author jayden-lee */ public class TiberoConnection { private String ip = "You.. 2019. 4. 5.
Ebean ORM 페이징 처리(Pagination) Ebean은 Java와 Kotlin을 위한 ORM 라이브러리이다. JPA 매핑 @Entity 어노테이션을 붙인 클래스를 이용해서 전체 데이터를 먼저 가져온다. 그리고 페이징 처리를 위한 값(offset, limit)을 설정해서 원하는 행 데이터만 가져온다. offset 데이터의 시작 위치 limit 데이터의 개수 Ebean.find(MyClass.class) .where() .setFirstRow(offset) .setMaxRows(limit) .findList(); 2019. 4. 5.
MySQL 프로시저와 함수 삭제(DROP) MySQL 데이터베이스에서 프로시저와 함수를 삭제하는 방법에 대해 알아보자. 프로시저와 함수를 삭제하기 위해서는 아래 문장을 실행하면 된다. DROP 문장을 실행했는데 데이터베이스 오류가 발생하면, 해당 오브젝트에 대한 ALTER ROUTINE 권한이 없어서 발생한 것이다. DROP {PROCEDURE | FUNCTION| [IF EXISTS} sp_name IF EXISTS는 옵션이다. 프로시저 또는 함수 오브젝트가 없는 경우에 DROP 문장을 사용하면, 데이터베이스는 클라이언트에 오류를 전달한다. 이 때, IF EXISTS 절을 추가하면, 오브젝트가 없더라도 오류가 발생하지 않는다. SHOW WARNINGS로 볼 수 있는 경고가 생성된다. 2019. 4. 5.
프로토콜 버퍼 스타일 가이드 (Protocol Buffers Style Guide) 회사에서 GRPC 프레임워크를 사용해서 프로젝트를 진행하면서 프로토콜 버퍼를 사용하고 있다. 프로토콜 버퍼는 구글이 만든 오픈소스로 언어와 플랫폼에 종속적이지 않은 구조화된 데이터를 직렬화하는 포맷이다. 이번에 살펴볼 내용은 프로토콜 버퍼 스타일 가이드이다. 공식 문서에 있는 내용을 번역한 글이다. 프로토 파일 프로토(.proto) 파일에 데이터를 구성하기 위한 메시지와 서비스를 정의하고, 컴파일을 하면 각 언어에 맞는 소스 코드가 생성된다. 아래 소스 코드는 간단하게 프로토 파일을 작성한 형태이다. syntax = "proto3"; option java_multiple_files = true; option java_package = "com.jayden.grpc.examples.helloworld"; .. 2019. 4. 5.
Kotlin 변수(Variables) 알아보기 변수(variables)는 간단히 말해서 값을 저장하는 공간입니다. 프로그래밍 언어에서 특정 계산을 수행하거나 또는 어떤 값을 저장하기 위해서 사용합니다. 이번 글에서는 Kotlin에서는 어떻게 변수를 선언하고 초기화하는지에 대해서 알아보도록 하겠습니다. Kotlin 변수 타입 추론 Kotlin은 강력한 타입 추론을 갖고 있습니다. 개발자가 변수의 타입을 명시적으로 선언할 수 있지만, 일반적으로 컴파일러가 변수의 타입을 추론해서 작업을 수행하게 됩니다. 변수 선언 및 초기화하기 var/val 변수명: 변수타입 = 초기화 변수명을 식별자라고 합니다. 식별자는 키워드(var, val와 같이 Kotlin에 미리 정의된 단어)를 제외한 영문자, 숫자, 언더스코어만 가능합니다. var와 val 키워드는 무엇인가?.. 2019. 4. 5.
Kotlin 프로그래밍 시작하기 Java 개발자인데 Kotlin을 배우려는 이유? KCD 2019 세미나에서 "구글이 선택한 코틀린? 왜 좋을까?"라는 세션을 듣고 나서 Kotlin 언어에 대해 관심을 갖게 되었습니다. 아마도 JVM 기반 언어이면서 Kotlin이 Java와 100% 호환성 지원이 된다는 사실에 끌렸던 것 같습니다. 마침 현재 진행하는 프로젝트에서도 특정 처리에 대해서 Kotlin으로 처리하고 있었습니다. 그렇기 때문에 Java로 작성된 코드를 Kotlin으로 변경해보면서 익히면 자연스럽게 배울 수 있다는 생각이 들었습니다. 참고로 IntelliJ IDEA에는 Java 코드를 Kotlin 코드로 변경해주는 기능이 있습니다. 다시 생각해봐도 Kotlin을 배우고자 했던 큰 이유는 단순한 호기심 때문인 것 같습니다 😊 하지.. 2019. 4. 5.
MySQL SELECT 문장에서 Limit 사용법 Limit 단어는 ‘한계’, ‘한도’ 라는 단어 뜻을 갖고 있다. MySQL 데이터베이스 Select 문장에서 Limit 키워드를 사용하면 테이블 데이터 조회 시 한계를 지정할 수 있다. 예를 들어, 테이블에서 10개의 데이터만 가져오는 SELECT 문장을 만들기 위해서는 아래처럼 사용하면 된다. -- 행 데이터 10개만 조회하기 SELECT title, content, writer FROM board LIMIT 10; 그리고 Offset 옵션을 이용하면, 가져오고자 하는 행 데이터의 시작 지점을 지정할 수 있다. 아래 쿼리를 실행하면 테이블의 11행부터 20행까지의 데이터를 가져온다. -- 11번째 ~ 20번째 행 데이터 조회 SELECT title, content, writer FROM board L.. 2019. 4. 5.