Section 25.1: BigInteger 활용 - 피보나치 수열 중 처음으로 1,000 개의 숫자를 가지는 값 계산하기

using System.Numerics 문을 추가하고 프로젝트에 System.Numerics 로의 reference 를 우선적으로 추가한다.

using System; using System.Numerics; namespace Euler_25 { class Program { static void Main(string[] args) { BigInteger l1 = 1; BigInteger l2 = 1; BigInteger current = l1 + l2; while (current.ToString().Length < 1000) { l2 = l1; l1 = current; current = l1 + l2; } Console.WriteLine(current); } } }

이 간단한 알고리즘은 피보나치 수열을 계속해서 생성해 나가다가, 최소 1000개의 숫자가 등장하는 첫 시점에서 해당 값을 출력한다. 이 출력되는 값은 심지어 ulong 타입이 가질 수 있는 최대값보다도 훨씬 큰 값일 것이다.

이론적으로, BigInteger 클래스가 갖는 유일한 제약 사항은 사용자의 어플리케이션에게 할당 가능한 RAM 크기 뿐이다.

주의: BigInteger 는 .NET 4.0 혹은 그 이상 버전에서만 사용 가능하다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 24.3: Null 값일 수도 있는 GUID 선언하기

다른 값 타입 (value type) 들과 마찬가지로, Guid 역시 null 값이 될 수도 있는 nullable 타입를 가지고 있다.

선언 방법:

Guid? myGuidVar = null;

이는 테이블로부터 얻어온 값이 null 일 가능성이 있는 데이터베이스로부터 데이터를 얻어오는 작업 시 특히 유용하게 사용할 수 있다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 24.2: GUID 생성하기

다음은 Guid 객체를 생성하는 가장 일반적인 방법들이다:

  • 비어있는 (00000000-0000-0000-0000-000000000000) Guid 생성하기:
    Guid g = Guid.Empty; Guid g2 = new Guid();
  • 새로운 (pseudorandom) Guid 생성하기:
    Guid g = Guid.NewGuid();
  • 특정 값 기반의 Guid 생성하기:
    Guid g = new Guid("0b214de7-8958-4956-8eed-28f9ba2c47c6"); Guid g2 = new Guid("0b214de7895849568eed28f9ba2c47c6"); Guid g3 = Guid.Parse("0b214de7-8958-4956-8eed-28f9ba2c47c6");
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 24.1: GUID 를 문자열 형식으로 표현하기

GUID 의 문자열 형식 값은 내장된 ToString 메소드를 이용하여 얻어올 수 있다.

string myGuidString = myGuid.ToString();

ToString 함수 호출 시 서식 종류 파라미터를 추가적으로 기술해 줌으로써, 사용자의 필요에 따라 GUID 를 각기 다른 서식을 이용하여 표현할 수 있다.

var guid = new Guid("7febf16f-651b-43b0-a5e3-0da8da49e90d"); // None "7febf16f651b43b0a5e30da8da49e90d" Console.WriteLine(guid.ToString("N")); // Hyphens "7febf16f-651b-43b0-a5e3-0da8da49e90d" Console.WriteLine(guid.ToString("D")); // Braces "{7febf16f-651b-43b0-a5e3-0da8da49e90d}" Console.WriteLine(guid.ToString("B")); // Parentheses "(7febf16f-651b-43b0-a5e3-0da8da49e90d)" Console.WriteLine(guid.ToString("P")); // Hex "{0x7febf16f,0x651b,0x43b0{0xa5,0xe3,0x0d,0xa8,0xda,0x49,0xe9,0x0d}}" Console.WriteLine(guid.ToString("X"));
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Chapter 24: GUID

GUID (혹은 UUID) 는 '전역 고유 식별자' ('Globally Unique Identifier' - 혹은 'Universally Unique Identifier') 의 약자이다. 이는 128 개의 비트로 이루어진 integer 숫자로써 자원 (resource) 들을 식별하기 위해 사용된다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 23.4: 메소드로부터 복수개의 값을 반환하기

메소드가 out 파라미터를 이용하지 않으면서도 복수 개의 값들을 반환하고자 하는 경우에는 튜플을 대안으로 선택할 수 있다. 아래의 예제에서 AddMultiply(두 수의 합, 두 수의 곱) 두가지의 값을 반환하고 있다.

void Write() { var result = AddMultiply(25, 28); Console.WriteLine(result.Item1); Console.WriteLine(result.Item2); } Tuple < int, int > AddMultiply(int a, int b) { return new Tuple < int, int > (a + b, a * b); }

출력 결과:

53 700

C# 7.0 에서는 값 튜플 (value tuple) 을 이용하여 메소드로 하여금 복수개의 값을 반환하는 추가적인 방법을 제공하고 있다. 관련된 추가 정보는 다음 링크에서 확인할 수 있다 : ValueTuple struct.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 23.3: 튜플들을 비교하고 정렬하기

튜플들은 그 요소 (element) 들을 기준으로 한 상호 비교가 가능하다.

예를 들어, Tuple 타입을 요소로 갖는 enumerable 은 특정 튜플 요소에 대해 선언된 비교 연산자를 기반으로 한 정렬을 수행할 수 있다:

List<Tuple<int, string>> list = new List<Tuple<int, string>>(); list.Add(new Tuple<int, string>(2, "foo")); list.Add(new Tuple<int, string>(1, "bar")); list.Add(new Tuple<int, string>(3, "qux")); list.Sort((a, b) => a.Item2.CompareTo(b.Item2)); // string 요소를 기준으로 정렬한다 foreach (var element in list) { Console.WriteLine(element); }

출력 결과:

(1, bar) (2, foo) (3, qux)

혹은 반대 순서로 정렬을 하기를 원한다면:

list.Sort((a, b) => b.Item2.CompareTo(a.Item2));
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

Section 23.2: 튜플 생성하기

튜플은 generic 타입들인 Tuple<T1>-Tuple<T1,T2,T3,T4,T5,T6,T7,T8> 들을 통해서 생성할 수 있다. 앞선 예제들은 각각 1 개에서부터 8 개의 요소를 갖는 튜플을 나타낸다. 튜플의 각 요소들의 타입은 각기 다를 수 있다.

// 4개의 요소를 갖는 튜플 var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());

또한 튜플은 Tuple.Create 라는 이름의 static 메소드를 통해서도 생성될 수 있으며, 이러한 경우 각 요소들의 타입은 C# 컴파일러에 의해서 유추된다.

// 4개의 요소를 갖는 튜플 var tuple = Tuple.Create("foo", 123, true, new MyClass());
버전 ≥ 7.0

C# 7.0 이후부터는, ValueTuple 을 이용하여 튜플을 보다 손쉽게 생성할 수 있다.

var tuple = ("foo", 123, true, new MyClass());

또한 보다 쉬운 분해 (decomposition) 를 위해 각 요소에 대한 이름을 부여할 수도 있다.

(int number, bool flag, MyClass instance) = (123, true, new MyClass());
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts