Skip to content

Commit 6bd0d2f

Browse files
committed
Merge branch 'main' of https://github.com/gwanhyeon/TIL
2 parents 9ae3afc + a87c2ed commit 6bd0d2f

14 files changed

+568
-0
lines changed

.DS_Store

2 KB
Binary file not shown.

java/.DS_Store

6 KB
Binary file not shown.

java/static.md

+97
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
# Java Static(정적 메소드)
2+
3+
`static variable / static method / static class ....`
4+
5+
static 키워드가 붙으면 JVM이 시작될 때 Method(static) 영역에 저장된다. 그리고 프로그램이 끝날 때 까지 사라지지 않고 메모리에 남아 있다.
6+
7+
> static method
8+
9+
속도가 빨라지고 공유(반복적인 사용)에 효율적이다.
10+
11+
```java
12+
public class LottoNumberFactory {
13+
14+
private static final int MIN_LOTTO_NUMBER = 1;
15+
private static final int MAX_LOTTO_NUMBER = 45;
16+
private static final int LOTTO_LENGTH = 6;
17+
18+
private static List<LottoNumber> lottoNumbers = new ArrayList<>();
19+
20+
//45개의 로또 숫자 초기화
21+
static {
22+
for (int i = MIN_LOTTO_NUMBER; i <= MAX_LOTTO_NUMBER; i++) {
23+
lottoNumbers.add(new LottoNumber(i));
24+
}
25+
}
26+
27+
public static List<LottoNumber> createLottoNumbers() {
28+
List<LottoNumber> lotto = new ArrayList<>();
29+
Collections.shuffle(lottoNumbers);
30+
for (int i = 0; i < LOTTO_LENGTH; i++) {
31+
lotto.add(lottoNumbers.get(i));
32+
}
33+
return lotto;
34+
}
35+
36+
}
37+
38+
```
39+
40+
static으로 선언 되어 있을 때 메소드를 사용할 때 마다 반복적으로 LottoNumberFactory 객체를 생성해 줄 필요가 없다. 생성자를 호출 할 필요가 없으니 당연히 속도가 빨라질 수 밖에 없다.
41+
42+
> static 사용이 그래서 올바른 것일까?
43+
44+
- 객체지향에서 멀어진다
45+
- 메모리 효율이 떨어질 수 있다.
46+
- static 키워드는 C의 전역변수/함수와 성격이 비슷하다. 정적 메소드는 객체의 생성, 제거와 관계없이 프로그램 시작부터 끝날 때까지 메모리에 남아 있다.
47+
48+
> Polymorphism(다형성)
49+
50+
- 정적 메소드는 객체의 생성주기와 관계가 없다.
51+
- 정적 메소드는 객체 지향의 메시지 전달(message passing)을 위반한다.
52+
- 결과적으로, 절차지향적인 부분과 유사하다.
53+
54+
> Overriding / Dynamic Binding
55+
56+
```java
57+
public abstract class WoowaTechCrew {
58+
public void hello() {
59+
System.out.println("안녕하세요.");
60+
}
61+
}
62+
63+
public class Orange extends WoowaTechCrew {
64+
@Override
65+
public void hello() {
66+
System.out.println("하이요!");
67+
}
68+
}
69+
70+
public class Kafka extends WoowaTechCrew {
71+
@Override
72+
public void hello() {
73+
System.out.println("안녕하쎄요~");
74+
}
75+
}
76+
77+
// main
78+
public static void main(String[] args) {
79+
WoowaTechCrew orange = new Orange();
80+
WoowaTechCrew kafka = new Kafka();
81+
orange.hello();
82+
kafka.hello();
83+
}
84+
```
85+
86+
- 다형성은 같은 타입으로 묶을 수 있는 여러 객체에게 동일한 명령을 내리면 각 객체에 맞는 다른일을 수행한다.
87+
- 하지만, 정적 메소드는 객체지향의 다형성을 위반한다.
88+
- 정적메소드는 런타임 이전 컴파일 시에 정적 바인딩이 이루어진다.
89+
- 메모리 효율이 떨어질 수도 있는데, 런타임 중 동적으로 생성 된 것들은 GC(Garbage Collection)의 대상이 되는 반면, static 키워드가 붙은 메소드 등은 GC의 대상이 아니다. GC는 동적으로 할당된 메모리만을 대상으로 한다. 따라서, static 영역은 GC의 대상이 아니다.
90+
91+
> 추가
92+
93+
- 2. 메모리 효율이 떨어질 수 있다. 에서 메서드는 static 키워드가 붙든 말든 컴파일 과정에서 Metaspace(자바 8 아래 버전에선 Permgen)에 담긴다고 한다.
94+
95+
> reference
96+
97+
https://tecoble.techcourse.co.kr/post/2020-07-16-static-method/

