Java

Stream 자바에서 스트림을 사용하는 이유는 배열(Array) 나 컬렉션(Collection 인터페이스 -> list, set, map) 에서 원하는 값을 구하는 과정을 단순화시키기 위해서 나온 개념이다. 스트림은 선언, 가공, 반환의 세 부분으로 이루어진다. 1. 선언 선언은 배열이나 컬렉션 으로 그루핑되어 있는 자료형들을 스트림 형태로 만들어주는 과정을 의미한다. Stream stream = Arrays.stream(배열명); Stream stream = 리스트명.stream(); Stream stream = stream.of('값', '값', ....); 와 같이 Stream 객체를 선언하여 사용하는 방법이 한가지 있고, 두번째는 Arrays.stream(배열명).~ 리스트명.stream().~ ..


Set 인터페이스 Set 인터페이스는 List 인터페이스와 다른 특징을 가지고 있습니다. 1. 요소의 순서가 없다. 2. 요소의 중복을 허용하지 않는다. 1. HashSet 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠릅니다. 이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장합니다. HashSet에 들어가는 객체들은 반드시 equals()와 hashCode() 메소드를 구현해야 하는데, 이 메소드들을 가지고 HashSet에 들어갈 때 중복된 객체가 있는지 여부를 체크하게 된다. * 중복을 확인하는 과정은 다음과 같다. hashcode를 생성하고, equal() 메소드를 이용해 hashcode를 비교, 중복된 객체가 있는지 체크한다. (eq..


Java에서 Collection 은 데이터의 집합, 그루핑을 의미하며, 이러한 데이터나 자료구조인 Collection과 이를 구현하는 클래스를 JCF(Java Collections Framework) 라는 이름의 인터페이스가 제공한다. List 인터페이스 리스트는 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용한다. 즉 배열과 비슷하게 List는 인덱스가 주어지고, 해당 인덱스마다 개별의 데이터 값이 입력된다. 따라서 index[0]와 index[1]에 각각 1이라는 데이터가 저장되더라도 각각은 다른 주소값을 가지고 있다는 의미이다. 1. LinkedList - 양방향 포인터 구조로, 데이터의 삽입과 삭제가 빈번하게 발생할 경우 데이터의 위치 정보만 수정하면 되기 때문에 유용하게 사용된다. - 스택..


1) Collections.sort 기본적으로 ArrayList 를 정렬할 때, Collections.sort 를 이용한다. Collections.sort 의 디폴트 값은 오름차순 정렬이고, 만약 내림차순 정렬을 원한다면 Collections.reverseOrder() 을 입력해주어야 한다. 이 디폴트값은 사실 이미 Collections이라는 클래스를 만든 사람이 미리 정해놓은 정렬값이다. 그렇기 때문에 사용자가 임의로 만든(Coffee 객체) 객체는 일반적인 Collections.sort 로는 작동하지 않는다. 에러가 발생한다. 따라서 유저가 임의로 만든 객체를 정렬하고 싶다면, 1) Comparable 인터페이스의 CompareTo 메소드를 오버라이딩하거나 2) Comparator 인터페이스의 Com..


메소드명 Arrays.sort Collections.sort list.sort 정렬대상 배열(int[] arr ... ) ArrayList() or list() 리스트(list ~ ) Arrays.sort 디폴트 정렬 값은 오름차순이다. 내림차순의 정렬을 위해서는 Arrays.sort( arr(배열이름) , Collections.reversOrder()); 이라는 메소드를 사용한다. 또한 배열의 특정 구간까지만 정렬하는 것도 가능하다. Arrays.sort( arr(배열이름), 배열의 시작번호, 구간의 마지막번호+1); 구간의 마지막번호+1 이라는 것은 유저가 배열 index의 7번째 값까지 정렬하고 싶다면 8을 입력하라는 의미이다. 만약 유저가 arr 배열의 index 3번부터 10번까지 정렬을 하고 ..

