프로그래밍 언어 44

[테코톡] 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..

지역 변수, 전역 변수, 정적 변수

지역 변수(local variable) 중괄호 내부, 함수의 매개변수에서 사용되는 변수 함수 안에서만 접근 가능하며, 벗어나면 사라짐 초기화하지 않으면 쓰레기값이 저장됨 Stack 영역에 메모리 할당됨 전역 변수(global variable) 중괄호 외부에서 선언되는 변수 어느 지역에서든 참조해서 사용 가능 프로그램이 시작될 때 생성 및 초기화되고 끝날 때 사라짐 반드시 상수(변수x)로 초기화해야 하며 초기화하지 않으면 0임 Data 영역에 메모리 할당 정적 변수(static variable) static이 붙여서 선언된 변수 전역 변수와 동일하지만 차이점은 초기화가 딱 한 번만 진행됨 함수의 매개 변수로 사용할 수 없음 Data 영역에 메모리 할당 정적 지역변수(static local variable)..

문자열, 공백 포함 문자열 입력

문자열의 선언과 초기화 char str1[10] = "ABCD"; char str2[10]; str2 = "ABCD" //오류 -> 초기화와 대입은 다름 포인터와 문자열 char st[] = "12345"; //배열에 의한 문자열의 크기는 6bytes char *pt = "12345"; //포인터에 의한 문자열의 크기는 sizeof(char *) + 6bytes 포인터는 문자열 리터럴을 저장하기 위한 영역 외에도 pt가 갖는 메모리 영역이 더 필요 pr을 위한 영역: sizeof(char*) 공백 포함 문자열 입력 받기 1. scanf("%[^\n]s",str); [^'문자'] : 해당 문자가 나오기 전까지 모든 문자열을 받겠다는 의미 [^"문자열"] : 문자열을 구성하는 문자 중 하나라도 나오기 전까지..