regex/regex-basic.md

+157
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
# 정규표현식
2+
3+
특정한 규칙을 가진 문자열의 집합을 표혆기 위해 쓰이는 형식언어
4+
5+
# 정규표현식의 종류
6+
7+
vim / posix 정규식
8+
9+
# 정규표현식의 기본 문법
10+
11+
1. 패턴 그대로 매칭하는 경우: 단어그대로 패턴으로 사용하여 매치하는 영역을 찾는다.
12+
2. 메타문자 및 수량 한정자를 적용하는 경우: 정규식 패턴에 쓰이는 문자중에서 특별한 의미를 가지는 메타문자들이 있는데, 이들을 사용하여 보다 폭 넓은 패턴에 매치할 수 있다.
13+
3. 그룹 및 look around 기능: 패턴의 일부를 그룹으로 묶거나 특정 패턴의 앞 뒤로 다른 패턴이 오는 조건을 더하는 경우
14+
15+
# 정규표현식의 메타 문자
16+
17+
> ^
18+
19+
문자열의 시작을 표현한다.[....] 내부에서 쓰이는 경우라면 뒤의 패턴에 일치하지 않는것을 선택한다.
20+
^http: 문자열이 http로 시작하는 경우에만 매치, 중간에 나타난 http에는 매치 X
21+
ab[^0-9]: ab뒤에 숫자가 아닌것이 오는것에만 매치한다.(abc)
22+
23+
24+
> $
25+
26+
문자열의 끝을 표현한다.
27+
28+
> \b
29+
30+
단어의 경계, 문자열 시작과 끝, 공백, 개행, 탭, 콤마, 구두점, 대시문자 등이 올 수 있다.
31+
32+
> \B
33+
34+
\b가 아닌것 정규식 메타문자에서는 흔히 대문자로 표현한 것을 소문자로 표현한 문자의 반대를 의미한다.
35+
36+
\bplay\B
37+
38+
> \s
39+
40+
공백 문자 및 탭 문자에 매치한다.
41+
42+
> \S
43+
44+
공백 문자가 아닌 한 글자에 매치한다.
45+
46+
> \d
47+
48+
숫자에 매치한다.[0-9]
49+
50+
> \D
51+
52+
숫자가 아닌 문자에 매치한다. [^0-9
53+
54+
> \w
55+
56+
단어를 만들 수 있는 글자, 알파벳 대소문자, 숫자, 언더스코어를 포함한다. [A-Z-a-z0-9_]
57+
58+
> \W
59+
60+
\w에 포함되지 않는 문자들
61+
62+
> \n
63+
64+
개행문자, \r은 캐리지 리턴이다.
65+
66+
> \
67+
68+
이스케이프용 문자, 정규식상의 특별한 의미가 있는 문자들을 문자 그대로 쓸때 앞에 붙인다. \^ 라고 쓰면 문자 ^만 의미한다.
69+
70+
> .
71+
72+
아무문자 1개에 대응딘다. 공백 역시 문자 1개로 취급된다.
73+
74+
# 선택 패턴
75+
76+
| 문자를 이용하면 A | B 패턴(A or B)
77+
78+
ex) tomato|potato
79+
80+
선택 패턴은 이후에 등장하는 그룹 패턴과 관련하여 보다 강력하게 쓰일 수 있다.
81+
82+
선택 패턴으로는 [....], 대괄호속에 넣은 문자 중에서 하나에 매칭하는것
83+
84+
85+
ex) [cfh]all 패턴 -> call, fall, hall 모두 매칭 가능
86+
87+
특히, 선택패턴은 특정 범위를 표현하는것도 가능하다.
88+
`[A-Z] [0-9] [a-z] [ㄱ_힣]`
89+
90+
선택 패턴내에서 ^이 쓰이면 not의 의미를 갖는다. 선택 패턴이 아닌경우에는 (시작점을 뜻한다 ^)
91+
92+
93+
# 그룹
94+
95+
괄호로 둘러싼 단위는 그룹을 나타낸다.
96+
그룹은 전체 패턴 내에서 다시 하나로 묶여지는 패턴 조각을 나타낸다. 특히 `|`나 뒤에 나오는 수량 한정자를 그룹에 붙이는 형태로 많이 사용되며, 한 번 매치한 그룹이 다시 반복되어 나타나는 경우에도 사용할 수 있다.
97+
98+
ex) (tom|pot)ato: tomato, potato 모두 매치되는 패턴을 그룹을 써서 줄이기
99+
(a|i){3}bc: a혹은 i가 3개 온 후에 bc가 오는 패턴(aaabc, iiibc, aiabc, iiabc) 등에 매치 된다.
100+
101+
괄호를 써서 묶은 부분은 1번부터 시작하는 그룹으로 참조 가능하다
102+
103+
tomato -> to ma to -> (to)ma\1 (\1은 1번그룹을 재사용한다는것을 뜻한다.)
104+
105+
> 응용
106+
107+
(a|b|c){2}ma\1
108+
109+
이 패턴은 a혹은 b혹은 c중에서 매치되는 두 글자를 그룹으로 캡쳐하고 ma 뒤에 동일한 글자가 반복되는 패턴.
110+
111+
aamaaa, bcmabc, abmaab등에 매치되지만,
112+
113+
캡쳐된 그룹의 패턴이 아닌 캡쳐된 내용에 매치하므로 aamabb에는 매치되지 않는다.
114+
115+
# 비캡쳐링 그룹
116+
117+
(?: ) 을 사용하면 그룹으로 묶어는 주지만 캡쳐는 하지 않는 비 캡쳐링 그룹이 된다. 이는 특정한 수량 한정자등을 적용은 하려 하지만 최종 결과에서 따로 구분하여 사용할 필요가 없는 경우에 적용한다. (사실 캡쳐만 해놓고 사용하지 않아도 무방하다.)
118+
> 수량 한정자
119+
120+
동일한 글자 혹은 동일한 족이 n개 만큼 나오는 경우 수량한정자를 뒤에 붙일 수 있다.
121+
122+
> ?
123+
124+
바로 앞의 글자혹은 그룹이 1개 혹은 0개이다
125+
126+
> *
127+
128+
0개 이상이다
129+
130+
> +
131+
132+
1개 이상이다
133+
134+
> {n}
135+
136+
N개가 있다
137+
138+
> {n, m}
139+
140+
N개 이상, M개 이하가 있다.
141+
142+
> 해커랭크 참고 문제
143+
144+
https://www.hackerrank.com/challenges/matching-anything-but-new-line
145+
146+
[^\n]{3}(?:\.[^\n]{3}){3}
147+
---------------------------------------------------
148+
[^\n] # 개행문자가 아닌 글자
149+
{3} # 가 3개 있고
150+
(?: # 캡쳐하지 않는 그룹이 시작
151+
\. # . 이 온 후
152+
[^\n]{3} # . 다음에 다시 개행이 아닌 문자가 3개
153+
){3} # 이 그룹이 다시 3회 반복
154+
155+
> reference
156+
157+
[reference](https://soooprmx.com/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EA%B8%B0%EC%B4%88-%EB%AC%B8%EB%B2%95/)

shell/.DS_Store

6 KB
Binary file not shown.

shell/grep&find.md

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# grep & find 특정문자 대소문자 구분없이 사용하기
2+
3+
```shell
4+
$grep -i "word" words.txt
5+
```
6+
7+
> grep
8+
9+
하위폴더를 포함하여 존재하는 모든 파일에서 원하는 단어를 찾아주는 명령어 입니다.
10+
11+
*$grep -rni [검색어] [경로명 또는 파일명]*
12+
13+
r :  하위디렉토리까지 검색
14+
n:  파일의 몇번째 라인에 있는지 표시
15+
i :  검색어를 대소 문자 구분없이 검색
16+
17+
검색어 내에 공백문자가 있을경우는 "  " 를 사용하시면 됩니다.
18+
19+
예)
20+
```shell   
21+
$grep -rn test ./kernel/-
22+
$grep -rni "test board" ./kernel/-
23+
$grep -rn test *
24+
```
25+
26+
git이나 svn을 사용하시는 분들은 .git .svn 폴더로 인해  불필요하게 검색시간이 늘어납니다.
27+
아래와 같이 특정 Directory를 제외 할 수 있습니다
28+
29+
--exclude-dir=디렉토리
30+
31+
예)
32+
```shell
33+
$grep -rn --exclude-dir=\.git test ./kernel/-
34+
```
35+
36+
.bashrc 파일에 아래 내용을 추가 하시면 더 편하게 사용하실 수 있습니다. 
37+
```shell
38+
$alias grp='grep -rn --exclude-dir=\.git'
39+
$grp test ./kernel/-
40+
```
41+
과 같이 사용하실 수 있습니다.
42+
43+
> tip
44+
     
