- 읽는중 -


잘난척이 심한거빼곤 다 괜찮은 조승연 작가의 책



···

결국 고도화라는 것은 지식을 감각에 연결하는 것이다. 알기만 하고 쓸 줄 모르는 지식은 머리에서 몸으로 내려오지 않는다. 

아는 것이 몸으로 내려와 실제로 사용할 수 있는 것만이 진짜 지식이다.

···

- 168p -



아트에서의 '감각' 이라는 것도 이와 비슷하다고 생각한다.


허구헌날 세계적 수준의 레퍼런스만 보고 정작 똥같은 결과물만 만들어내는건,

눈으로 본 감각을 체화시키지 못했기 때문이다.


아름다운 시각물을 보고 아름답다고 하는건 누구나 할 수 있다.

하지만 창작은 무던한 시도와 연습없이는 불가능하다.



'Review > Book' 카테고리의 다른 글

플루언트 [읽는중]  (0) 2018.01.06
Review 게임의 심리학  (0) 2018.01.03
Review - 초보자를 위한 C#200제  (0) 2018.01.02

-


도서관에 공무원 시험 준비하는 사람들이 많다.


책 펴놓고 엎드려 자거나,

폰으로 드라마를 보면서 많은 시간을 보내던데,


너무 안타깝다.


누가 저렇게 재미없는 일을 할수밖에 없도록 떠밀었을까.


공무원이 된다한들

하고싶은 일을 할때의 설렘 없이 살아간다면

그저 퇴근시간만 기다리는 하루하루가 되지 않을까.


안타깝다 안타까워


-


남자 열람실은 오후 3시쯤 되면


오래 안씻은 사람에게서 나는

약간 짭쪼롭하고 퀴퀴한 찌릉내같은 


그런 냄새로 가득 찬다.


창문 가에 앉아도 소용이 없다.

4시쯤되면 어쩔 수 없이 집에가서 작업할 환경이 된다.


나름의 칼퇴 알람.


-


요즘 한동안 C#이니 인디 개발이니 하느라

메인잡에 소홀해서 항상 빚쟁이한테 쫓기는 느낌이었는데,


드디어 두개의 UI screen 모드 approved 됐다.



요번 주말은 맘 편히 공부하고 개발할 수 있겠다.


-


Game art는 절대적인 시간이 많이 들어간다.


Poster design 이나 Illustration 처럼 한장만 그리면 끝나는게 아니라 (쉽다는건 절대 아님)

시작부터 끝까지 정말 수없이 많은 art piece 들을 필요로 하기 때문에,


절대적으로 필요한 시간이 매우 길다.


그래서 아쉽다.


표현하고 만들고 싶은건 수없이 많은데,

하루가 너무 짧고 몸이 따라주질 않는다.


빨리 최적의 작업실을 마련해서

빨대 꽂고 영양분만 공급받으며 숨쉬며 작업만 하고 싶다.


그러기 위해서 돈!!!

많은 돈을 벌자!!

'Blah Blah' 카테고리의 다른 글

일상  (0) 2018.01.09
일상  (0) 2018.01.07
일상  (0) 2018.01.06
잡캐의 운명  (3) 2018.01.05
남은 기간동안 ToDo List  (0) 2018.01.03
Reference Letter 양식  (0) 2018.01.01

어젯밤 잠들기 전에,

LinkedIn 을 보다가 괜한걸 알아버렸다.


평소 눈여겨보던 라이엇의 VFX Artist의

바로 전 직장이 내가 가게될 회사이고,

나이는 20대 중반에 불과하다는 것.


후...


잡캐의 길을 걷기로 한 이상,

어정쩡한 사람들이야 각고의 노력으로 추월한다쳐도


한 분야를 나만큼 (혹은 훨씬 더) 파는 사람들은

이길수 없음이 당연하다.


그걸 알면서도 마음은 그렇게 되질 않음.


내가 걸쳐진 각 분야의 실력자들을 마주칠때마다

멘탈이 바사삭이다.



