람다 자바 8에서 소개된 문법이다. 람다를 사용하면 코드를 줄일 수 있으며, 가독성이 좋다. 예시를 통해 람다를 알아보자. interface Printable { void print(String s); } 전 포스팅에서 다뤘던 익명클래스를 사용해 위 Printable 인터페이스를 구현하는 인스턴스를 생성하기 위해 다음과 같이 코드를 작성했었다. 📌 익명 클래스 인스턴스 생성 Printable prn = new Printable() { @Override public void print(Stirng s) { System.out.println(s); } }; 이것을 람다를 기반으로 수정하면 다음과 같다. 📌 람다식의 두가지 표현 방법 Printable prn = (String s) -> { Sytem.out...
☕ Java/이론
네스티드 클래스 클래스 내에 정의된 클래스를 네스티드(Nested) 클래스라 하고, 이를 감싸는 클래스를 외부(Outer) 클래스라 한다. class Outer { // 외부 클래스 class Nested {...} // 네스티드 클래스 } 💡 네스티드 클래스 종류 네스티드 클래스는 static의 선언 여부를 기준으로 Static 네스티드 클래스와 Non-static 네스티드 클래스로 나뉜다. Non-static 네스티드 클래스는 이너 클래스라고도 부르며 정의되는 위치나 특성에 따라 멤버 이너 클래스, 로컬 이너 클래스, 익명 이너 클래스로 나뉜다. (이너 생략 가능) Static 네스티드 클래스 Non-Static 네스티드 클래스 (이너 클래스) 멤버 클래스 로컬 클래스 익명 클래스 // Staitc ..
가변인자 가변인자를 선언할 때는 ...을 사용한다. 메소드의 매개변수를 선언할 때 가변 인자 선언을 하면, 전달되는 인자의 수에 제한을 두지 않을 수 있다. 가변인자를 선언한 메소드 호출이 이뤄지면, 배열을 생성하여 전달되는 인자들을 모두 담는다. public static void showAll(String... vargs) class Varargs { public static void showAll(String...vargs) { // 매개변수의 가변인자 선언 // vargs를 배열처럼 사용 System.out.println("LEN: " + vargs.length); for (String s : vargs) System.out.println(s + " "); System.out.println(); }..
인터페이스 기반 상수 정의 인터페이스 내에 선언된 변수는 public, static, final이 선언된 것으로 간주한다. 자바 5 이전에는 연관된 상수들을 하나의 인터페이스로 묶어서 선언하는 방법을 사용했다. 하지만 이러한 방식은 잘못된 메소드 호출임에도 에러를 발생시키지 않는다는 문제점이 있다. interface Animal { int DOG = 1; int CAT = 2; } interface Person { int MAN = 1; int WOMAN = 2; } class Const_Interface_NonSafe { public static void main(String[] args) { who(Person.MAN); // 정상적인 메소드 호출 who(Animal.DOG); // 비정상적인 메소드..
collections 클래스에는 다양한 알고리즘을 구현한 메소드들이 존재한다. 이중 일부를 공부해보려고 한다. 정렬 메소드 (sort) public static void sort(List list) List 인터페이스를 구현한 클래스들은 저장된 인스턴스를 정렬된 상태로 유지하지 않는다. 정렬을 원한다면 sort 메소드를 사용하면 된다. 코드 분석 public static void sort(List list) 제네릭 메소드로, 메소드 호출 시점에 T가 결정된다. 인자로 List의 인스턴스라면 모두 전달 가능하다. public static void sort (List list) 이때 T는 Comparable 인터페이스를 구현한 상태여야 한다. public class SortCollections { publi..
스택, 큐, 덱 자료구조 스택 (Stack) 가장 먼저 저장된 데이터가 가장 마지막에 빠져나오는 자료구조이다. LIFO (last-in-first-out) : 먼저 저장된 데이터가 마지막에 빠져나간다. 큐 (Queue) 가장 먼저 저장된 데이터가 가장 먼저 빠져나오는 자료구조이다. FIFO (first-in-first-out) : 먼저 저장된 데이터가 먼저 빠져나간다. 덱 (Deque) 양쪽 끝에서 넣고 빼는 것이 가능한 자료구조이다. 덱은 스택처럼 사용하는 것이 가능하며, 뿐만 아니라 큐처럼 사용할 수도 있다. public interface Deque extends Queue Queue Queue 인터페이스 메서드 메소드 설명 boolean add(E e) 넣기 E remove( ) 꺼내기 E elem..
Set 컬렉션 클래스 인스턴스 저장 순서를 유지하지 않는다. 동일 인스턴스의 중복 저장을 허용하지 않는다. 컬렉션 클래스 설명 HashSet 해시 자료구조를 기반으로 인스턴스를 저장, 정렬 x TreeSet 트리 자료구조를 기반으로 인스턴스를 저장, 정렬 o public class SetCollection_Feature { public static void main(String[] args) { Set set = new HashSet(); set.add("cat"); set.add("dog"); set.add("pig"); set.add("dog"); // 동일 인스턴스 저장 x System.out.println("저장된 인스턴스 수: " + set.size()); // for-each문을 이용한 전체 ..
List 컬렉션 클래스 인스턴스 저장 순서가 유지된다. (나란히) 동일 인스턴스의 중복 저장을 허용한다. 공간의 크기를 신경쓰지 않아도 된다. (알아서 변경해줌) 클래스 자료구조 설명 ArrayList 배열 기반 자료구조 배열을 이용해 인스턴스를 저장 LinkedList 리스트 기반 자료구조 리스트를 구성해 인스턴스 저장 ArrayList 가장 많이 사용되는 컬렉션 클래스 중 하나이다. 장점 저장된 인스턴스의 참조가 빠르다 배열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다. 단점 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소요된다. 배열은 크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해서는 더 큰 공간의 새로은 배열을 생성해 기존 배열에 있던 데이터를 새 배열에 ..