본문 바로가기
[ Program ]/c#스터디

37.DateTime,static

by 관이119 2021. 10. 9.

프로그램을 만들면서 상당히 자주 사용되는 형식과 컨트롤등을 몇가지 알아보고 넘어가자.

DateTime 는 날짜 형식인데, 일반적인 변수처럼 사용하면 된다.

단, DateTime 은 클래스이기때문에 new 로 객체를 생성해서 사용해야한다.

 

그림1

 

DateTime 변수를 하나 만들고 우클릭으로 정의로 이동해서 내용을 살펴보자.

 

그림2

 

그림3

 

내부에 들어가보면 수많은 생성자와 함수들이 있다.

그런데 함수중에 보면 static 이 붙은 함수들이 있다.

이함수들은 객체화 시키지 않아도 사용할수 있다는 의미이다.

 

그림1처럼 dt 라는 새로운 변수를 지정하고 new 로 새로운 객체를 만들었다.

그리고 dt.AddDays(10); 를 해주면 dt 의 기본값에 10일을 더해주게 된다.

이런형태가 기본적인 클래스를 객체로 만들고 객체에 속해있는 함수를 호출하는 형태인데 이외에 static 이 붙은 함수같은경우는 new 로 객체를 생성하지않고도 DateTime.Parse("2021-06-03"); 처럼 따로 객체를 생성하지않고도 바로 Parse 라는 함수를 호출해서 사용할수 있다는 것이다.

 

다시 정리해보자.

DateTime 클래스내에서 AddDays 라는 일반함수는 아래예제1 처럼 new 로 객체를 만들고 그객체에서 함수를 불러써야한다.

<예제1>

DateTime dt = new DateTime();

dt.AddDays(10);

 

하지만 static 이 붙은 함수인 Parse 라는 static 함수는 new 로 객체를 생성하지않고도 바로 예제2처럼 호출해서 사용할수 있다.

<예제2>

DateTime.Parse("2021-06-03");

 

두개의 차이는 클래스는 앞에서 말한것처럼 new 로 생성하면 메모리에 사용할수 있는 상태로 올려주지만 static 은 바로 메모리에 올라가있다는것이다.

모두다 static 로 하면 객체를 만들필요도 없고 편할것같은데 왜 static 으로 다만들지 않을까.

잠시만 생각해보면 알수있을텐데 당연히 PC의 메모리가 무한하지않기때문이다.

만약 우리가 new 로 객체를 생성하여 함수를 사용하고 생성된 객체가 더이상사용될일이 없어지고 시간이 지나면 가비지컬렉터가 스스로 메모리를 사용가능한 상태로 돌려준다.

하지만 static 으로 만들게 되면 해당 프로그램이 끝날때까지 메모리상의 공간을 계속 점유하고 있게 된다.

 

즉, 너무 큰것들을 계속 static으로 사용하다보면 더이상 메모리에 쓸 공간이 없어지고 메모리를 사용해야하는 모든 프로그램들이(자신포함) 제대로 실행되지않거나 다운되게 된다.

그래서 나는 개인적으로 static 을 잘 사용하지않는데 일반적으로는 사용하지않고 공용으로 사용되어야하는 변수등에는 가끔 사용한다.

클래스가 여러개 만들어지고 프로그램이 복잡해지면 확실히 static 으로 사용하면 편한데 잘생각해서 사용하자.

 

그리고 위에 DateTime 클래스에서 {get;} 이라고 붙어있는 함수도 아닌것이 있는데 이것들은 속성(프로퍼티) 라고 부른다.

지금은 일단 일반적인 변수랑 같은것이라고 생각하자.

자 그럼 다시 그림 2 와 3을 보면 내가 어떤 함수들을 사용할수 있고 어떻게 사용할수 있을지 보일것이다.

참고로 자주사용된는것들은 AddDays 함수나 DateTime.Now 같은것들이 있다.

여러가지를 테스트하고 써보자.

 

이렇게 만들어진 날짜 객체는 출력할때 날짜 포맷을 지정해줄 수 있다.

날짜 포맷은 구글에서 검색하면 많은데 하나 올려두겠다.

https://nowonbun.tistory.com/560

 

[C#] 날짜 포맷

안녕하세요. 명월입니다. 이 글은 C#에서 날짜 포맷에 대한 글입니다. 이전에 제가 숫자 타입에 콤마와 자릿 수등을 설정하는 방법에 대해 설명했습니다. 링크 - [C#] 숫자 포맷 (돈 표시 및 소수점

nowonbun.tistory.com

 

위 날짜 포맷을 어떻게 사용하는지 살펴보자.

그림4

 

사용법은 그림4처럼 간단하다.

날짜 객체를 문자로 변경하면서 해당 날짜 포맷을 지정해주면 된다.

중간에있는 - 나 : 같은 문자들은 원하는대로 바꿔도 잘 작동한다.

그림5

 

컨트롤중에 그림5처럼 날짜를 표시해줄수 있는 컨트롤도 있다.

해당컨트롤도 사용해보자.

 

그림6

 

 

한가지 팁은 그림6과같이 Format 을 Custom 으로 바꿔주고 CustomFormat 에 원하는 형식을 입력해주면 컨트롤에 보이는 날짜도 원하는 형태로 변경되게 된다.

그리고 컨트롤의 값을 받아올때는 textbox 는 text 로 받아왔지만 DateTimePicker 같은 경우는 위에보이는것처럼 .Value로 값을 받아올수 있다.

 

 

 

***숙제 :  아래 그림처럼 선택된 프로젝트들의 총기간과 잔여일자를 구하는 프로그램을 만들어보자. 잔여일자 기준은 오늘날짜 부터 프로젝트 종료일까지이다.

 

'[ Program ] > c#스터디' 카테고리의 다른 글

39.property(속성)  (0) 2021.10.09
38.const/enum/struct  (0) 2021.10.09
36.클래스(전역변수/지역변수), 실제사용법  (0) 2021.10.09
35.클래스(생성자오버로딩)  (0) 2021.10.09
34.클래스(생성자,소멸자)  (0) 2021.10.09

댓글