덕분에 체감 1시간 가량 설치다 잠들고,

밤새 마감 전날 압박에 시달리는 꿈을 꿈.


피곤하지만 오늘도 힘내자!!

'Blah Blah' 카테고리의 다른 글

일상  (0) 2018.01.07
일상  (0) 2018.01.06
잡캐의 운명  (3) 2018.01.05
남은 기간동안 ToDo List  (0) 2018.01.03
Reference Letter 양식  (0) 2018.01.01
캐나다 외노자 - Prequel  (0) 2017.12.30
  1. 2018.04.20 20:55

    비밀댓글입니다

    • 2018.04.20 21:23

      비밀댓글입니다

    • 2018.07.02 22:54

      비밀댓글입니다

https://realtimevfx.com/t/an-example-of-sending-custom-data-from-shuriken-to-a-vertex-shader-in-unity-5-5/1515




[Day 43]


object 는 Object 와 동일한 것으로 모든 클래스의 부모이다. 한 개체를 생성하면 그 개체의 부모인 Object 의 개체도 함께 생성된다.

모든 클래스는 직 간접적으로 object를 상속하게 된다.


중요 Method

GetHashCode()     개체 고유 번호

GetType()            개체 형태

Equals()              같은 개체인가 비교

ToString()            개체에 대한 정보



형변환 에는 캐스팅, 프로모션, 박싱, 언박싱 등이 포함된다.



대체 프로모션 캐스팅 박싱 언박싱이 뭐지.. 한줄씩만이라도 설명을 달아줬으면 이해하기 좋았을텐데 ㅡㅡ

다시금 이 책의 불친절함을 느끼며 구글링한 결과를 첨부.


