분류 전체보기
-
람다식JAVA/람다 2023. 8. 7. 14:33
람다식을 간단히 표현하자면 함수(메서드)를 간단히 표현한 것이다. int max(int a, int b) { return a > b ? a : b; } 위와 같은 메서드가 있을 때 람다식을 표현하면 아래와 같이 짧게 표현이 가능하다. (int a, int b) -> a > b ? a : b 반환값이 있는 경우, 식이나 값만 적고 return 문을 생략할 수 있다. return을 생략할 때에는 ;를 생략한다. (a, b) -> a > b ? a : b 또한 매개변수의 타입이 추론 가능하면 생략도 가능하다. 람다식 작성 시 주의사항 1. 매개변수가 하나인 경우, 괄호는 생략 가능 (단, 타입이 있을 때는 생략 불가) ---> int a -> a * a는 안됨 (int a) -> a * a라 해야지 에러가 안..
-
지네릭스(Generics)JAVA/지네릭스 2023. 8. 6. 15:39
지네릭스란 다양한 타입의 겍체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. class Box { Object item; void setItem(Object item) { this.item = item; } Object getItem() { return item; } } 지네릭스를 사용하기 전에는 이렇게 Object로 변수들을 선언했다. ArrayList와 같은 컬렉션 클래스에서 다양한 종류의 객체를 담을 수 있긴 하지만 꺼낼 때마다 타입체크를 하고 형변환을 하는 것에 불편함이 있을 수 있다. 지네릭 클래스로 변경 class Box { T item; void setItem(T item) { this.item = item; } T getItem() { return item;..
-
HashMapJAVA/컬렉션 프레임워크 2023. 8. 4. 16:30
HashMap은 map을 구현했으므로 map의 특징을 가지고 있다. 키(key)와 값(value)을 묶어서 하나의 객체로 데이터를 저장하고 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 효율적으로 검색할 수 있다는 장점이 있다. 키(key) : 컬렉션 내의 키(key) 중에서 유일해야 함 값(value) : 키(key)와 달리 중복도 허용 public class Main { public static void main(String[] args) { HashMap map = new HashMap(); map.put("myId", "1234"); map.put("asdf", "1111"); map.put("asdf", "1234"); Scanner s = new Scanner(System.in);..
-
TreeSetJAVA/컬렉션 프레임워크 2023. 8. 3. 22:47
이진 검색 트리는 루트에서 시작해서 2개의 부모를 가지는 자료구조이다. 루트가 아닌 노드는 부모 노드와 left, right라는 2개의 자식 노드를 가지게 된다. 이진 검색 트리의 특징 모든 노드는 최대 2개의 자식 노드를 가질 수 있다. 왼쪽 자식노드의 값은 부모노드의 값보다 작고 오른쪽 자식노드의 값은 부모노드의 값보다 커야한다. 노드의 추가 삭제에 시간이 걸린다. -> 순차적으로 저장하지 않기 때문에 검색과 정렬기능이 배열이나 링크드 리스트에 비해 뛰어나다. 중복된 값을 저장하지 못한다. 자바에서 제공하는 Treeset은 저장할 때 이미 정렬하기 때문에 값을 읽을 때 별도의 정렬을 할 필요가 없다. public class Main { public static void main(String[] arg..
-
HashSetJAVA/컬렉션 프레임워크 2023. 8. 3. 22:25
Set 인터페이스를 구현한 가장 대표적인 컬렉션 HashSet은 중복된 요소를 저장하지 않는다. HashSet에서 중요한 것은 hashCode를 이용한다는 것이다. public class Main { public static void main(String[] args) { HashSet set = new HashSet(); set.add("aaa"); set.add("aaa"); set.add(new Person("Kim", 20)); set.add(new Person("Kim", 20)); System.out.println(set); } static class Person { String name; int age; Person (String name, int age) { this.name = name;..
-
Stack, Queue (Priority Queue와 deque 포함)JAVA/컬렉션 프레임워크 2023. 8. 3. 15:16
스택은 마지막에 저장한 데이터를 가장 먼저 꺼낼 수 있는 LIFO 방식이다. LIFO (Last In First Out) 큐는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO 방식이다. FIFO (First In First Out) 예를 들어 데이터 0, 1, 2를 넣었다면 스택으로 꺼낼 때에는 2, 1, 0 순으로 꺼내게 되고 큐로 꺼낼 때에는 0, 1, 2 순서로 꺼내게 된다. Stack과 Queue의 데이터 저장, 뽑기 예제 public class Main { public static void main(String[] args) { Stack st = new Stack(); Queue q = new LinkedList(); st.push("0"); st.push("1"); st.push("2");..
-
ArrayList와 LinkedListJAVA/컬렉션 프레임워크 2023. 8. 3. 13:55
ArrayList와 LinkedList는 자바에서 가장 많이 사용하는 배열의 형태이다. ArrayList : 데이터의 저장순서가 유지되고 중복을 허용함. LinkedList : 링크드 리스트는 불연속적으로 존재하는 데이터들의 주소값들을 연결한 형태로 구현됨. 데이터의 삭제 - ArrayList 삭제한 후 데이터들을 다시 연결하기 위해 한 칸씩 당기는 작업이 필요 만약에 0 1 2 3 4라는 배열에서 2이라는 값이 사라진다면 0 1 3 4의 순서를 맞추기 위해 arr[3], arr[4]를 arr[2], arr[3]으로 이동시키는 작업이 필요 실제로 System.arrycopy(data, index+1, data, index, size-index-1) 라는 로직이 ArrayList에서 작동됨 위의 예제에서는..
-
AWS S3를 이용한 사진 저장프로젝트/Trend-Pick 2023. 7. 31. 19:00
AWS의 S3를 이용해서 S3 버킷을 생성했다. 프리티어를 이용하면 20000개의 GET 요청과 2000개의 PUT, POST 요청이 월별 무료라고 한다. 기본 설정 build.gradle에 추가 implementation 'org.springframework.cloud:spring-cloud-starter-aws' application.properties에 추가 cloud.aws.credentials.accessKey='엑세스 키' cloud.aws.credentials.secretKey='엑세스 비밀 키' cloud.aws.s3.bucket=trendpick-photo cloud.aws.region.static=ap-northeast-2 cloud.aws.stack.auto=false S3 Confi..