시스템 사양 선택 | 1번 |
---|
3번째 글이 늦었네요.
그동안 아이디어패드 트랙패드 잡는다, dw1820A 설치한다, 꽤 잡일에 집중하느라 정작 글을 쓰지 못했습니다.
오늘은 저번 글에서 대충 넘어갔던 그렇지만 꼭 알아두면 좋은 몇 가지 팁을 집고 넘어가고, 아마 빈도로 보면 가장 많이 써야되는 WriteLine 함수를 알아보도록 하겠습니다. 일단 아래는 저번에 공부했던 Hello Wrold 입니다.
using System;
namespace Hello
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
자 위의 구조는 전형적인 콘솔 어플리케이션의 메인함수의 구조입니다.
일단 namespace는 우리가 개발하고자 하는 모든 코드를 아우르는 가장 큰 구분이라고 보시면 됩니다.
즉 가장 상위의 객체 정도라고 보시면 되고요(저는 전문 프로그래머가 아니기 때문에 설명에 실수가 있을 수 있습니다.^^)
class는 이 namespace에 속한 여러가지 기능을 수행하는 모듈로 생각하시면 됩니다.
즉 namespace하나에 class는 여러 개가 정의될 수 있습니다.
여기서는 class가 Program 하나인데요. 사실 웬만한 프로그램들은 class가 여러 개가 됩니다.
일단 여기서는 이 프로그램 하나에 집중하기로 하고요.
다음은 어쩌면 오늘 글에서 가장 중요한 부분일 수 있는 static void Main()함수 입니다.
프로그램은 항상 여기서 시작된다고 보시면 되고요.
다른 class는 없어도 되지만 여기 Program class와 static void Main 함수는 없으면 절대로 안되는 항목들입니다.
자 그럼 static은 어떤 의미일까요? Main 함수의 성격을 규정해주는 것인데요. 앞서 말씀드린데로 프로그램이 시작되고, 일단 시작되면 프로그램이 끝날 때까지 동일한 메모리를 사용한다는 의미입니다. 쭈~~~욱. 그리고 다른 함수와 달리 어떤 함수도 static 함수를 호출할 수 없답니다.
https://www.csharpstudy.com/CSharp/CSharp-static.aspx
그리고 void 는 이 함수가 리턴하는게 없다는 뜻입니다. 당연히 그렇겠죠? 이 함수가 끝나면 프로그램이 끝나는 것이니까요.
다음은 이 메인함수의 매개변수 args 입니다. 특이한 것은 args가 string 배열이라는 점이죠.
말 그대로 몇 개의 string 함수를 매개변수로 쓸 수 있다는 겁니다.
여러분의 이해를 돕기위해 위 프로그램의 변종을 한 개 만들어 보겠습니다. (사실 다 그게 그것입니다.)
첫번째 예제 : args를 입력 파일로 받는 예제입니다.
dotnet new console -o ArgsInputFile (프로젝트를 생성했습니다.)
아래는 코드입니다.
코드를 살펴보면
첫번째 args.Length는 args라는 배열의 갯수를 의미합니다.
즉 args라는 배열의 갯수가 1개 이상이면 if문을 수행하고, 갯수가 0이면 else문을 수행합니다.
if문은 args의 첫번째 배열, 즉 args[0]를 화면에 나타냅니다.
그리고 매개변수의 갯수를 세서 화면에 또 찍습니다.
만약 매개변수 갯수가 '0'이면 매개변수가 입력되지 않았다는 메세지를 찍습니다.
자 화면을 실행하면 아래와 같습니다.
dotnet run 이후에 매개변수를 입력하면 위와 같이 나타내 주는 것입니다.
우리가 흔히 콘솔명령어 뒤에 오는 각 종 옵션들이 이렇게 처리되는 것이겠죠?
자 위 예제에서 제어문 빼고 가장 뻔질나게 나오는 함수가 WriteLine 함수입니다.
보통 비쥬얼베이직이나 C# 을 사용하신다면 메세지박스에 해당하는 함수일 것 같습니다.
디버깅할때 정말 지겹게 쓰는 함수죠. 그럼 본격적으로 이 WriteLine 함수에 대해 알아보겠습니다.
위의 내용은 함수의 원형이라고 할 수 있을 것이고요. 이것만 보면 이해가 안되니 아래를 살펴보시죠.
아래 예제들은 인터넷에서 주워온 것들이라 출처를 잘 모르겠습니다. 하여간 제가 만든 것은 아닙니다.
자 앞의 다른 내용은 일단 건너띄고 WriteLine문 부터 보시죠.
일단 첫번째 WriteLine문은 간단합니다. 그냥 " " 로 표현된 문장을 찍는 것이죠.
그리고 두번째 문도 드럽게 길기는 하지만 사실 아주 간단합니다.
먼저 함수 내용의 " " + " " + ...+" "는 모두 함수 원형에서 말하는 string Format에 해당합니다.
이 String Format에서 주의 깊게 봐야할 부분은 {0:X}부분입니다.
그냥 {0}으로 쓸 수 있는데요. 0에는 숫자를 넣습니다. 예를 들어 내가 " "안에 2개의 숫자형(Decimal) 객체를 출려하고 싶다면
"첫번째 객체는{0}, 두번째 객체는{1}이다" O1,O2 이런식이 됩니다.
제가 예를 들은 코드에서 두번째 WriteLine함수를 보면
와 같습니다. 즉 출력할 객체가 1개 이니 Format 내에 매개변수를 표시하는 부분이 {0}이 된 것이죠.
자 다시 아래 예제를 보시죠
여기에서는 {0:C} {0:D} {1:E} {1:F} 등등이 나옵니다. 그리고 끝에 출력할 두 개의 객체가 있습니다.
첫번째 {0:C}는 첫번째 객체인 -123을 화폐단위로 표시하라는 의미이고요
두번째{0:C}는 첫번째 객체인 -123을 Decimal형으로 나타내라는 의미입니다.
세번째{1:E}는 두번째 객체인 -123.45f를 Scientific으로 나타내라는 의미입니다.
자 나머지는 쉽게 이해가 되시겠죠?
아래의 WriteLine문은 약간 변형이긴 한데요. 원리는 위와 같습니다.
코드를 실행하면 결과가 아래와 같이 나타납니다.
참고로 앞의 글에서 프로젝트 생성하는 내용을 잘 숙지하셨다면 이 예제 코드를 만드시는 것도 어렵지는 않을 것 같습니다.
위의 내용은 아주 전형적인 WriteLine 문이구요. 아래는 쬐금 다른 예제입니다.
일단 아래 예제에서 먼저 변수를 찾아보겠습니다.
먼저 double 형인 tipRate가 있군요.
지면관계상 private나 const는 다음에 설명하기로 하겠습니다.
그리고 역시 double형인 billTotal이 있습니다.
마지막으로 double형인 tip이 있는데 billTotal * tipRate로 정의되어 있네요.
예제 코드의 마지막 4개 줄을 보시죠.
4개줄의 첫번째 string Format은 $으로 시작합니다. 의미는 Format안에 직접 변수를 쓰겠다는 것입니다.
그래서{}안에 변수명인 billTotal이 들어 있는 것이죠. {billTotal, 8:c}와 같이 말이죠
그럼 뒤의 8은 무슨 의미일까요? 그건 8개의 자리를 차지한다는 말입니다. c는 위에서 언급한 바와 같이 curruncy형으로 나타내라는 말이겠죠?
세번째 줄이 좀 난해한데요. ("").PadRight 때문입니다. 일단 ""은 string이기 때문에 string 객체의 멤버함수를 사용할 수 있습니다.
따라서 ("").PadRight라는 멤버함수에 전달하는 매개변수가(24,'-')입니다. 의미는 오른쪽으로 -를 24개 찍으라는 것입니다.
예제 코드 밑에 출력파일이 있으니 참고하시면 될 것 같네요.
참 \t 는 탭을 나타내는 것입니다.
using System;
public class TipCalculator
{
private const double tipRate = 0.18;
public static void Main(string[] args)
{
double billTotal;
if (args.Length == 0 || ! Double.TryParse(args[0], out billTotal))
{
Console.WriteLine("usage: TIPCALC total");
return;
}
double tip = billTotal * tipRate;
Console.WriteLine();
Console.WriteLine($"Bill total:\t{billTotal,8:c}");
Console.WriteLine($"Tip total/rate:\t{tip,8:c} ({tipRate:p1})");
Console.WriteLine(("").PadRight(24, '-'));
Console.WriteLine($"Grand total:\t{billTotal + tip,8:c}");
}
}
/*
>tipcalc 52.23
Bill total: $52.23
Tip total/rate: $9.40 (18.0 %)
————————————
Grand total: $61.63 */
제 굳이 두번째 예제를 설명한 것은 첫번째 예제에서는 숫자형 변수만을 나타낼 수 있습니다.
즉 피치 못하게 문자형 변수를 출력해야하는 경우는 첫번째 예제로는 불가능하다는 말이죠.
그럴때는 두번째 예제를 쓰면 됩니다.
오늘은 여기까지고요. 다음은 간단히 class에 대해 알아보도록 하겠습니다.
감사합니다.
topanga님의 새글 알림을 받으실려면 구독
"님의 댓글"
이 댓글을 신고 하시겠습니까?
제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|
오랜만에 심야 영화 예매했습니다.(feat.베테랑2) +6 | 잠퉁이 | 24.09.2122:24 | 46 |
남자라면 알아두면 정말 유용한 차급의 세계 +1 | bluesaza | 24.09.2110:22 | 153 |
내가 돌아왔다. +1 | 광호 | 24.09.2201:12 | 130 |
Mactopia | 24.09.2318:17 | 63 | |
아이브경 | 24.09.2309:12 | 56 | |
아이브경 | 24.09.2309:12 | 85 | |
아이브경 | 24.09.2309:12 | 107 | |
아이브경 | 24.09.2309:12 | 71 | |
아이브경 | 24.09.2309:12 | 52 | |
아이브경 | 24.09.2309:12 | 39 | |
아이브경 | 24.09.2309:12 | 21 | |
아이브경 | 24.09.2309:12 | 37 | |
아이브경 | 24.09.2309:12 | 41 | |
아이브경 | 24.09.2309:12 | 40 | |
Mactopia | 24.09.2223:42 | 49 | |
Mactopia | 24.09.2222:57 | 52 | |
광호 | 24.09.2201:12 | 130 | |
잠퉁이 | 24.09.2122:24 | 46 | |
bluesaza | 24.09.2110:22 | 153 | |
복스렌치 | 24.09.2014:59 | 59 | |
복스렌치 | 24.09.2014:49 | 45 | |
Mactopia | 24.09.1921:52 | 62 | |
Mactopia | 24.09.1919:43 | 99 | |
복스렌치 | 24.09.1912:18 | 58 | |
복스렌치 | 24.09.1912:16 | 41 | |
Mactopia | 24.09.1912:02 | 88 | |
Mactopia | 24.09.1911:40 | 79 | |
아이브경 | 24.09.1911:15 | 48 | |
아이브경 | 24.09.1911:15 | 68 | |
아이브경 | 24.09.1911:15 | 26 | |
아이브경 | 24.09.1911:15 | 67 | |
아이브경 | 24.09.1911:15 | 57 | |
아이브경 | 24.09.1911:15 | 42 | |
아이브경 | 24.09.1911:15 | 53 | |
아이브경 | 24.09.1911:15 | 40 | |
아이브경 | 24.09.1911:15 | 36 | |
Mactopia | 24.09.1821:13 | 64 | |
bluesaza | 24.09.1811:38 | 143 | |
복스렌치 | 24.09.1810:24 | 50 | |
소마엠 | 24.09.1803:48 | 169 | |
팜랩 | 24.09.1714:09 | 24 | |
달쇠 | 24.09.1708:22 | 34 | |
잠퉁이 | 24.09.1703:51 | 70 | |
잠퉁이 | 24.09.1613:02 | 81 | |
잠퉁이 | 24.09.1515:17 | 113 | |
해킨독립 | 24.09.1516:29 | 65 | |
복스렌치 | 24.09.1513:19 | 48 | |
도움환영 | 24.09.1502:52 | 177 | |
잠퉁이 | 24.09.1405:20 | 193 | |
잠퉁이 | 24.09.1321:15 | 129 | |
해킨독립 | 24.09.1320:42 | 83 | |
Mactopia | 24.09.1316:41 | 81 | |
도움환영 | 24.09.1311:03 | 114 | |
아이브경 | 24.09.1309:31 | 130 | |
아이브경 | 24.09.1309:31 | 95 | |
아이브경 | 24.09.1309:31 | 70 | |
Mactopia | 24.09.1218:21 | 119 | |
Mactopia | 24.09.1218:02 | 87 | |
잠퉁이 | 24.09.1216:32 | 107 | |
bluesaza | 24.09.1217:02 | 157 | |
Mactopia | 24.09.1211:54 | 113 | |
아이브경 | 24.09.1210:30 | 66 | |
아이브경 | 24.09.1210:30 | 87 | |
아이브경 | 24.09.1210:30 | 82 | |
아이브경 | 24.09.1210:30 | 45 | |
아이브경 | 24.09.1210:30 | 59 | |
Mactopia | 24.09.1117:40 | 136 | |
Mactopia | 24.09.1117:39 | 106 | |
박사 | 24.09.1109:37 | 136 | |
아이브경 | 24.09.1109:33 | 68 | |
아이브경 | 24.09.1109:33 | 167 | |
아이브경 | 24.09.1109:33 | 106 | |
아이브경 | 24.09.1109:33 | 65 | |
아이브경 | 24.09.1109:33 | 57 | |
아이브경 | 24.09.1109:33 | 46 | |
아이브경 | 24.09.1109:32 | 52 | |
Mactopia | 24.09.1019:12 | 113 | |
코끼리코 | 24.09.1017:54 | 110 | |
Mactopia | 24.09.0915:25 | 139 | |
Mactopia | 24.09.0915:24 | 53 | |
아이브경 | 24.09.0911:54 | 84 | |
아이브경 | 24.09.0911:54 | 132 | |
아이브경 | 24.09.0911:54 | 64 |