프로그래밍 언어/Java 16

[테코톡] Record

출처: https://www.youtube.com/watch?v=MiHxFpTgAog&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=123  Record란?불변 객체데이터베이스 결과 등을 단순히 담기 위한 객체에 주로 사용내부 필드값의 불변성을 보장하여 유지보수에 용이단점: 과정이 복잡함private final 로 변수 선언객체를 위한 생성자 추가동등성 비교를 위한 equals(), hashCode() 정의Getter() 정의디버깅을 위한 toString() 정의=> Boilerplate Code(자주 반복되는 코드)가 많다=> 필드 변경 시 위의 코드들을 수정해야 함=> Record를 사용하여 코드 단순화  어떻게 사용할까?선언과 동시에 변수를 함께 선언static ..

[테코톡] 가비지 컬렉션

출처: https://www.youtube.com/watch?v=UJDXXmuMldM&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=117  가비지 컬렉션(GC)이란?참조되지 않는 객체들이 차지하고 있는 메모리를 해제하는 것C, C++에서는 직접 해제해야 했음free();를 작성하는데 리소스 사용Java에서는 JVM에서 자동으로 작업 JVM(Java Virtual Machine)JVM: 자바 파일이 어느 환경에서든지 잘 구동될 수 있도록 함Java 파일 실행 시 필요한 클래스를 로딩해서 Class Loader에 올림Execution Engine이 메모리에 로딩된 코드를 해석Garbage Collector가 이 과정에서 자동으로 실행JVM 메모리 - Runtime Dat..

열거 타입(Enum)

그동안 Java로 문제 풀이를 할 때 enum을 몰라서 string 배열 등을 사용했었는데 enum을 여러 번 듣게 되어서 한 번 정리 및 공부해보려고 한다. enum 이러한 상수를 단순히 정수로 치부하지 말고 객체 지향적으로 객체화해서 관리하자는 취지 Java에서는 enum을 인터페이스와 같이 독립된 특수한 클래스로 구분 reference 타입으로 분류되며, enum 상수값은 힙 영역에 저장됨 일종의 클래스이지만 인스턴스화는 불가능: 고정된 정수들의 집합으로써 컴파일 타임에 모든 값을 알고 있어야 하기 때 장점 코드가 단순해지며 가독성이 좋아짐 허용 가능한 값들을 제한하여 유형 안전을 제공 구현의 의도가 열거임을 분명하게 나타낼 수 있음 switch문에서도 사용할 수 있음 단순 상수와 비교해 IDE의 ..

정규표현식

정규표현식(Regular Expression): 특정 문자열의 규칙을 가지는 문자열의 집합을 표현하는 데 사용되는 언어 정규표현식 패턴 문자 클래스 \\w: 문자만 허용 \\W: 문자가 아닌 경우에만 허용 \\d: 숫자만 허용 \\D: 숫자가 아닌 경우에만 허용 \\s: 공백 문자, 탭만 허용 \\S: 공백 문자, 탭이 아닌 경우에만 허용 어셜선(Assertions): 행이나 단어의 시작, 끝을 나타내는 경계와 어떤식으로든 매치가 가능한 것을 나타내는 패턴 ^: 문장의 시작 $: 문장의 끝 수량자(Quantifiers): 일치 시킬 문자 또는 표현식의 수 ?: 없거나 있거나 *: 없거나 있거나 많거나 +: 하나 또는 많이 {n}: n개가 있는 {min,}: 최소 {min, max}: 최소, 그리고 최대 ..

포함관계와 추상화 구현 순서

포함관계 클래스 A, B, C, D를 클래스 N에 포함시키고자 할 때 클래스 N에 클래스 A의 변수 a, B의 변수 b, ... 를 선언한다. 클래스 N의 생성자를 선언하면서 매개변수를 (A a, B b, C c, D d)으로 받고 this.a = a; this.b = b; 로 각각 저장한다. 이후 클래스 N에서 변수 a, b, c, d의 메서드를 사용한다. ABCD의 공통된 부분으로 추상 클래스 M을 생성(추상화) ABCD의 공통된 함수를 추상 메서드 e로 만든다. 각 A, B, C, D가 M을 상속받고 각각 클래스 내에서 추상 메서드 e를 재정의한다. 클래스 N에 a, b, c, d 대신 추상 클래스 M의 변수 m을 선언한다. 클래스 N의 생성자의 매개변수로 (M m)을 받고 this.m = m;으로..

추상 클래스와 인터페이스 비교

추상 클래스와 인터페이스의 공통점: 가지고 있는 추상 메서드를 구현하도록 강제 인스턴스화 불가능 추상 클래스의 목적: 해당 추상 클래스를 상속받아 기능을 이용하고 확장하는 것. 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우 public 이외의 접근제어자가 필요한 경우 일반 메서드가 존재할 수 있음 (추상 메서드 1개 이상) 인터페이스의 목적: 함수 구현을 강제하여 구현 객체의 같은 동작을 보장. 클래스와 별도로 같은 기능이 필요할 때 사용 일반 변수를 가질 수 없음 (static final이어야 함) 다중 상속 가능 + 추상 클래스 = 구체적인 여러 클래스들을 일반화된 개념으로 묶은 것 인터페이스 = 여러 클래스들을 행위적 일관성으로 묶은 것

자주 쓰는 함수

타입 변환 문자열(String)을 숫자(int)로: int a = Integer.parseInt(String b) 숫자(int)를 문자열(String)으로: String b = Integer.toString(int a) Long형일 때는 Long.toString() 문자를 문자열(String)으로: String str = String.valueOf(char c) 대소문자 확인 Character.isUpperCase(char c) Character.isLowerCase(char c) n의 제곱근(double 형) Math.sqrt(n) 배열 import java.util.Arrays; 정렬하기: Arrays.sort(정렬할 배열); 배열 자르기: arr1 = Arrays.copyOfRange(arr0, s..

ArrayList 클래스

객체 배열을 좀 더 쉽게 사용할 수 있도록 자바가 제공하는 객체 배열 클래스 많이 사용하는 메서드 메서드 설명 boolean add(E e) 요소 하나를 배열에 추가. E는 요소의 자료형 int size() 배열에 추가된 요소 전체 개수를 반환. E get(int index) 배열의 index 위치에 있는 요소 값 반환. E remove(int index) 배열의 index 위치에 있는 요소 값을 제거하고 반환. boolean isEmpty() 배열이 비어 있는지 확인. ArrayList 배열 선언하기 import java.util.ArrayList; # 임포트! ArrayList 배열명 = new ArrayList(); 스택 구현하기 package collection.arraylist; import j..

상속과 다형성

상속(Inheritance) 클래스 B가 클래스 A를 상속받는다: extends 예약어 사용 class B extends A { } 이때 상위 클래스에서 private로 선언한 변수를 하위 클래스에서 사용하고 싶은 경우: protected 예약어 사용 -> 외부 클래스에서 사용할 수 없지만 상속받은 하위 클래스에서는 public처럼 사용 가능! private, protected 변수는 외부에서 사용하기 위해 클래스 내부에 따로 get, set 함수를 생성해둬야 함 하위 클래스 인스턴스가 생성될 때: 상위 클래스 생성자 호출 --> 하위 클래스 생성자 호출 순서! 예약어 super 하위 클래스에서 상위 클래스로 접근할 때 사용 super가 가지고 있는 값이 상위 클래스의 주소(참조 값) 상위 클래스의 생성..