Break; == 반복문에서의 탈출 for, while, switch 와 같은 반복문을 사용할 때 break; 를 사용하게 되면 해당 반복문을 탈출하게 된다. 아래 기술할 return 과의 차이점은, for문과 같은 반복문을 종료한 뒤에도 코드가 있다면 계속해서 실행된다는 점이다. public void loopSum(){ // break를 사용한 탈출! int sum = 0; for(int i = 1; i < 10; i++) { sum += i; System.out.print(i + " "); if(i == 7) break; } System.out.print("합계 : " + sum); // 결과 1 2 3 4 5 6 7 합계 : 28 } 예시에서 보이듯, for문을 탈출한 뒤에서 print 출력이 이루..


인터페이스 1. 인터페이스 문법 public interface Movable{ // 두 가지는 인터페이스에서는 같은 의미이다. int Number = 10; public static final Number = 10; // 두 가지는 인터페이스에서는 같은 의미이다. void Move(int x, int y); public abstract void Move(int x, int y); } 인터페이스는 상수와 추상 메소드의 집합이다. 따라서 추상 클래스는 인터페이스의 기능을 일부분 대체할 수도 있다. 하지만 문법적으로 가장 큰 차이는 추상 클래스와는 다르게 멤버 변수(인스턴스 변수 + 클래스 변수), 일반 메소드를 구성원으로 사용할 수 없다. 즉 반대로 말하면, 상수와 추상 메소드는 사용할 수 있다. 또한 인터..

public abstract class Animal{ String name; void setName(String name){ this.name = name; } public abstract void sound(); } public class Dog extends Animal(){ @Override public void sound(){ System.out.println("왈왈"); } } public class AnimalExample{ public static void main(String[] args){ Dog dog = new Dog(); dog.sound(); // 출력결과 : "왈왈" } } 와 같이 클래스를 생성했다면, Dog 클래스는 Animal 클래스를 상속하는 관계이다. 즉 Dog는 Ani..


Java Application 은 기본적으로 JVM 에서 구현된다. 자바를 처음 공부할 때, 자바 언어의 장점/특징을 배우는 과정에서 garbage collection 이 존재한다라고 배운다. 그런데 이 가비지 콜렉션이 정확히 무엇인지를 가르켜주지는 않는다. garbage collection은 약칭 GC라고 사용한다. 자바에서 사용하는 자료형 중, 원시 자료형이 아닌 참조형 자료형들은 객체 생성 시 스택 메모리 영역이 아니라 힙 메모리 영역에 데이터 값, 주소 들을 저장한다. 원시 자료형은 기본적으로 스택 메모리에 저장되기 때문에 해당 클래스 구동이 끝나면 static 클래스 변수가 아닌 이상 메모리에서 사라진다. 하지만 참조형 객체의 경우, heap 메모리 영역에 계속해서 남아있게 된다. 프로그램이 가..


추상 클래스의 용도 1. 실체 클래스*1 들 간 비슷한 공통점을 가진 필드과 메소드들의 이름을 통일할 목적 : 여러 사람이 실체 클래스를 설계하는 경우, 실체 클래스마다 필드와 메소드가 각각 다른 이름을 가질 수 있다. 이를 방지하기 위해 추상 클래스*2 에서 필드와 메소드의 이름을 정하고, 이를 상속받음으로써 공통된 필드와 메소드를 통일할 수 있다. *1 실체 클래스 실체 클래스라 함은 실제 객체를 생성할 수 있을 정도의 구체성을 가진 클래스 개념적으로 보자면, "클래스" 는 객체(object)를 구현하기 위한 설계도. 실체 클래스는 결국 object를 구현할 수 있도록 매우 구체적으로 작성된 클래스를 의미한다. 자동차라는 객체를 설계한다고 하면, 기종의 이름은 000 / 차의 연료는 000 / 과 같..