Comparable 인터페이스를 이용한 기본정렬에 대한 것은 이전 포스팅을 참고 ☞ List 정렬하기 - 1. Comparable 인터페이스 Comparable vs Comparator 클래스 개발자가 Comparable 인터페이스를 구현해서 정해둔 기본 정렬 이외에 다른 방식으로, 정렬하고 싶은 경우에는 이름 비슷한 Comparator인터페이스를 이용해야 한다. 기본 정렬 이외에 방식이라는 것은 다른 필드값을 기준으로 정렬하고 싶은 경우나, 정렬방식을 변경하고 싶은 경우를 말한다. 아래 예제를 살펴보자 class BookNameComparator implements Comparator { @Override public int compare(Book o1, Book o2) { return o1.getNa..
컬렉션 프레임워크(Collections Framework)에서 List는 '순서'를 기억하고 중요시하는 자료구조다. List의 담겨있는 객체의 특정 필드값을 기준으로 순서를 정렬하고 싶다면 Comparable 인터페이스와 Collections.sort()메소드를 사용한다. 아래 간단한 예제를 보자. public class Book implements Comparable { private String name; private int price; public Book(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public int getPrice() { retur..
버전 관리하기 현재 디렉토리를 git으로 버전관리 시작하기 git init 프로젝트 디렉토리 버젼관리 상태 확인하기 git status 원하는 파일 버전 관리 시작하기 (stage area에 올리기) git add 파일명 사용자(유저) 등록하기 (한번만 시행되고, /.gitconfig 파일에 저장된다. 프로젝트마다 다른 유저를 사용하고 싶다면 --global 설정 삭제) git config --global user.name 유저명 git config --global user.email 이메일주소 stage area에 올라가 있는 파일들 버전 만들기 (commit하기) git commit -m "커밋메세지" commit 메세지 수정하기 git commit --amend commit log 보기 git lo..
리눅스(우분투)의 단축키와 인텔리제이(intelliJ)의 단축키가 중복된다면, 기본적으로 운영체제인 리눅스의 명령이 실행된다. 이런 경우 인텔리제이의 강력한 단축키 기능에 제약이 생기게 되므로 해당 되는 단축키를 달리 설정하여서 충돌을 방지해보자. (현재는 2가지 경우의 단축키 중복이 확인 되었습니다. 추후에 알게되는 단축키가 있다면 추가하겠습니다.) 인텔리제이(intelliJ)의 단축키 설정은 File - Settings - Keymap에서 설정 가능하다. 리눅스는 배포판이나 GUI 환경마다 조금씩 상이 할 수 있으나 기본적으로 Settings(시스템설정) - KeyBoard(키보드)에서 설정 가능하다. 개인적으로 리눅스 단축키는 Super(윈도우)키를 조합한 단축키 설정이 가능하므로, 리눅스 단축키를..
카카오2017 신입 공채 1차 코딩테스트의 1번 문제가 비트연산자를 이용한 문제가 나와서 해당 문제를 풀기 위해 비트연산자를 다시 공부해보았다. 비트연산자에 대해 학습 흥미도가 떨어진다면 해당 문제를 푸는 것을 목표로 삼아보자. 카카오 2017 신입 공채 1차 코딩 테스트 문제 해설비트연산자란? 피연산자(숫자)를 비트 단위(2진수)로 다루기 위한 연산자이다. (설명은 Java로 진행한다.) 10진수를 2진수 문자열(String)으로 변환하기 비트연산자 일지라도 자바에서 비트연산자는 10진수의 숫자로 진행해야 한다. 하지만 2진수로 변환된 숫자를 직접 보지 않으면, 연산이 제대로 되고 있는지 알기가 어렵다. Integer.toBinaryString() 메소드를 이용하여 10진수의 숫자를 2진수의 문자열로 ..
제네릭스의 와일드카드 "?"에 대한 내용은 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 3. 와일드 카드 제네릭 메소드 제네릭은 클래스에만 국한된 것은 아니다. 메소드 선언부에 제네릭 타입이 선언할 수있으며, 이러한 메서드를 제네릭 메서드라 한다. 제네릭 타입의 선언 위치는 반환 타입 바로 앞이다 static void myMetod(List list){ . . . } 제네릭 메소드 주의사항 제네릭 클래스에 정의된 타입 변수와 제네릭 메서드에 정의된 타입 변수는 별개의 것이다. 마치 지역 변수를 선언한 것과 같다고 생각하자. - 자바의정석 3판 695쪽 class Myclass { .... static void myMetod(List list){ // 제네릭 클래스의 선언된 T와 메소드의 선언된 ..
제네릭 클래스 선언 방법에 대해 알고 싶다면 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 2. 제네릭 클래스 선언하기 와일드 카드 와일드카드란, 제네릭 클래스의 객체를 메소드의 매개변수로 받을 때, 그 객체의 타입 변수를 제한하는 것을 말한다. 역시나 정의로는 이해가 어렵다. 아래 설명된 예제를 보자. 참고로 와일드 카드를 생각할때는 제네릭 클래스 타입과 '관점'에 대한 분리가 되어야한다. '제한된 제네릭 클래스'는 제네릭 클래스를 선언하는 개발자의 관점에서 객체 생성시 사용 될 객체를 제한하는 것이고, 와일드카드는 메소드를 만드는 개발자의 관점에서 메소드에 사용 될 매개변수가 제네릭 클래스를 구현한 객체일때, 그 제네릭 클래스 '타입 변수'를 제한 하는 것이다. (여기서 말하는 메소드는 '제네..
제네릭스의 기본적 정의와 사용 이유, 방법에 대해서는 이전 포스팅을 참고 ☞ 제네릭스(Generics) - 1. 제네릭스 사용 방법제네릭 클래스 다시 제네릭스의 정의에 대해서 생각해보자, 제네릭스가 '타입 체크'를 위한 기능이라는 것은, 결국 그 클래스가 다양한 타입의 객체를 사용할 수 있다는 것이다. 예제로 들었던, ArrayList에 클래스 선언문을 한번 보자. public class ArrayList{ (중략) public ListIterator listIterator(int index) { (중략) public E next() { . . ArrayList의 클래스 선언문을 보면 제일 상단 클래스 이름 오른쪽에 로 명시되어 있고, 클래스 내부에서 E를 사용하고 있는 것을 알 수 있다. E라는 것은 ..