본문 바로가기

JAVA/JAVA 기초21

JDBC) 대량 쿼리문 실행 for SQLite 대량의 데이터를 데이터베이스에 저장할 일이 생겼는데, statement를 작성하고 execute하는걸 반복문으로 돌리니 완료될때 까지 하루종일 걸렸다. 기존 코드 package com.dokuny.find_public_wifi.repository; import com.dokuny.find_public_wifi.model.WifiApiDto; import com.dokuny.find_public_wifi.service.ApiService; import java.sql.*; import java.util.ArrayList; public class WifiRepositoryImpl implements WifiRepository { public static void main(String[] args) { Wif.. 2022. 5. 21.
JDBC JDBC JDBC란? Java Database Connectivity 자바에서 데이터베이스를 연결해주는 자바 API 준비물 DB 벤더별 커넥터 필요 MariaDB : https://mariadb.com/kb/en/about-mariadb-connector-j/ MySQL : https://dev.mysql.com/downloads/connector/j/ Oracle : https://www.oracle.com/kr/database/technologies/appdev/jdbc.html 인텔리제이의 경우, Project Structure → Libraries → 다운받은 커넥터 추가 해주면 된다. 후에 Maven이나 Gradle 쓰면 굳이 사이트 들어가서 다운받고 라이브러리 넣을 필요없이 저장소 검색해서 다.. 2022. 5. 17.
자바 8 람다를 이용한 다중 조건 정렬 import java.util.Arrays; import java.util.Comparator; import java.util.List; /** * [ Lambda 의 기본 틀 ] * Predicate : (T -> boolean) -> 주로 필터에 사용 * Supplier : (() -> T) -> 만드는놈(객체 생성) * Consumer : (T -> void) -> 쓰는놈(실행에 사용) * Function : (T -> R) -> From 에서 뭔가를 To 로 만들어 넘김 */ public class Main { public static class Apple { private String color; private Integer weight; public Apple() {} public Apple(.. 2022. 4. 7.
스트림 (Stream) 1. 스트림 - 배열, 컬렉션 등의 데이터를 하나씩 참조하여 처리 가능한 기능 - for문의 사용을 줄여 코드를 간결하게 함 - 스트림은 크게 3가지로 구성 : Stream 생성 / 중개 연산 / 최종 연산 데이터소스객체.Stream생성().중개연산().최종연산(); 2. 스트림 생성 - 배열 스트림 String[] arr = new String[]{"a","b","c"}; Stream stream = Arrays.stream(arr); - 컬렉션 스트림 ArrayList list = new ArrayList(Arrays.asList(1,2,3)); Stream stream = list.stream(); 3. 스트림 중개 연산 - Filtering filter 내부 조건에 참인 요소들을 추출 IntStr.. 2022. 3. 29.
람다식 1. 람다 표현식 (Lambda Expression) - 메소드 대신 하나의 식으로 표현하는 것 - 익명 함수라고도 한다. // (매개변수,...) -> {실행문...} (int x,int y) -> {return x+y;} 2. 장점 - 코드가 간결해진다. - 가독성이 높아진다. - 생산성이 높아진다 3. 단점 - 재사용이 불가능하다. - 디버깅이 어렵다 - 재귀함수로는 맞지 않다. 4. 사용하는 곳 - 람다식을 쓸 때는 함수형 인터페이스를 사용하는 곳에서 사용 가능하다. - 함수형 인터페이스 : 추상 메소드를 하나만 가지고 있는 인터페이스 * 심화 과정은 후에 모던 자바 인 액션 공부할 때 깊게 공부해보도록 할 예정이다. 2022. 3. 29.
컬렉션 프레임워크 (Collection Framework) 1. 컬렉션 프레임워크 - 여러 데이터를 편리하게 관리할 수 있게 만들어 놓은 것 - 자료 구조 및 알고리즘을 구조화 - 대표 인터페이스 : List, Set, Map 2. List 인터페이스 - 순서가 있는 데이터의 집합 - 데이터 중복 허용 - 대표 구현 클래스 : ArrayList, LinkedList, Vector // ArrayList // 타입을 지정 안하면 Object가 되어있는 것과 동일하다. ArrayList list = new ArrayList(); list.add("dokuny"); // 리스트에 추가, (인덱스,값) 이렇게 사용하면 인덱스 위치에 저장 list.get(0); // 인덱스로 값을 가져옴 list.remove("dokuny"); // 리스트에서 삭제, 인덱스로도 삭제 가.. 2022. 3. 29.
예외 (Exception) 1. 예외 - 정상적이지 않은 Case 2. 예외 처리 (Exception Handling) - 정상적이지 않은 Case에 대한 적절한 처리 방법 - try / catch 문으로 예외를 처리 3. finally - 예외 발생과 관계 없이 무조건 실행되는 부분 try { // 예외가 발생할 수도 있는 코드 }catch(NotFoundException e){ // 매개변수로 구체적인 예외를 넣어주는게 좋다. // 예외 발생 시 실행할 코드 작성 }catch(Exception e){ // 예외를 여러개 등록해서 처리 가능, 혹은 상위 예외로 처리하는 것도 가능 }finally { // 예외가 터지는 안터지는 항상 실행되는 부분 } 4. throw, throws - throw : 예외를 발생시킴 - throws.. 2022. 3. 29.
입출력(IO) 1. 콘솔 입력 - 입출력 방식 중 콘솔 입력 방법 // 콘솔 입력 방식 // System.in // 하나의 문자를 받아온다. int read = System.in.read(); // 입력 스트림에 남아있는 갯수 만큼 바이트 형태로 읽어서 데이터를 소진시켜준다. 엔터값 제거용 System.in.read(new byte[System.in.available()]); // InputStreamReader // 여러 개의 문자를 받아올 수 있음 InputStreamReader reader = new InputStreamReader(System.in); char[] chars = new char[3]; // 입력스트림에 들어있는 문자를 넣을 배열 생성 reader.read(chars); // 배열에 입력값을 넣어.. 2022. 3. 29.
내부 클래스(Inner Class)와 익명 클래스(Anonymous Class) 1. 내부 클래스 - 클래스 안에 선언한 클래스 (=중첩클래스) - 내부 클래스에서 외부 클래스 멤버에 접근 가능 - 외부에서는 내부 클래스에 접근 불가 class Outer{ ... class Inner{ ... } } - 내부 클래스 종류 : 인스턴스 클래스 / 정적 클래스 / 지역 클래스 / 익명 클래스 class Outer{ class Inner { } static class StaticInner{ } } // 외부 클래스 Outer o1 = new Outer(); // 내부 클래스 - 인스턴스 Outer.Inner i1 = new Outer().new Inner(); // 내부 클래스 - 정적 Outer.StaticInner is1 = new Outer.StaticInner(); 2. 익명 클래.. 2022. 3. 29.
인터페이스 (Interface) 1. 인터페이스 - 다중 상속처럼 사용할 수 있는 기능 자바에서는 다중 상속이 불가능한데 인터페이스는 여러 개를 사용할 수가 있기 때문에 다중 상속처럼 사용할 수 있다. - 추상 메소드와 상수만으로 이루어짐 자바 8에 와서는 default 메소드와 static 메소드도 추가로 지원하고 있다. // 인터페이스 정의 접근제어자 interface 인터페이스 이름{ public static final 타입 상수이름 = 값; public abstract 반환타입 메소드이름(매개변수); } // 인터페이스 구현 class 클래스이름 implements 인터페이스이름{ } - 상속과 인터페이스 동시 사용 가능 - 인터페이스 두개 이상 사용 가능 2022. 3. 29.
추상 클래스 (Abstract Class) 1. 추상 메소드 (Abstract Method) - 자식 클래스에서 반드시 오버라이딩 해야하는 메소드 - 선언만하고 구현 내용이 없음 abstract void print(); 2. 추상 클래스 (Abstract Class) - 하나 이상의 추상 메소드를 포함하는 클래스 - 반드시 구현해야 하는 부분에 대해 명시적으로 표현 - 추상 클래스 자체는 객체 생성 불가 - 추상 클래스는 상속을 통해 구현 가능하다. abstract class 클래스명 { abstract void print(); } * 익명 클래스를 통해서 추상클래스의 추상메소드를 오버라이딩 가능 // Person이라는 클래스가 추상클래스일 때 Person person = new Person() { @Override void printInfo().. 2022. 3. 29.
다형성(Polymorphism) 1. 다형성 - 한 객체가 여러 가지 타입을 가질 수 있는 것 - 부모 클래스 타입의 참조 변수로 자식 클래스 인스턴스 2. instanceof - 실제 참고하고 있는 인스턴스의 타입 확인 class Person{} class Student extends Person{} // Student s1 = new Person(); 과 같이 하위타입에 상위 타입을 넣을 수 없다. Person p1 = new Student(); // 업 캐스팅 Student s1 = (Student) p1; // 다운 캐스팅 // 변수 instanceof 타입 , 변수가 타입의 인스턴스인지 알려줌 System.out.println(p1 instanceof Person); // true * 이거 관련해서는 SOLID 원칙의 LSP가.. 2022. 3. 28.
상속(Inheritance) 1. 상속 - 기존 클래스에 기능 추가 및 재정의하여 새로운 클래스를 정의하는 것 - 부모 클래스 : 상속 대상이 되는 기존 클래스 - 자식 클래스 : 기존 클래스를 상속하는 클래스 - 부모 클래스의 필드와 메소드가 상속되고 생성자,초기화 블록은 상속되지 않음 - 다중 상속은 불가능 - private, default 멤버는 자식 클래스에서 접근 불가 (default는 내부 패키지의 자식 클래스는 가능) - extends를 통해서 상속을 표현 class 자식 클래스명 extends 부모 클래스명{ } 2. super, super() - super : 부모 클래스와 자식 클래스의 멤버 이름이 같을 때 구분하는 키워드 - super() : 부모 클래스의 생성자 호출 3. 오버라이딩 (Overriding) - .. 2022. 3. 28.
클래스와 객체 1. 클래스(Class) - 객체를 정의하는 설계도 - 객체 변수, 메소드로 이루어짐 2. 생성자(Constructor) - 객체가 생성될 때 자동으로 호출됨 - 생성자를 따로 정의하지 않으면 default 생성자가 있는 것으로 간주한다. - 생성자를 따로 정의했다면 default 생성자를 사용하지 못하는데 이때 사용하고자 한다면 default생성자를 따로 정의해주면 된다. (생성자 오버로딩) - 생성자 규칙 : 클래스명과 이름이 같아야하고 리턴 타입이 없다. 3. this, this() - this : 객체 자신을 의미 - this() : 생성자 4. 오버로딩(Overloading) - 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의 - 메소드의 이름은 같지만 매개변수의 타입이나 개수가 달라야한다.. 2022. 3. 28.
다차원 배열 1. 일차원 배열 int[] myArray1 = {1,2,3,4,5}; 2. 다차원 배열 // 이차원 배열 // 초기화로 생성 int[][] myArray2 = {{1,2,3},{4,5,6}}; // myArray2[0][0]의 값은 1 // myArray2[0][1]의 값은 2 // myArray2[1][0]의 값은 4 // 사이즈로 생성 int[][] myArray2s = new Array[2][3]; // 삼차원 배열 int[][][] myArray3 = {{{1,2},{3,4}},{{5,6},{7,8}}}; 2022. 3. 28.