-
Notifications
You must be signed in to change notification settings - Fork 10
/
0169.txt
222 lines (222 loc) · 10.4 KB
/
0169.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
안녕하세요 포프입니다
좀 전에 비디오 만들다가 날라가 갖고
또 만들어야 돼요
아 짜증나
오늘 할 얘기는
그리고 아까 전에도 했다가 날아간 얘기는
C# 2015가 나왔어요 비주얼 스튜디오 나오면서
그래서 그거에 대해 얘기를 해 보려고 그러는데
일단 기본적으로 새 비주얼 스튜디오 나올 때마다
제가 visual C 쪽을 주로 써 왔고 그쪽 MVP도 하니까
거기 기능을 많이 봐요 일단은
근데 요번에도 그렇고 저번에도 그렇고
사실은 Visual C 쪽 기능을 보면은
좀 실망을 많이 하게 돼요
나온 기능들 보면은
결과적으로는, 아 이거 C++ 11 C++ 14 C++ 17
표준 맞춰 갖고 나왔어 이게 전부에요 사실은
근데..
그 기능들 한 10개 이렇게 보면은
그 중에서 마음에 드는 거 한두 개?
별 의미가 없어요
그래서 예전에 제가 말했던
C++ 표준안에 대한 불만하고도 되게 일맥상통하고
아무래도 한 명이 아니라 여러 기구들이 모여서
같이 표준안을 만들다 보니까
정작 언어를 실제 쓰는 사람한테는 거의 필요가 없는
그런 기능이 많이 들어가는 것 같아요
그건 좀 아쉬운데
어쨌든 오늘은 C# 얘기를 할려고 했으니까
뭐 C#은 그와는 달리
표준 협회가 있는지 모르겠지만 어쨌든
마이크로소프트 주도로 만들고 있는 언어고
그리고 마이크로소프트 자체가 이제
사용자가 이런이런 사람들이 많이 사용을 하니까
이 사람들을 위해 이 기능을 넣어야겠다라고
그런 우선 순위를 잘 세워 갖고
필요한 것부터 주는 것 같아요
그래서
요번에 Visual C#에서 뭐가 새로운 기능이 나왔냐
2015에서 그게 궁금하신 분들은
온라인에다 쳐 보면 나와요
뭐 What's new in Visual C# 2015라고 하면 나오는데
그 중에서 제가 몇 가지만 소개시켜 드리면
한 9개? 10개 있는데 그 중에서 괜찮은 기능이..
제가 아 진짜 괜찮다 이거 쓸 만하다라는 게 한 3개?
그리고
어 이것도 나쁘지 않다라는 게 3~4개 되고
한 3개 정도는 아 쓸모없다라고 생각하는 거니까
그거는 뭐 알아서 판단하면 되죠
제가 지금 본 것 중에 가장 마음에 드는 기능은
그 Auto-property initializers가 있거든요?
그니까 예전에..
C#을 오래 써 보신 분들은 알겠지만
처음에는 멤버 변수를 썼었고
그 getter하고 setter를 할 때
그걸 getter, setter로 안 쓰고 property로 해 갖고
그 안에 get, set 해 갖고 멤버 변수를
접근하게 하는 게 property라고 했었는데
그걸 어느 순간 C#에서 auto가 되게 해 줬어요
그니까 곧바로, 말 그대로,
값을 반환만 하고, 설정만 하는 거면은 그냥
property를 만들고 중괄호 열고 get; set; 넣어 버리면
알아서 해 줄게
그거였거든요?
근데 요번에는
아 근데 그거의 문제는
멤버 변수는 변수 선언할 때 쓰자마자 거기다
default 값으로 initialize를 할 수 있었어요 초기화를
근데 auto member는 그게 안 돼 갖고
막 constructor에 넣고 그래왔거든요?
그래서 property 넣기 시작하면은 쓸데없이
constructor 만들어야 되는 귀찮은 게 있었는데
요번에는 Auto-property 자체에서
기본값을 initialize하게 해 줘요
그니까 Auto-property 넣고, 중괄호 넣고, 어쩌고저쩌고 한 다음에, 중괄호 닫은 다음에, 이제 값을 넣어 주면
( e.g. public string Name { get; set; } = "Pope"; )
그게 초깃값으로 들어가서
그거는 꽤 잘한 것 같고
이제 두 번째는
이것도 참 괜찮다고 생각은 하는데
문제는..
아 일단 뭔지부터 말씀드릴게요
그 Null-conditional member access라는 게 생겼거든요
뭐냐면
예전 같은 경우 이제
object는 null로 올 수 있으니까
그 null로 오면은 이제 그거를 접근하기 전에
if, null이면은, 뭐 하고
뭐 이런 식으로 했어야 되잖아요
그리고 만약에 이게 null이 아니면은
멤버 변수에 접근을 하고
그걸 판단 안 하면 error가 나 버리니까
이게 null인 경우에는 그냥 null로 반환해라
이런 거를 막 if, else로 짰어야 됐거든요?
뭐 아니면 Ternary statement,
한 줄에 넣고 question mark('?') 넣고 막 하는 거
근데 요번에는 바뀌었어요 그게
이거는 좀 다른 언어에 없는 기능이라서
C#을 처음 접하는 사람한테 좀 이질감이 올 것 같은데
그 object가 A라 그러면, A하고 question mark('?')를 붙인
다음에 dot('.') 넣고 멤버 변수를 접근을 하면은
(e.g. int? length = array?.Length;)
이게 아까 말한 if, else 문하고
똑같이 해 주는 거에요 실제로
이게 null이면은 그냥 null로 반환을 하고
null이 아닌 경우에는 멤버 변수를 해 갖고
멤버를 반환하게 하는 뭐 그런 식이 생겼고요
똑같은 게 Array에도 포함이 돼요
Array도 그게 null이면은 Array에 있는 요소를 접근할 때
null error가 나잖아요 null exception이
그래서 그거를 똑같은 얘기로
Array..
그 멤버 변수
Array 변수 이름 넣고, question mark('?') 넣고,
그 다음에 이제 곽괄호 열어 갖고 뭐 1, 2, 3, 4 넣으면은
e.g. int? n = intArr?[1];
null 체크하는 거랑 똑같이 작동을 하고
저는 이거는
그냥 코딩을 짤 때
짧게 짤 수 있으니까
예전에 막 if, else 넣어 갖고 막 짜야 되는 게 아니라
그냥 넣으면은 짧게 되고
그리고 생각하는 순서하고도 되게 맞아요
아 이게 null이 아니면, 해라 해라 해라
중간에 null이면 곧바로 null로 대입을 해라
e.g. int? count = customers?[0]?.Orders?.Count();
그래 갖고 읽기도 편하고 쓰기도 좋아서 저는
좋은 기능이라고 생각을 하는데 저도 많이 쓸 것 같고
문제는 아까 말했듯이 초보자들이
처음 C#을 접할 때 이걸 보면은
이게 뭐지?라고 또 고민할 게 하나 늘어나니까
사실은 처음 C# 배우는 사람한테 제가
이걸 쓰라 그러지는 않을 것 같아요
그냥 나중에 손에 익으면
빨리빨리 하기 위해서 쓰게 하는 건데
문제는 코드를 회사에서 그렇게 짜 놓고
나중에 또 신입 들어왔을 때 그것도 문제라서
얼마나 써야 될지는 모르겠지만
일단 그런 게 있고
그 외에 이제 제가 또 괜찮다고 생각했던 건
예전에 try, catch라든가 try, finally 할 때 그 안에서
await 문을 못 썼거든요? 그 async, await 하는 거
근데 이제 그거 되게,
이제 컴파일 지원하게 바꿔 줬고
그거야 그냥 기능 추가한 것뿐이라고 봐야 되고요
그 다음에 이제
뭐 한두 가지 더 말하면
try, catch 할 때 가끔은
이런 Exception이 발생을 했는데 그 Exception이 오면은..
보통 Exception parameter가 들어오잖아요
그걸 봐 갖고 다르게 처리해 주고 싶을 때
막 Exception 밑에 if, else 넣고, 어떤 경우에는
Exception 처리해 주고, 어떤 경우에는 안 해 주고
막 이런 게 있었거든요?
근데 그런 경우가 있으면 이제는
catch 하고 괄호 열고 어떤 Exception인지 type 정해 주고
변수 넣어 주고 괄호 닫은 다음에, 그 옆에 if 문을 붙이면
e.g. catch (Exception e) when (e.ParamName == "…")
Exception filtering이 아예 돼요
그래서
굳이
그 조건에 부합하지 않으면 Exception handler를
호출 안 하는 그런 기능이 추가됐고
근데 뭐 저는 Exception을 별로 원래 안 쓰기 때문에,
안 쓰려고 하기 때문에
그게 얼마나 도움이 될지는 모르겠지만
그런 게 있어요
그리고 이제 또 하나는
제가 그래도 봐서 나쁘지 않다고 생각한 거,
string interpolation 이라고
C#에서 string 해 보신 분들은 알겠지만
보통 string을 조합할 때?
그때 보면은 string + string 막 이런 식으로 하잖아요
그러면 나중에 가면 그게 object를 몇 개나 만들어서
가비지 컬렉션(Garbage Collection)에 안 좋고 그래서
그렇게 할 바엔,
string.Format을 한 다음에 format string 넣고
그 중간에 값 바꿔야 되는 거 parameter처럼
그거는 중괄호 열고 0, 1, 2... 이렇게 해 갖고
그 다음에 parameter 오게 1, 2, 3, 4 이렇게 넣어라
근데 이제
그게 parameter가 많아지면 굉장히 읽기 복잡해지고
막 그런 것도 있어요
중간에 parameter 또 하나 추가하려면 숫자
하나씩 밀어 버린다든가 이런 귀찮은 것도 있었고
또 그거를 이제 약간 더 간편화하기 위해서
string interpolation이라는 거는 소개를 했죠
string 처음 시작할 때 $ 넣고 " " 넣고, 거기다가 string 막 쓰다가, 갑자기 거기다 중괄호 열고 변수 이름 써 버리면
곧바로 변수 값이 들어오게 하는
그런 걸 만들었어요
그래서
그것도 나쁘지 않다라고 생각은 하고요
근데 뭐 제 옆에 있는 사람은 보고 나서
아 이게 너무 PHP화 돼서 마음에 안 든다라고는 했는데
뭐 그거는 저는 나쁘지 않은 것 같아요
그 정도가 있고
그 외에 뭐 using static이라든가, 뭐 static using인가
뭐 그런 것도 있고 근데 별로 의미는 없는 것 같고요
제가 3개 정도 얘기하는 것 같아요
그래도 C#은 만들어 놓은 기능 중에 한 9개 10개 중에
6개는 쓸 만한 거여서 좋다 이렇게 생각이 드는데
C++는 아무리 생각해도 요즘 좀..
예전에 차라리 Visual..
마이크로소프트가 자기만의 C++을
만들어 갈 때 있었잖아요
약간 standard 좀 덜 따라가고 이럴 때
그럴 때는 오히려 필요한 기능부터
열심히 넣어 줬던 것 같은데
요즘은 표준화 따라가려고
열심히 표준에 맞춰서 이거이거 넣었어에 바빠 갖고 별로
중요한 기능은 별로 안 들어오는 것 같아서
최적화 뭐 Vectorization 좀 더 나아지고 이런 게
들어왔다고 하는데 그게 전부인 것 같고
그래서 개인적으로는 좀
아 역시 언어 같은 경우에는
한 회사가 밀고 가는 게 되게 좋은 게
이런 거구나 요즘 많이 느껴요
C#도 뭐 이제 멀티 플랫폼화 되어 가고 있고
C#은 참 괜찮은 것 같다 생각이 들고요
아 졸려
이 정도로 끝마치죠 포프TV는
예 포프였습니다