45+
구조체의 정의(definition)부분 검색 일반적으로 정의 부분은  이름뒤에 { 가 위치합니다.
46+
```shell
47+
struct input_dev {
48+
...
49+
$grep -rn "input_dev\s*{" *
50+
$grep -rn "input_dev\s\+{" *
51+
```
52+
로 검색하시면 됩니다.
53+
- \s 는 space를 의미합니다.
54+
- * 는 개수가 0 개 이상을 의미합니다.  따라서 공백이 0개 이상 존재해야 합니다.
55+
- \+  1개 이상을 의미합니다. 따라서 공백이 적어도 1개는 존재해야 합니다.
56+
57+
> find
58+
59+
하위폴더에 존재하는 파일을 찾아주는 명령어 입니다.
60+
61+
```shell
62+
find [검색 디렉토리] -iname [파일명]
63+
-name    :  대소문자 구분하여 파일명 검색
64+
-iname   :  대소문자 구분하지 않고 파일명 검색
65+
66+
$find ./kernel -iname mcs*
67+
$find . -name mcs*
68+
```
69+
70+
> Tip
71+
72+
특정 확장자에서 문자열 검색
73+
```shell    
74+
find . -iname "*.h" | xargs grep -n "input_dev"
75+
```
76+
find로 파일검색후  파일내에 특정 문자열 검색
77+
78+
> keyboard로 붙여넣기
79+
80+
일반적으로 마우스로 문자열을 긁어다가 오른쪽 버턴을 누르면 프롬프트에 복사가 되는데
81+
마우스로 문자열을 잘라내어 Clipboard에 저장된 내용을 Command 창에서 다시 쓰려면
82+
Shift + Insert 키를 누르게 되면 Clipboard에 저장된 내용이 프롬프트에 붙여넣기가 됩니다.

spring/.DS_Store

6 KB
Binary file not shown.

0 commit comments

Comments
 (0)