SQL (MySQL)
- CHAR VS VARCHAR
| CHAR | VARCHAR |
---|
속도 | 빠름 | 느림 |
저장용량 | 저장용량 소모 많음 | 저장용량 소모 절약 |
- EXPLAIN
SQL
앞에 EXPLAIN
을 붙이면, 해당 SQL
을 실행하기 위한 실행 계획을 확인할 수 있다.
INDEX
유무 판단도 가능하다.
문제 1
문제 2
- 데이터 2배 증가 쿼리문 (기존 테이블에 데이터가 2개 있다는 가정하에 2의 제곱배로 늘어남)
INSERT INTO 테이블명 (칼럼1, 칼럼2, 칼럼3)
SELECT 데이터1, 데이터2, 데이터3
FROM 테이블명
- 인덱스
- 테이블의 데이터 동작속도를 증가시켜주는 기능
- 백과사전에서 단어를 찾을 때 ‘ㄱ’ ‘ㄴ’ 처럼 색인 역할을 한다.
- 조회 속도가 빨라지는 대신 삽입,삭제,수정 속도는 느려진다.
- 종류
PRIMARY KEY
: 주 키 인덱스
UNIQUE KEY
: 유니크 인덱스
NORMAL KEY
: 일반 인덱스
FULL TEXT
: 풀 텍스트 인덱스
- 본문검색에 사용할 수 있는 인덱스
- 한글을 지원 X
- 유니크 인덱스
- 컬럼 값에 중복이 존재하지 않도록 하는 인덱스
- 유니크 인덱스는 인덱스라기보다는 제약조건에 가깝다.
INSERT
시 유니크 인덱스는 중복체크를 해야하므로 속도가 일반 인덱스에 비해 느리다.
- 커다란 성능 향상을 기대하면 안된다.
자바
문자열 계산기
- "3 + 3 - 1" 형식의 문자열을 숫자 결과값으로 리턴해야함.
- 최종목표
3 * 1 + (1 - (4 * 1 - (1 - 1))
더하기 기능
split
을 통해 문자열을 +
로 나눈다.
- 나눈 두 문자를 정수형으로 바꿔 합을 리턴한다.
public class Calc {
public static int run(String exp) {
String[] bits = exp.split(" \\+ ");
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
return a + b;
}
}
테스트
public class CalcTest {
@Test
@DisplayName("1 + 1 = 2")
void t1() {
assertThat(Calc.run("1 + 1")).isEqualTo(2);
}
@Test
@DisplayName("2 + 1 = 3")
void t2() {
assertThat(Calc.run("2 + 1")).isEqualTo(3);
}
@Test
@DisplayName("2 + 2 = 4")
void t3() {
assertThat(Calc.run("2 + 2")).isEqualTo(4);
}
@Test
@DisplayName("1000 + 280 = 1280")
void t4() {
assertThat(Calc.run("1000 + 280")).isEqualTo(1280);
}
}
다중 덧셈, 뺄셈 기능
- 문자열에
+
를 포함하면 needToPlus
가 true
, needToMinus
도 마찬가지
- 만약
needToPlus
가 true
라면 +
로 split
- 만약
needToMinus
가 true
라면 -
로 split
- 반복문을 통해 분리한 숫자들의 결과를 계산한다.
public class Calc {
public static int run(String exp) {
boolean needToPlus = exp.contains("+");
boolean needToMinus = exp.contains("-");
String[] bits = null;
if (needToPlus) {
bits = exp.split(" \\+ ");
} else if (needToMinus) {
bits = exp.split(" \\- ");
}
int a = Integer.parseInt(bits[0]);
int b = Integer.parseInt(bits[1]);
if (needToPlus) {
int sum = 0;
for (String bit : bits) {
sum += Integer.parseInt(bit);
}
return sum;
}
if (needToMinus) {
return a - b;
}
throw new RuntimeException("올바른 계산식이 아닙니다.");
}
}
테스트
@Test
@DisplayName("2 - 1 = 1")
void t5() {
assertThat(Calc.run("2 - 1")).isEqualTo(1);
}
@Test
@DisplayName("3 - 1 = 2")
void t6() {
assertThat(Calc.run("3 - 1")).isEqualTo(2);
}
@Test
@DisplayName("100 - 20 = 80")
void t7() {
assertThat(Calc.run("100 - 20")).isEqualTo(80);
}
@Test
@DisplayName("10 + 20 + 30 = 60")
void t8() {
assertThat(Calc.run("10 + 20 + 30")).isEqualTo(60);
}
덧셈,뺄셈 혼합 기능
“- "
문자를 “+ -”
로 변경
- 이렇게 되면 문자를 정수형으로 바꿀 때 오류 없이 음수로 변경된다.
- 이후, 반복문을 통해 합을 구해 리턴
public class Calc {
public static int run(String exp) {
exp = exp.replaceAll("- ", "+ -");
String[] bits = null;
bits = exp.split(" \\+ ");
int sum = 0;
for (String bit : bits) {
sum += Integer.parseInt(bit);
}
return sum;
}
}
테스트
@Test
@DisplayName("10 - 20 + 30 = 20")
void t9() {
assertThat(Calc.run("10 - 20 + 30")).isEqualTo(20);
}
@Test
@DisplayName("10 - 10 - 10 - 10 = -20")
void t10() {
assertThat(Calc.run("10 - 10 - 10 - 10")).isEqualTo(-20);
}
@Test
@DisplayName("10 - 10 - 10 - 10 + 10 + 10 - 10 = -10")
void t11() {
assertThat(Calc.run("10 - 10 - 10 - 10 + 10 + 10 - 10")).isEqualTo(-10);
}