메이플스토리 [기초] 2. 프로그래밍 기초 문법 (자료형, 제어문)
컨텐츠 정보
- 22 조회
- 0 추천
- 0 비추천
-
목록
본문
작성자: 작성자 없음
안녕하세요 pirrtuq입니다
이번 주제는 프로그래밍 기초 문법입니다.
이 주제에서는 변수형, 반복문, 조건문, 함수(+인자)와 그 외 자잘한 것을 배울거고요
이번 시간에는 변수형과 조건문에 관해 배우겠습니다.
만약 이번 강의에서 소개할 내용을 이미 다 알고 계신다면 이 강의는 스킵하셔도 좋습니다
이번 시간에 필요한 것: 중학교2학년 이상의 수학지식
목차
변수형 부터 시작하겠습니다.
변수형은 자료형이라고도 부릅니다.
[이미지 링크 만료]
출처 - http://blog.naver.com/yalli42/30131096341
원래는 제가 표로 예쁘게 정리해놨었는데 쓰다가 날아가서 빡쳤습니다 그래서 그냥 퍼왔음
어쨌든 사실 결론은 이게 답니다.
근데 이 표만 띡 던져놓으면 뭔소린지 모르실테니 설명을 드릴게요.
일단 프로그래밍 언어에서는 변수 라고하는 게 있습니다.
비유를하자면 어떤 밀폐용기가 있습니다. 이 밀폐용기를 변수라고 부르고, 이 밀폐용기 안에는 내용물이 들어갈 수 있습니다. 밀폐용기가 부서지지않고 채울 수 있는 크기까지만요.
이 밀폐용기 안에 넣는 내용물이 값이고, 이 밀폐용기가 부서지지 않고 채울 수 있는 크기가 변수의 크기입니다.
또 밀폐용기에는 여러 가지 종류가 있어서, 어떤 밀폐용기는 숫자만 담을 수 있고 어떤 밀폐용기는 문자만 담을 수 있고, 각각의 크기도 다릅니다.
표현하는 방식을 알려드리겠습니다.
<자료형> <변수 이름> = <값>; 입니다
Ex) int A = 4;
A라는 변수는 자료형이 int이고 값은 4이다.라는 뜻입니다.
뒤의 세미콜론(";")은 반드시 있어야합니다 우리가 글 쓸때 온점(".")과 같은 역할입니다. 아니 이런거 파고들기 시작하면 한도끝도없으니 걍 생략하고 설명만 드리겠습니다 어처피 우리는 순수학문이 아니라 응용학문으로 먹고살꺼니깐요
여튼 지금 이단계에서 중요하게 여기는 점은, 자료형이 int라는 것입니다
int에는 (대충)-21억~(대충)21억정도까지의 수가 들어갈 수 있고, 숫자만 들어갈 수 있습니다.
[이미지 링크 만료]
이 예시를 통해 이 표를 다시 보자면,
byte는 정수형태의 -128~128사이의 값이
short에는 정수형태의 -32768~32768 사이의 값이
int에는 정수형태의 대충 -21억~21억 사이의 값이
long에는 정수형태의 뭐 저렇게까지 큰 숫자 이상을 넘어갈 일이 별로 없으니 생략하죠 눈아픔;
다만 아주 중요한 점이 있습니다.
long a = 9999999999999;
이렇게 넣어주면 오류납니다.
long a = 9999999999999L;
이라고 넣어줘야 오류가 안 납니다.
long형은 지금 프로그래밍 언어상에서 int와 혼용해서 사용하고 있습니다. 따라서 숫자 뒤에 L을 붙여서 최대크기가 int형보다 커다란 long형이라는 것을 알려줘야 합니다.
뒤에 L을 붙여줬다 하더라도 문자로 들어가는 건 아니고L앞의 숫자만 들어가니 걱정 마십시오.
또한
double과 float는 각각 실수 형태의 숫자를 나타낼 수 있습니다.
float보다 double이 표현할 수 있는 범위는 더 크니 알아두시구요 메이플 소스 내에서는 소숫점자리까지 그렇게 세세하게 따지는 시스템은 없습니다 대충 실수를 표현할 수 있다 정도만 아시면 됨.
그리고 특이한 자료형이 세 가지가 있습니다. (위의 표에는 제시되어있지 않습니다)
char과 boolean입니다
char은 문자를 표현할 수 있습니다.
boolean은 참과 거짓을 판단하는 자료형입니다.
그리고 또 필요한 건 String입니다.
String은 문자열을 표현할 수 있습니다
일단 중요도 순으로 말하자면 char <<<<<<<<<<<<<<<<<<<<<<<<<<<< String <= boolean 입니다.
char은 문자 단 한개! 만을 값으로 가질 수 있기 때문에 아무짝에도 쓸모 없습니다 제가 프메 팩들 다 뒤져본 결과 char 자료형 쓴 거 한두 문장밖에 발견못했고 그 줄에서 한번 쓰고 버렸음
String은, 크기가 유동적입니다. 딱히 크기에 제한은 없고 그냥
String a = "가나다라마바사아자차카타파하"
이렇게 쓰면 a에 가나다라마바사아자차카타파하 라고 들어갑니다.
(사실 구체적으로 따지면 String은 자료형이아니라 클래스긴한데 걍 넘어갈게요 자료형이라고 알고 계시는게 더 편함)
그리고 boolean은 참/거짓을 따지는 자료형이라고 했습니다.
boolean의 값에는 True나 False 둘 중 하나밖에 안들어갑니다.
TRUE라고 쓰셔도되고 FALSE라고 쓰셔도 됩니다.
true라고 쓰셔도 되고 false라고 쓰셔도 됩니다.
1이라고 쓰셔도 되고 0이라고 쓰셔도 됩니다.
중요한 건 얘가 반드시 흑백만을 가리는 공명정대한 잣대라는 겁니다 그리고 이런 논리적 참/거짓연산은 이 강의에서 배울 조건문에서 완전 중요하기 때문에 둘을 하나로 묶었습니다.
이렇게 자료형 부분은 다 배웠습니다. 이제 소스를 직접 보면서 예시로 삼아보죠
제가가진 팩 내의 MapleMonster.java 내의 맨 윗부분을 가져왔습니다
[이미지 링크 만료]
여기서 mp는 int형, hp와 finalmaxhp는 long형, bossreal은 boolean형, venom_counter은 byte형입니다.
자 이제 왜 이 변수들의 자료형을 각각 다르게 해 놨을지를 고민해 봅시다.
일단 여기서 mp는, 이 java파일은 몬스터에 관한 정보이기 때문에 몬스터의 mp입니다.
여러분 메이플에서 몬스터 mp가 (대충)+21억(=int형의 최대크기)넘는 것 본 적 없으시죠?
실제로 많아봐야 10만 아래입니다. 딱히 그렇게 클 필요 없는 변수에 커다란 자료형을 넣어줄 필요가 없죠 그래서 int입니다.
venom_counter은, 도적 시프같은 애들이 몬스터에게 베놈 카운터를 축적해 놓은 숫자입니다.
많아봐야 10 이하일테니 int형 같이 커다란 자료형을 부가해줄 필요가 없죠 그래서 byte입니다.
long형은, 요즘 메이플 추세에도 중요한 영향을 끼치고 있는데 최근 루시드, 스우, 데미안 등등의 보스의 체력은 조 단위 입니다.
그런데 int형의 최대크기는 21억입니다. 표현할 수가 없죠. 그래서 long형입니다.
bossreal은, 보스가 지금 뒤졌는지 안뒤졌는지를 판단해주는 비슷한겁니다. 그냥 finalmaxhp가 존재하는, 즉 체력이 21억 이상인 보스인지 판별해주는겁니다.
21억 이상인지 아닌지는 21억 이상인가? 에 대한 참 인지 거짓 인지만 판별해주면 되죠 그래서 boolean입니다.
다음은 제어문입니다. 제어문은 if문, switch-case문만 다루겠습니다. 솔직히 그거말고는 제어문 별로 안씀
우선 if문 입니다.
if (조건 내용)
{
조건 만족 시 (= 조건 내용의 결과값이 TRUE일 경우)
수행할
내용들~~
}
소스와 함께 예시를 들어보겠습니다.
[이미지 링크 만료]
소스 해석은
만약(if) stats.getNoSkills() 의 값이 0보다 크면(stats.getNoSkills() > 0)
{ (괄호열고)
어쩌구저쩌구내용들을 실행한다(usedSkills = new HashMap<Integer, Long(); )
} (괄호닫고)
입니다 끝임.
여기 이 If문에서 중요한 것은,
if (조건문)
{
}
이 안의 조건문의 결과가 참이면 { } 안의 내용을 실행하겠다는 것입니다. 이게 뭐와 연관되냐면 바로 boolean과 연관이 깊습니다.
예를 들어보죠.
boolean A = false;
if ( A )
{
실행할내용~~~~
}
이러면 조건문의 결과는 A이고, A는 false이니 실행되지 않습니다.
또 중요한 것들이 있습니다. 바로 연산입니다.
if (a > b) -> a가 b보다 큰가?
if (a >= b) -> a가 b보다 크거나 같은가?
if (a < b) -> a가 b보다 작은가?
if (a <= b) -> a가 b보다 작거나 같은가?
if (a == b) -> a와 b가 같은 값인가?
if (a != b) -> a과 b가 다른 값인가?
if (!a) -> a의 반대값은 참인가? //반드시 a는 boolean 타입이어야 함.
if (a) -> a값은 참인가? //반드시 a는 boolean 타입이어야 함.
완전 개중요합니다 반드시 다외우십시오 특히 같은가? 라는 질문은 '='이 아니라 '=='입니다 =으로 쓰면 오류남.
또 if문에는 else, else if라는 구문과, 연산자 두 개가 더 있습니다.
else if는, 앞에 나열된 if(또는 else if)의 조건들 이외의 경우를 쓰는데 많이 쓰진 않습니다.
예시 :
int a = 5;
if (a > 5)
{
//내용1
} else if (a < 3)
{
//내용2
}
이렇게 코드를 짜게 되면 만약 a가 5보다 큰 경우 //내용1 을 실행하고, a가 3보다 작은 경우 //내용2를 실행합니다.
그리고 그냥 else 구문이 있습니다. 얘는 앞에 서술했던 if의 반대를 말합니다.
예시 :
int a = 5;
if (a > 5)
{
//내용1
} else
{
//내용2
}
이렇게 코드를 짜게 되면 만약 a가 5보다 큰 경우 //내용1 을 실행하고, a가 그 반대인 경우 //내용2를 실행합니다.
또한 연산자 두 개를 설명드리겠습니다.
if (조건1 && 조건2)
{
//조건1과 조건2를 동시에 만족할 시 이 부분 명령 실행
}
if (조건3 || 조건4)
{
//조건3이나 조건4 중에서 하나라도 만족 시 이 부분 명령 실행
}
이런 식입니다.
src소스로 예시를 들어보죠
첫 번째 예시입니다
[이미지 링크 만료]
여기서, from.getParty()값이 null이 아닐 경우에 (if (from.getParty() != null)
attacker = new 어쩌고저쩌고 부분을 실행하고,
그게 아닌 반대조건일 경우 (} else {)
attacker = new SingleAttacker어쩌고저쩌고를 실행합니다.
[이미지 링크 만료]
두 번째 예시는 연산자 예시입니다.
만약 damage 변수의 값 <= 0 이 참이거나 isAlive()의 값의 반댓값이 참이면
return 명령어를 실행합니다.
다음은 switch-case문 입니다.
얘는 if문보다 좀 더 간단합니다.
형식부터 알려드리자면
switch (AAA)
{
case 1:
//실행1
break;
case 2:
//실행2
break;
case 3:
//실행3
break;
default:
//실행4
break;
}
AAA라는 변수의 값이 1일경우(case 1) //실행1을 실행하고
값이 2일경우(case2) //실행2를 실행하고
값이 3일경우(case3) //실행3을 실행하고
그 외의 값일경우(default) //실행4를 실행합니다.
주의하실점은 break;를 꼭 붙여주셔야 합니다.
안붙이게 되면 break를 안 붙인 해당 구문 이하부터 break;가 나타날때까지 사이의 모든 조건문에서 해당 실행코드가 실행됩니다. 이걸 써먹을 수 있는 경우도 있고 프메 팩에서 스킬이나 유저ID따지는 부분관련해서는 많이 쓰이는데 우리가 응용할 때는 대부분은 없으니 그냥 붙입시다.
볼 것 없이 바로 예시로 들어가겠습니다
[이미지 링크 만료]
quest.getStatus()의 값을 따져볼 때,
그 값이 1이면 client.getSessioin().write(MainPacketCreator.startQuest(this, quest.~~~~~~~~~~~~~~~~~~어쩌구저쩌구를 실행합니다
그 값이 2이면 어쩌구저쩌구를 실행합니다.
그 값이 0이면 어쩌구저쩌구를 실행합니다.
이 switch문에는 default값이 없네요 값이 0, 1, 2가 나올 때만 따지는 건가 봅니다.
이번시간에는 프로그래밍 기초 문법 중 자료형, 조건문에 대해 배웠습니다
다음시간엔 반복문(while, do while, for문)에 대해 배우겠습니다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이번내용은아주중요합니다
솔직히 그닥 안어렵고... 그냥 사람들 쓰는 말이나, 수학에 나오는 함수랑 비슷하잖아요? 소스 직접보면 이해가 빠릅니다
그리고 저번에 썼던 강의의 사진자료가 절반정도 날아갔는데, 지금 제가 수정 타이밍을 놓쳐서... 다음 강의때에 뒷부분에 재업하던가 하겠습니다 ㅈㅅㅈㅅ
+20170626 AM10:12
HTML소스 입력기있길래 목차 만들어봤었는데 문서를업로드할때는 허가된 태그 이외엔 다 제거되나보네요 하긴 이래야 정상이긴 함
목차 링크는 무시해주시면 되겠습니다
+20160626 AM10:33
switch-case문 break문 잘못 설명한것 수정.
-
등록일 00:20
-
등록일 08.20
-
등록일 08.10VMware 네트워크 IP 설정댓글 2
-
등록일 08.08