Promotion, Casting (from : http://movefast.tistory.com/7)


Promotion 자동타입변환

- 프로그램 실행 중에 자동으로 타입 변환이 일어나는 것을 의미.


큰 크기의 타입 ← 작은 크기의 타입    (여기서 크기는 사용하는 메모리 크기를 말함)


byte > short > int > long > float > double 순서 또는 char> int 순서로 자동 타입 변환이 일어난다.



Casting 강제 타입변환

- 큰 데이터 타입을 작은 데이터 타입으로 쪼개어 강제로 저장하는 것을 의미.


큰 크기의 타입 → 작은 크기의 타입


위와 반대의 순서로 강제 타입 변환이 일어난다.


예를 들어,


int i = 271445124;

byte b = (byte) i;


위의 경우 끝의 1 byte만 byte 타입 변수에 담게 된다. 

즉, 변환되어질 데이터보다 큰 것을 강제 타입 변환을 할 때 기존의 값을 보존되지 않는다.


※ 주의 사항


int > float 로 강제 타입 변환을 할 때,


float : 부호(1비트) + 지수(8비트) + 가수(23비트)


로 구성되어 있기 때문에 int 값이 123456780 처럼 가수 23비트로 표현불가능한 숫자일 경우 근사값으로 변환된다.

이 점은 정밀도 손실을 발생시키기 때문에 모든 int 값을 안전하게 실수 타입으로 변환시키려면 double 타입을 사용하는 것이 현명하다.


double : 부호(1비트) + 지수(11비트) + 가수(52비트)


그 이유는 int 값은 4바이트 = 32비트 이므로 double 의 가수 52비트보다 항상 작기 때문에 정밀도 손실없이 변환이 가능하다.


지수, 가수란? (http://thrillfighter.tistory.com/349)



음.. 역시 프로그래밍은 뭔가 철저하구먼



박싱과 언박싱 (from : http://www.mkexdev.net/Article/Content.aspx?parentCategoryID=1&categoryID=5&ID=671)


"박싱 / 언박싱은 성능에 좋지 않습니다"


Boxing 값 형식을 참조 형식으로 변환하는 것


스택에 있는 데이터가 힙으로 복사됨. 박싱은 묵시적으로 일어나며 명시적으로 해도 무방.

값 형식인 정수형 자료 int 를 참조형식인 object 객체로 할당하게 되면 자동으로 박싱이 일어남.


int i = 123;

object o = i;    // Boxing (묵시적 변환)


UnBoxing    참조 형식을 값 형식으로 변환하는 것.


힙에 있는 데이터가 스택으로 복사 됨. 언박싱은 명시적으로 변환해줘야 함.

박싱된 객체를 다시 값 형식으로 변환하면 언박싱이 일어남.


int i = 123;

object o = i


int j = (int) o;    // Unboxing (명시적 변환)


※ Unboxing 은 Boxing 한 객체에 대해서만 가능

※ Unboxing 은 Boxing 하기 전 형식을 준수해야 함.


MSDN 에서는 이 과정에 대한 비용을 다음과 같이 설명하고 있습니다

boxing  unboxing 과정에는 많은 처리 작업이 필요합니다값 형식을 boxing할 때는 완전히 새로운 개체가 
만들어져야 하며이러한 작업에는 할당 작업보다 최대 20배의 시간이 걸립니다. unboxing을 할 때는 캐스팅 
과정에 할당 작업보다 4배의 시간이 걸릴 수 있습니다


언제 왜 사용하는지는 너무 복잡하니 링크 참고.

여기 C# 기초강좌들이 있으니 방문해볼 것. (내 눈엔 기초같이 안보이지만..)

http://www.mkexdev.net/Article/ArticleList.aspx?parentCategoryID=1&categoryID=5



위 사이트에 발췌한 Overloading 과 Overriding 에 대한 글. (책보다 훨씬 이해가 잘되네.. 하하 ^^)


오버로딩, 오버라이딩 그리고 new ( from : http://www.mkexdev.net/Article/Content.aspx?parentCategoryID=1&categoryID=5&ID=190)


Overloading 

C# 오버로딩  기법을 사용하면 동일한 이름의 메서드를 여러개 사용할 수 있다.

C# 컴파일러는 동일한 이름을 가진 두개 이상의 메서드가 있을 경우 이 메서드들의 파라메타들의 정보를 기준으로 메서드를 식별한다.


메서드 시그너처 - 메서드 이름, 파라메타 정보(타입, 개수) 를 말한다. 메서드 시그너처는 클래스 내에서 유일해야 한다.


C# 컴파일러 입장에서는 각기 다른 메서드로 식별되지만, 사용자 입장에서는 동일한 이름으로 접근할 수 있도록해서 편의성을 제공


Overriding

클래스의 상속과 연관이 있다. 부모로부터 상속되어진 메서드를 재정의 할 때 사용하는 기법이다.

부모 클래스에서는 자식 클래스에서 재정의 할 수 있도록 virtual (또는 abstract) 메서드로 정의하고,

자식클래스에서는 이렇게 정의된 가상 메서드를 override (재정의) 하면 된다.


이런 메서드 재정의 기법은 객체지향의 다형성을 가능하게 한다.

동일한 타입의 객체로 서로 다른 일을 할 수 있도록 하는 다형성은 아주 유용한 개념.


New

오버라이딩 처럼 클래스의 상속과 관련이 있고, 부모 클래스에 정의된 메서드를 숨기는 역할을 한다.

new 를 통해서 부모 클래스의 메서드를 새로 정의할 때는 부모 메서드가 virtual 이거나 아니거나 상관이 없다.

부모 클래스의 메소드를 자식 클래스에서 그대로 상속받도록 하지 않고 새로이 정의해서 사용한다고 해석될수 있다.


오버라이딩과 new의 차이점

언뜻 봐서는 별반 달라보이지 않지만, 이 들은 아주 큰 차이점이 있다.

new 는 객체를 생성할 때 자식타입으로 생성해도 부모타입으로 접근하게 되면 여전히 부모 클래스에 정의된 메서드가 호출된다.


하지만 오버라이딩은 부모타입으로 메서드에 접근하더라도 인스턴스가 생성된 자식타입의 메서드가 호출되도록 하여

객체의 다형적인 동작이 가능토록 한다.




[Day 44]


is 키워드를 이용하면 구체적인 타입을 알 수 있다.


example )

if (obj is string) { string tt = (string) obj; }



[Day 45]


as 키워드는 참조 타입에만 사용할 수 있으며, is 와 캐스팅을 합한 키워드이다.

Unboxing 할때는 as 사용 불가.



[Day 46]


ArrayList 는 Array + List로 배열과 비슷하면서 순서대로 저장하고 사용할 수 있는 클래스이다.

네임스페이스는 System.Collections 이다.

Array 는 크기가 고정되어 있지만, ArrayList 는 크기가 유동적이다.

Array 는 Index 를 사용한다. Array m 의 3번째 element는 m[3] 으로 표시한다.

ArrayList 는 3번째 element 를 list[3] 으로 사용하여 Array의 Index를 흉내낸 듯한 Indexer 를 사용한다.


중요 Method

Array list = new ArrayList(10)        기본으로 10개를 저장할수 있도록 선언. Capacity 라고 함.

list.Clear();                                   초기화

list.Add(object o);                         순서대로 저장함

list[i] as XXX;                                list에 저장된 i 번째 element 를 return 한다. indexer라고 하며 array 처럼 사용할수 있다. 저장할 떄 object로 promotion 됨.

list.Reverse();

list.ToArray();

list.Count;

list.IndexOf(object o)

list.Sort();

list.Insert (int index, object o);

list.RemoveRange(int index, int count);



[Day 047]


ArrayList 와 IEnumerator


ArrayList 와 배열은 IEnumerator 인터페이스를 사용하여 크기를 몰라도 사용할 수 있다. System.Collections 네임스페이스에 있다.

IEnumerator 는 iterator pattern 을 적용한 것으로 크기를 몰라도 사용할 수 있다.


예를 들어, 구슬 주머니에 구슬이 몇개 있는지 몰라도 손을 넣어서 잡히는 것이 있으면 꺼내고, 없으면 끝낸다.

'구슬 주머니에 손을 넣고 구슬을 잡는다' 는 MoveNext() 메서드 역할을 하고, '잡힌 구슬을 주머니에서 꺼낸다' 는 Current 프로퍼티 역할을 한다.


중요 Method

ArrayList list = new ArrayList(10);                            ArrayList 나 배열에서 IEnumerator 를 얻는다.

string[] list = {"A", "B", "C", "D"};

IEnumerator iters = list.GetEnumerator();


iters.MoveNext()            남은 것이 있는가?

iters.Current as XXX       남은 것 중 하나를 꺼내의 원래의 참조 타입 모습 (XXX) 으로 as 캐스팅한다.

'Study > Programming' 카테고리의 다른 글

[C# 200제] Day - 5  (0) 2018.01.04
[C# 200제] Day - 4  (0) 2018.01.03
[C# 200제] Day - 3  (2) 2018.01.02
[C# 200제] Day - 2  (0) 2018.01.01
[C# 200제] Day - 1  (0) 2017.12.31

- 구글의 아침은 자유가 시작된다 완독


- 플루언트 완독


- C# 200제 100제까지는 풀고 나머지 반만 토막내서 갖고가기


- Project JJ 인게임 리소스 제작 완료


- Project Z 테스트 씬 제작 완료





- 비자 발급용 서류 출력 및 정리


- 방한 도구 구입


- 가져갈 책 추리기


- 컴퓨터 정리


- 계좌 준비

'Blah Blah' 카테고리의 다른 글

일상  (0) 2018.01.06
잡캐의 운명  (3) 2018.01.05
남은 기간동안 ToDo List  (0) 2018.01.03
Reference Letter 양식  (0) 2018.01.01
캐나다 외노자 - Prequel  (0) 2017.12.30
이별 후유증  (0) 2017.12.26

★★★☆☆



꽤 얇아서 마음만 먹으면 하루이틀만에 다 읽을 수 있는 두께.


새로운 내용이나 기발한 발견보다는

게임의 메커니즘들을 심리학 이론들과 매칭시켜놓은 느낌.


너무 정보를 나열해놓은 사전같은 느낌이라 아쉬웠다.

조금 무리수라도 개인적인 해석이나 가정, 연구가 덧붙여졌으면 좋았을법.


라프 코스터의 재미이론 급의 내용을 기대하고 구입했으나,

기대만큼 실망이 커서 별 세개. (아마 반개짜리가 있었으면 2.5개가 됐을 수도..)


"오 이런 것도 심리학 이론이 있어?"

라든가

"심리학자들 차암 이름 갖다붙이는거 좋아하네ㅋ"

정도가 주된 반응이었음.


그래도 막연하게 체감하고 있던 게임 이론들을

체계적으로 정리하게 되었다는 점은 좋다.



게임 개발 베테랑 들에게는 비추.

입문자나 비전문인들에게는 추천.

'Review > Book' 카테고리의 다른 글

플루언트 [읽는중]  (0) 2018.01.06
Review 게임의 심리학  (0) 2018.01.03
Review - 초보자를 위한 C#200제  (0) 2018.01.02

[Day 37]


StringBuilder 는 string 과 거의 비슷한 메서드를 갖는다.

특징      - System.Text Namespace 에 있는 Class 로 System.Text 를 using 한다.

- mutable : 문자열 string 과는 다르게 다시 대입하지 않아도 원래 값이 변경되는 것을 말한다. mutable 이기 때문에 주소에 의한 전달이 된다.

- mutable string concatenation : s.Append() 를 이용한다. 다시 대입하지 않아도 된다.


중요 Method

sb.Append( string )

sb.Insert( location, string )

sb.Remove( start location, delete area)

sb.Replace( target string, replacing string )



[Day 38]


char " " 으로 감싼 것은 문자열 (string) 이고, ' ' 로 한 글자를 감싼 것은 문자(char)다. char는 기본 타입이다.

문자열은 1개 이상의 문자로 구성된다.


중요 Method

char.IsPunctuation(index)        문장부호인가?

char.IsUpper(index)                대문자인가?

char.IsLower(index)                소문자인가?

char.IsLetter(index)                문자인가?

char.IsNumber(index)             숫자인가?

char.IsDigit(index)                  10진수 숫자인가?

char.IsLetterOrDigit(index)        문자나 숫자인가?

char.IsWhiteSpace(index)        공백문자('\t', '\n', '\r') 인가?


입력받은 문자열에서 숫자만 골라내기



어제 "아 이런걸 다 해야해?!" 하고 후루룩 넘겼다가,

오늘 다시 보니 하나도 기억이 안나는 참사가 벌어져서 다시 하나하나 해보는중.


이건 입력받은 10진수를 2진수로 변환시키기



인내해야 하느니라..


입력한 문자열 숫자로 바꾼 뒤 각 자리 다 더하기




[Day 040]


Array 

중요 Method

Array.Copy (a, b, count)        배열 a를 배열 b에 count 개수 만큼 일대일 복사 (Deep Copy)

Array.Clear(a, 0, count)          0번째에서 count 개수 만큼 배열 kk를 0으로 채움

int num1 = Array.IndexOf(a, 6)        a에서 첫번째 6의 위치

int num2 = Array.LastIndexOf(a, 6)   a에서 마지막 6의 위치

Array.Reverse(a)            a의 순서를 반대로 바꾼다.

Array.Sort(a)            증가순으로 정렬한다.



[Day 041]


enum 은 상수의 나열이다. enum 은 클래스를 선언하는 방법과 같이 'public enum enum이름 {A, B} 로 한다.

switch(A) 의 A에는 int, char, enum, string 이 올 수 있다.

public enum ClearType{ZERO, THEOTHER} 에서 값을 명시하지 않은 ZERO는 0이 대입되고, 다음은 1씩 자동으로 증가하여 THEOTHER = 1 이 된다.



[Day 042]


Overloading 메서드 이름은 갖지만 아규먼크의 개수나 타입 또는 ref, out, params 와 같은 키워드의 유무에 따라 다른 메서드가 되는데, 이것을 overloading 이라고 한다.

Return type 은 Overloading 과 관계 없고, 주로 한 메서드를 잘 만들어놓고, 다른 메서드가 이 메서드를 사용하는 형식을 취한다.

'Study > Programming' 카테고리의 다른 글

[C# 200제] Day - 5  (0) 2018.01.04
[C# 200제] Day - 4  (0) 2018.01.03
[C# 200제] Day - 3  (2) 2018.01.02
[C# 200제] Day - 2  (0) 2018.01.01
[C# 200제] Day - 1  (0) 2017.12.31



평점 : ★★☆☆☆



초보자를 위한 입문 서적임에도 불구하고 생략된 부분이 매우 많다.

요리 레시피에 빗대어 말하자면 이런 느낌이다.




* 국수요리 입문 | 면 잘 삶는 방법 *


1. 마온천달걀가케소바 를 만들며 면 삶는 법을 익혀본다.

2. 면을 삶을 물에 식초를 넣는다,

3. 면을 넣고 물이 끓어오르면 차가운 물을 붓는다.

4. 미리 만들어놓은 육수에 면을 넣는다.

.

.

.




아니 난 그저 개 기초적인 면 삶는 법부터 배우려고 했는데,

대체 왜 저런 이름도 생소하고 이름만 읽어도 좌절스러운 목표를 잡는거지?!!?


대체 왜 물에 식초를 넣고 끓는 물에 차가운 물을 얼마나 부어야하는지 설명이 당최 없다.


 "자 테일러 급수는 당연히 알거고, 다음은 친화수를 찾아보자. 그리고 나면 진수 변환과 보수를 찾는걸 만들어볼거야."


이런 진행 과정을 보고 우왕 재밌겠따!! 하는 아티스트는 십중 팔구 아트의 탈을 쓴 프로그래머일 것이다.


그리고 대체 미리 만들어놓은 육수는 뭘로!! 어떻게!! 왜!!!!! 만들어놓는건데!!!

기껏 한다는 설명은 다시마의 기원부터 말하는 것과 마찬가지인 수준이다.


후..........


"아티스트를 위한" C# 입문서가 아니니 내가 뭐 할 말은 없다만.. (그래서 꾹 참고 하는 중)

초보, 입문 등의 단어로 현혹시킬만한 그런 책은 저어어어얼대 아니다.


개인적인 느낌으로는,


"고교 수학을 마스터하고, C에 대한 지식이 있으며, Visual Studio 를 익숙하게 다뤄본 공대생을 위한 C# 입문 서적"


정도가 옳을듯하다.


공대생들은 모르겠지만,

아티스트들은 입문할때 다른 책을 사보도록 하자.


연산자 공부하는데 테일러 급수라는걸 알아야해...? 이걸.. 대체 어따 써...? 안할래 C# 무서웡...


하는 결과를 낳고 영영 코딩의 길을 포기할지도 모른다.

'Review > Book' 카테고리의 다른 글

플루언트 [읽는중]  (0) 2018.01.06
Review 게임의 심리학  (0) 2018.01.03
Review - 초보자를 위한 C#200제  (0) 2018.01.02

[초보자를 위한 C# 200제]


[Day 24]


비트 연산자...

음..... 이 책의 예시들은 참 재미없고 와닿지 않는 느낌이다.


내가 아트 베이스에 수학을 싫어해서 그런지는 모르겠지만,

만드는 것들이 하나 같이 딱딱한 수학공식들임..

수학의 정석에 나오는 문제들을 코딩으로 구현하는 것 같음.


먼저 흥미를 북돋울수 있는 예제들을 경험하게 하고,

그 후에 실제 쓰일만한 상황에 수학 공식을 끼얹는게 좋은 접근 방식이 아닐까 생각해봄.


참 끈기와 의지가 필요한 책이구만.


보수란? (출처 : http://sessionk.tistory.com/126)


1의 보수는 0은 1로 1은 0으로 바꾸는 방식입니다. 

1의 보수 
0000 0100 -> 1111 1011 
이렇게 바꾸는 것이 1의 보수입니다. 

2의 보수는 1의 보수에 1을 더하는 것입니다. 
0000 0100 -> 1111 1011 +1 -> 1111 1100
위에 예제에서 2의 보수는 음수값을 가지고 있습니다.


1의 보수를 사용하다 보면 문제가 있습니다. 그 문제는 0이 2개가 생긴다는 것입니다.

+0 : 0000 0000
-0 : 1111 1111

0은 매우 중요한 숫자이므로 이러한 문제가 발생이 되면 안됩니다. 그래서 2의 보수를 만들게 되었습니다.

2의 보수는 1의 보수의 +1 입니다.

그래서 1111 1111은 0이 아니고 -1 입니다. 



일단 따라하긴 했지만, 그대로 베껴 치는게 뭔 의미가 있나 싶다 ㅡㅡ

아.. 짜증


알고 있는 내용이라도 연습삼아 차근차근 해보려했건만,

슬슬 짜증나서 스킵해야되나 고민중


[Day 25 - 30]

이미 알고 있는 switch, while 문으로 또 몇진법이 어쩌고 해서 Skip.


[Day 31]


ref 는 값에 의한 전달을 주소에 의한 전달이 되게 한다. ref 가 붙은 변수는 메서드 안에서 값을 변경하면 메서드 밖에 있는 원래의 값들도 변경된다.

메서드를 선언할 때와 호출할 때 모드 ref 키워드를 붙여야 한다.

ex ) Swap (ref m[j], ref m[j+1]);                    //호출

public static void Swap(ref int a, ref int b) {    //선언



get property - 저장된 값 보여주기  - a=m[i];

set property - 새로운 값 대입        - m[i] = 20;


foreach 출력이나 외부로 값을 보여주기(get property) 위해 for 대신 인덱스를 사용하지 않는 foreach 를 사용할 수 있다.

foreach(타입 변수 in 배열명) 의 형태를 사용한다. 줄을 맞추어 서있는 학생들을 부를 떄처럼 다음 학생이라는 말을 사용하는 것과 마찬가지로 배열 m에 있는 다음 int, 다음 int 로 배열 m 에 있는 모든 것을 출력할 수 있다. num 은 set property로 사용할 수 없다. 반복 변수에 대입하는 것은 불가능하다. 출력이나 저장된 값 보여주기용으로만 사용할 수 있다.


params 키워드는 변수의 개수에 관계 없이 사용할 수 있게 한다. DescSort(a,b), DescSort(a,b,c), DescSort(a,b,c,d) 와 같이 DescSort() 메서드의 아규먼트 개수가 2개, 3개, 4개가 필요할 때 오버로딩된 메서드가 3개가 필요하지만 params 를 사용하면 아규먼트의 개수에 관계 없이 사용할 수 있다.


out 키워드는 Argument 와 반대로 method 안에서 구한 값을 method 외부로 보낸다. return 을 사용할 수 없는 void 메서드를 이용하려면 out 키워드를 사용한다.

ex) private void countOfEnemy(int n, out int nums) {


string (문자열) 은 참조 타입이지만 기본 타입과 같은 특징을 갖는다. 참조 타입의 메서드를 가지면서 기본 타입처럼 값에 의한 전달을 한다.

특징1 - Immutable. s1 = "Good Morning." 일 때, s2 = s1.ToUpper(); 를 하면 s2는 "GOOD MORNING." 으로 변경된다. 그러나 s1은 그대로 "Good Morning." 이다 .s1을 s2에 대입하면 s2는 변경되지만 s1은 변경되지 않는다. 이를 이뮤터블이라고 하며, 기본 타입의 특징이기도 하다.

특징2 - 기본 타입과 문자열이 만나면 문자열이 된다.


Member method

string.ToUpper()            대문자로 바꾸기

string.ToLower()            소문자로 바꾸기

string.PadLeft(20, '-')      -을 왼쪽에 넣어서 20자 채우기

string.PadRight(20, '-')    -을 오른쪽에 넣어서 20자 채우기

string.Remove(5)           5번째부터 제거

string.Remove(5, 8)        5번째부터 8자 제거

string.Trim()                 양쪽 공백 제거

string.TrimeEnd()           오른쪽 공백 제거

string.TrimStart()           왼쪽 공백 제거

string.Replace('G', 'S')     'G' 를 'S' 로 바꾸기

string.Substring(5)        5번째 이후를 남기기

string.Substring(5, 8)      5번째부터 8자 남기기

string.Insert(2, "uu")        2번째에 "uu" 삽입하기

bool s1 = string.Contains("o")        "o"를 포함하고 있나?

int s1 = string.IndexOf("o")    왼쪽부터 첫번쨰 "o"의 위치 (없다면 -1)

int s1 = string.LastIndexOf("r") 마지막 "r" 이 존재하는 위치

int s1 = string.Length            문자열의 길이


char[] cc == {''}

string[] s1 = string.Trim().Split(cc);    공백 (" ") 을 기준으로 string을 분리 (먼저 Trim() 으로 공백을 제거한다)


chat[] c = string.Trim().ToCharArray();  문자열을 문자 타입의 배열로 만든다 (먼저 공백을 제거한다)


string ss = new string(c)        문자타입의 배열을 문자열로 바꾼다.


string.Concat(params object[] obj)     여러개의 파라미터를 붙임


string cc = "&";

string.Join(cc, keyval);            문자열 배열을 서로 붙일 때 분리자를 이용하여 붙임

'Study > Programming' 카테고리의 다른 글

[C# 200제] Day - 5  (0) 2018.01.04
[C# 200제] Day - 4  (0) 2018.01.03
[C# 200제] Day - 3  (2) 2018.01.02
[C# 200제] Day - 2  (0) 2018.01.01
[C# 200제] Day - 1  (0) 2017.12.31
  1. digitz 2018.01.02 15:52

    어차피 캐나다 오실꺼니까 기왕이면 영문서로 공부하시는 게 적응하시기 편하시긴 할 거에요. ㅎㅎ.
    보수가 필요한 개념이긴 합니다만 입문자용에 꼭 필요한지는 의문이긴 하네요. C#을 배우기로 하신데는 아마 Unity와의 접점때문이겠지만 개념 파악하는데에는 조금 어렵긴 할 거에요.
    C#은 객체지향프로그래밍 언어라 그 개념을 파악하는데 꽤 오랜 시간이 걸리는 편인데요 (저의 경우에도 학부 1년을 거의 이 개념을 이해하는데만..) 특히 class가 뭔지 왜 class가 필요한지를 깨닫기 위해서는 이론과 실전 공부를 열심히 병행해야 합니다. 이 객체지향형 언어는 지하철 빠른길 찾는 프로그램을 만들면서 어느정도 숙련자의 길로 접어들 수 있어요.
    그래서 언어에 익숙치 않으시다면 Flash의 Actionscript나 Web의 Javascript부터 시작하는 쪽을 추천드리긴 합니다만, 정공으로 처음부터 C# 배우는 것도 끈기만 있다면 괜찮은 선택일 겁니다. 화이팅입니다!

    • Woodorl 2018.01.03 09:16 신고

      조언 감사합니다. 아무래도 아직 영어가 많이 취약하다보니 영문 자료를 보니 완전히 이해하기가 쉽지 않더라구요. ㅠㅠ
      그래서 국문으로 구입했는데, 이게 또 같은 개념도 어떨때는 한글로, 어떨때는 영어로 말해놔서 더 헷갈리네요ㅋㅋ 아이고

      당장의 목표는 Unity + C# 으로 간단한 게임을 만드는건데, 나중에는 Shader language나 OpenGL도 공부해보려구요. 아마 일이년으론 어림도 없겠죠. ㅎㅎ

      일단 한동안은 Artist로서의 아트감도 발전시켜야하니 그냥 도닦는 수험생 심정으로 살려구요. ㅋㅋ

+ Recent posts