[MySQL] 사용자 계정 생성/외부접속 허용

데이터베이스로그 2011. 3. 3. 23:14



자바나 다른 프로그래밍 언어에서  MySQL 데이터베이스에 접속하기 위해서는 외부에서 접속이 허용된 
계정이 있어야 한다.  외부접근 관리는 mysql 스키마의  user 테이블을 통해 관리가 되는데,  user 테이블의 중요한 
컬럼으로  Host, User, Password 이 있다.   특정 호스트(도메인 또는 ip) 의 어떤 사용자가 어떤 비밀번호를 사용하여 
데이터베이스에 접근할 수 있는지에 대한 정보를 저장한다. Host 컬럼에는 도메인 이나 IP 또는 % 가 들어갈 수 있다.
%는 와일등카드이며, 불특정 다수의 호스트를 의미한다. 
사용자 계정을 생성하고, 사용자 데이터베이스를 생성 후 그에 대한 접근권한을 설정하는 과정을 알아보자. 

1. 사용자 생성 
mysql> CREATE USER 'javauser'@'localhost' IDENTIFIED BY 'your_password';
위 명령은 이름이 javauser이고 비밀번호가 your_password인 로컬호스트 사용자를 생성한다. 이렇게 생성된 사용자는
로컬에서 밖에 접속이 되지 않는다. 외부에서 접속하기 위해서는 허용 도메인을 갖는 동일한 이름의 사용자를 하나더
생성해 주어야 한다. 
mysql> CREATE USER 'javauser'@'%' IDENTIFIED BY 'your_password';


2. 데이터 베이스 생성
mysql> CREATE DATABASE javauser;
javauser 라는 데이터베이스를 생성한다.


3. 데이터 베이스에 대한 접근권한 설정
mysql> GRANT ALL PRIVILEGES ON javauser.* TO 'javauser'@'localhost' WITH GRANT OPTION;
javauser 데이터베이스에 대한 모든 권한(javauser.*)을 로컬호스트 사용자 javauser 에게 부여한다.
로컬호스트 사용자와 외부접근 사용자는 별도의 사용자처럼 다뤄지기 때문에 외부접근 사용자에게도 권한을
부여해 주어야 한다.
mysql> GRANT ALL PRIVILEGES ON javauser.* TO 'javauser'@'%' WITH GRANT OPTION;


4. 계정에 대한 권한설정을 확인한다.
mysql> SHOW GRANTS FOR 'javauser'@'localhost';

CREATE USER,  GRANT 명령을 사용하는 대신,  INSERT 와 UPDATE를 사용하여 직접 GRANT 테이블을 수정할 수도 있다. 
이렇게 할 경우 다음과 같은 명령을 사용해 변경내용을  적용해 주어야한다.  
(CRETAE USER 명령에서 비밀번호는 password함수를 사용하여 직접 암호화 해주어야 한다. CREATE USER 명령은 자동으로
암호화 해준다. )
 FLUSH PRIVILEGES



'데이터베이스로그' 카테고리의 다른 글

[MySQL] 사용자 계정 생성/외부접속 허용  (0) 2011.03.03

ESL(cafe #274)

학습로그/영어 2011. 3. 2. 23:34



Famous Authors Emily Dickinson:

poet
- poet is a person who writes poems, piece of writing that  describe often emotion, feelings.  

rhyme
- have same sounds at the end of each line or sentence  
   ex)   roses are red / violets are blue / sugar is sweet and so are you
          
prolific
- she wrote a lot
ex) she was a prolific author :

recluse
- is a person who doesn't like to  interact or communicate with other people.
someone wants to be by them self
ex) she was recluse

eccentric
- is a person who behaves in strange ways. other people don't understand them
ex) she became more and more eccentric

ahead of (one's) time
- you are doing things in ways that innovative. 
ex) as a poet, Dickinson was definitely ahead of her time.


poem
look back with kindly eye
he doubtless did his best
how softly sinks his trembling sun in human nature west



the Lindbergh kidnapping:

to kidnap
- take someone(often child) and demand ransom or large amount of  money

ransom
- money 

sensational
- all of media, everyone became interesting in kidnapping

fingerprint

to be sentenced to death
- he was to be killed by government for his crime

to confess
- he never said "yes i did it". 


difference of sure / of course / certainly : yes, without a doubt
sure: rather informal to mean yes. it is used when person talk is not excited about what he or she agree to   
of course: it is often used when the person answering is answering the question that the questionary really knows the answer too. he expects certain answer.
certainly: a little more formal than sure or of course. it's more likely to be found in writing or formalbusiness situation
,
either : also not, one or the other(one between two things)
ex) there was no food in the kitchen. and there were no dishes either
ex) I would wear either of them. 


Imma be : i am going to be (informal slang) 
compressed speech. ex) is he busy? (is busy?)
be more found among african american speaker of english 

 


'학습로그 > 영어' 카테고리의 다른 글

[마인드맵] My House  (0) 2012.03.14
[마인드맵] Wedding  (0) 2012.03.06
영어를 빨리 배우는 방법  (0) 2011.04.12
ESL(cafe #274)  (0) 2011.03.02
[EE]Hitch1  (0) 2011.02.19
학습방법  (0) 2011.02.14

용어정리

학습로그/물리 2011. 3. 2. 10:01
각변위(Θ): 회전양을 나타내는 벡터양. 회전하는 물체의 호의 길이를 반지름으로 나눈 값.

내삽법: 두 값 사이의 값을 결정하는 과정 

반사각: 고정된 물체와 충돌 할 때, 움직이는 물체가 멀어지는 각

벡터 반사: 고정된 물체에 반사되는 물체의 운동 

부등척도: 척도 Sx와 Sy가 다른 값을 가지는 척도 변환 과정 

선형결합법: 등식의 성질을 이용하여 두 개의 방정식에서 두 변수의 값을 구하는 과정 

아핀: "아핀변환"과 같이, 물체의 기본적 형상이 바뀌지 않음을 지칭

오일러 회전: 롤, 피치, 요라 불리는 변수를 사용하여 물체를 회전. 회전을 수행하는 다른 방법인 
                  쿼터니언과 구분하기 위한 명칭.

역학적 에너지 보존의 법칙: 에너지는 생성되거나 파괴되지 않으며, 형태만 바꿈 

운동량(p): 물체의 질량과 속도의 곱

운동량 보존의 법칙: 두 물체가 충돌할 때, 운동량의 총 합은 항상 일정. 운동량은 한 물체에서
                            다른 물체로 전이된다. 

일-에너지 정리: 물체에 가한 알짜일은 운동에너지의 변화량과 동일 

접선속도(vt): 회전하던 물체가 회전이 멈출 경우 갖게 되는 선속도

중력: 퍼텐셜 에너지(GPE) 지상으로부터 측정한 높이로 인해 물체에 저장된 에너지

충-정렬 경계상자: 각 변이 수평축 x, 혹은 수직축 y에 완전히 평행한 상자 

충격량-운동량 정리: 짧은 시간동안 가한 힘은 운동량의 변화를 가져옴. 이는 물체의 질량이 변화지 않으며, 
                             물체의 속력이 변함을 의미한다. 

탄성계수(ε): 충돌할 때 얼마나 많은 에너지가 손실되는지를 나타내는 지표. 탄성출돌에서는 ε=1 이며,
                  완전 비탄성 충돌에서는 ε=0 이다. 

표면법선: 어떤 면에 수직이며, 길이가 1인 벡터 

투사체: 던지거나, 차거나 발사되어 공중에서 날아가는 물체

'학습로그 > 물리' 카테고리의 다른 글

용어정리  (0) 2011.03.02

[안철수 특강] 무엇이 성공을 이끄는가?

생각로그 2011. 3. 1. 23:16

안철수씨의 성공에 대한 강의영상을 보고 나름 정리해 보았다. 

성공을 위한 5가지 자세
(현대를 살아가는 전문가 다른사람에게 인정을 받을 수 있는 인재상)


1. 다른 분야에 대한 상식과 포용력을 갖춰라 => 지식과 마음자세의 문제 
- 상식, common sense (모든 사람이 공통적으로 적용되는, 자연스럽게 깨닫게 되는 지식)
- 연구개발 기술자와 마케팅/판매자의 대립
  * 연구개발 기술자 :  상식적인 수준으로 말해도 마케터들이 이해하지 못한다고 함 
  * 마케터 : 신문만 봐도 알수 있는 수준을 말해도 연구개발자들이 이해하지 못한다고 함 
  * 예전의 상식은 모든 사람들이 알았지만, 지금의 상식은 겹치지 않는 영역이 존재한다. 
- 도요타의 "T자형 인재" : 한 분야에 대한 깊이 있는 지식과 다른분야에 대한 상식과 포용력을 갖추고 있는 인재      



2. 소통(커뮤니케이션)능력을 길러라 => 지식/마음자세를 표현하는 능력 
- "A형 인재" : 다른분야에 대한 상식/포용력, 한분야에 대한 전문지식, 표현하는 능력 => 3박자가 맞는 삼각형 
                    도요타의 T자형 인재 특성에 소통능력을 구비한 인재 



3. 긍정적으로 생각하라. 
1) 과거를 보는 긍정성 측면
ex) 데일카네기, 형무소 90% 수감자의 생각 "주위 상황이 나를 이렇게 만들었다. 다른사람도 그렇게 됐을 거다"
      다른 사람을 탓하는 것은 사람의 타고난 속성
ex) 자신의 잘못이 없어도 사회생활 하다보면 잘못된 상황에 빠지는 경우
  : 50%는 내 잘못. 다시 이런 상황에 빠지지 않으려면 무엇을 하지 않으면 되는가? 교훈만을 생각 => 점점 나아짐 
ex) 잘못되면 불같이 화내는 친구 => 화를 내지만, 한번 끝나면 잊어버림. => 어떠한 교훈을 얻지 못함 
 
2) 미래를 보는 긍정성 측면
ex) 스톡데일 패러독스, 베트남 포로로 잡혔을 시, 포로교섭과 사기진작 => 전쟁영웅 
     포로 수용소에서 살아남을 수 있었던 사람 => 낙관론자들은 모두 죽고, 현실주의자들만 살아남았다. 
     낙관론자 => 낙관적인 생각에서 점점 생각이 변하고, 실망해가면서 죽어나감 
     현실주의자 => 이전쟁은 오래걸릴 수 밖에 없다를 인정 => 언젠가는 살아갈 수 있는 운명으로 믿음 

 안철수 => 어려운 상황을 이겨내기 위해서는 "차가운 머리와 뜨거운 가슴이 있어야 한다"
               차가운 머리: 현실과 자신에 대한 냉정하고 객관적인 분석
               뜨거운 가슴: 미래와 나 자신에 대한 열정과 믿음을 갖음 
 


4. 끊임없이 공부하라.
1) 자신이 원하는 분야에 열심히 공부한 만큼 전문성 획득. 무한의 자유 
2) 다른 사람이 얼마나 열심히 사는지 깨닫게 됨
  ex) 내가 자고 있는 밤, 유럽사람들은 공부하고 있을 텐데...
        노량진 수산시장 사람들이 사는 모습...내가 게을러서 못봤던 것일뿐...  
3) 자신을 알게 한다. 
  " 의미를 느끼게 하고, 재미있고, 잘 할 수 있는  일일까?"
   다른사람에게 도움이 되려면, 경험만 많아서는 안된다. 
   그 경험이 체계화가 되어 있어야 한다. 



5. 나의 한계를 극복하라.
- 한번 물러서면 습관화  =>한번 물러서면 그것이 한계점이 된다. 자기 합리화 
- 정신적으로, 육체적으로 정말 힘들 때...지금 힘든게 군대에 힘들었던 때보다 더 힘든 상황인가? "이미 내가 지나갔던 길이다"


표준입출력함수 getchar() / putchar()

언어로그/C/C++ 2011. 2. 22. 11:36


 

입출력함수의 동작방식


프로그램이 실행되기 전(main함수로 진입되기 전) 운영체제는 그 프로그램을 위해  입출력 버퍼를 생성한다.

생성된 입출력 버퍼에 대한 접근을 위해 <stdio.h>에 표준입력 버퍼를 위해 stdin을, 표준출력 버퍼를 위해

stdout 등의 값을 정의해두었고, 프로그래머는 이 값에 접근함으로 표준입출력 버퍼를 다룰 수가 있다.  

 

int ch;
ch = getchar();
putchar(ch);

위 소스 코드가 실행되면,   먼저 1바이트의 메모리가 생성이 되고, ch라는 이름이 부여된다.

getchar() 함수가 실행이 되고, 표준입력버퍼가 비어있기 때문에, 커서가 깜박이게 된다. 

사용자가 abc값을 입력하면, 이 값은 입력버퍼에 쌓이게 된다.  엔터를 치면, 개행문자까지 버퍼에 입력이 되고,
이 버퍼에서 한문자가 읽혀져 getchar에 반환된다. 

 stdin : a b c \n   <= 개행문자가 입력되는 순간 getchar 함수가 문자 a를 반환함

 

getchar 함수에 의해 문자 'a' 의 정수값 97이 반환이 되고, puchar(ch)는 이값을 출력버퍼에 쓰고 동시에 버퍼를 비우게 되고,

비로소 모니터에 출력이 되게 된다.  
중요한 것은 입출력 버퍼에 데이터를 기록하고 읽어온다는 것과 개행문자까지 버퍼에 함께 기록되기 때문에 동작방식을

잘 이해해야 한다는 것이다. 

 

 

표준입력함수

int getchar();

표준입력버퍼에서 1문자를 읽어 정수값을 반환하는 함수.

 


표준 출력함수

int putchar(int ch);

표준출력버퍼에  1문자를 쓰고, 버퍼를 비우는 함수

 

 

기억해 두면 유용한 아스키값

  1. 'A'  :  65
  2. 'a'  :  97
  3. '0'  : 48
    '\n' : 10


이 글은 스프링노트에서 작성되었습니다.

'언어로그 > C/C++' 카테고리의 다른 글

포인터의 이해  (0) 2011.03.11
매크로, 연산자  (3) 2011.03.10
표준입출력함수 getchar() / putchar()  (0) 2011.02.22
비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22

비표준 입출력함수 getch(), getche()

언어로그/C/C++ 2011. 2. 22. 11:32



getch(), getche()는 입출력버퍼를 거치지 않는 비표준 입출력함수로 <conio.h> 헤더파일에

선언되어 있다.  표준이 아니기 때문에 시스템마다 함수 지원여부가 다를 수 있지만 대다수 시스템에서

지원한다고 한다

  1. int getch(void)

표준입력(키보드)로부터 1문자를 읽어오는 함수로, 버퍼에서 읽지 않고 바로 읽어온다.

 

  1. int getche(void)

getche 는 getch 와 동일한 기능을 하지만, 읽은 1문자를 바로 echo해 준다.

 

escape(이스케이프 문자)

  1. '\a'  :beep sound    
  2. '\t'  : tab
  3. '\b'  : back space
  4. '\0'  : null character (아스키 코드값 0)
  5. ...

이 글은 스프링노트에서 작성되었습니다.

'언어로그 > C/C++' 카테고리의 다른 글

매크로, 연산자  (3) 2011.03.10
표준입출력함수 getchar() / putchar()  (0) 2011.02.22
비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22

표준입출력함수 printf() / scanf()

언어로그/C/C++ 2011. 2. 22. 11:31



printf 와 scanf 는 포맷에 맞추어, 표준 입출력을 수행하는 함수, 이 함수들도 표준입출력 버퍼의

데이터를 다루는 함수들이다. printf 와 scanf 함수에 인자로 적절한 포맷을 지정하는 변환코드를 

지정해 줄 수 있다. 

 

변환코드

%c :  문자    

%d :  정수
%f  :  실수(단정도 - float)

%lf :  실수(배정도 -  double)

 

printf 함수에 변환코드를 좀더 세부적으로 표현해줄 수 있다.

printf  함수에 %nd (n은 양수) 은 최소 n 자리를 확보하라는 뜻이다.

int a = 12345;
a값을 다음과 같은 변환코드에 적용을 하면

 

  1. %8d    :   최소 8자리를 확보하여 출력한다.       >>   _ _ _ 1 2 3 4 5  가 출력됨.
  2. %3d    :   최소 3자리를 확보하지만, 더 큰자리수를 표현할수 잇다.    >> 12345
  3. %08d  :   최소 8자리를 확보하되, 빈칸은 0으로 표시한다. >>  0 0 0 1 2 3 4 5   
  4. %-8d  :    최소 8자리를 확보하되, 왼쪽칸 부터 채운다.    >>  1 2 3 4 5 _ _ _ 

 

 실수는 디폴트로 소수 6자리까지 표시를 한다.

double d = 123. 456

에 변환코드를 적용해보면,

  1. %f :디폴트로 소수 6번째 자리까지 표시한다. >>   1 2 3 . 4 5 6 0 0 0          
  2. %8.2f :       최소 8자리를 출력하되, 소수 2째 자리까지 표시  >> _ _  1 2 3 . 4 6           
    %08.2f :     최소 8자리 중, 소수 2째자리까지 표시하고 빈칸은 0으로 채움  >>     0 0 1 2 3 . 4 6   
  3. %.2f :  소수 2째자리까지 표시하고, 최소 자리수는 알아서 출력     >>    1 2 3 . 4 6   

  4. %o  : 8진수로 표현
    %0x : 16진수로 표현
  5. %%  : % 문자 자체 출력
  6. % s : 문자열 출력


정수를 8진수 16진수로 표현하기 

8진수 1자리수는 2진수 3비트에 해당하며, 16진수 1자리는 2진수 4비트에 해당한다.

 

int a = o73;

8진수 73을 2진수로 표현을 하면 0111 0011 로 표현할 수 있다.

 

int b = 0xf4;

16진수 64를 2진수로 표현하면 1111 0100 로 표현할 수 있다. 

scanf

Scanf : 표준 입력버퍼에서 지정한 서식에 맞게 읽어오는 함수로, 값을 저정할 메모리의 정확한 물리적인 주소를
              전달해야 한다. 통상 주소 연산자 &(엠퍼센트) 를 변수 앞에 두어 변수의 주소를 전달한다.

 

 

1234 (천이백삼십사) 라는 값을 입력받고 싶은 경우,  getchar() 함수는 한 문자를 반환하기 때문에
네 문자를 읽어서  적절한 정수형태로 변환을 해주어야 한다. 이러한 과정은 어렵진 않지만 번거로운 작업으로

 scanf 를 사용하여 편리하게 읽어올 수 있다. 

int a;
scanf("%d", &a);

 위 코드를 실행하여 1234를 입력했다고 가정하면,  sscanf

whitespace(공백, 탭, 엔터)를 만날 때까지 값을 읽어들이고, 변환코드에 지정한 형식으로 자동으로 변환하여
변수에 값을 담아준다. 

 

scanf 에서의 변화코드

scanf("%3d", &a);

scanf에서 변환코드는 printf 와는 다르게,  whitespace가 나올 때까지 읽되, 최대 3문자까지만 읽어들인다는 의미이다. 
즉 whitespace가 나오지 않더라도, 3문자까지 읽으면 더이상 버퍼에서 읽지 않는다는 것이다.

 

 scanf 에 변환코드를 여러개 주어 한번에 여러값을 읽어들일 수 있다. 

 

char ch;
int a;
float f;
double d;
 
scanf("%c %d %f  %d", &ch, &a, &f, &d);


scanf  사용시 주의사항

1) printf 에서는 float와 double형 데이터를 위해 %f 변환코드를 사용할 수 있었지만, scanf에서는
    반드시 float는 %f, double은 %lf 변환코드를 사용하여야 한다. 

2) %c 를 제외한 변환코드는 whitespace가 나올때까지 읽지만, %c는 whitespace 문자가 나올때까지 읽지만
    whitespace를 버퍼에 제거하지 않고 남겨두어 이후 오작동에 원인이 될수 있다. %c를 사용한 후 fflush(stdin)를

   사용하여 버퍼를 비워주는 것이 좋다.
3)  scanf("%d \n" , &a) 나 scanf("%d ", &a); 와 같이 변환코드 다음에 다른 문자가 있으면, 다른 변환코드가 있을거라

     가정하여 의도하지 않게 2번 입력해야 하는 경우가 발생하기 때문 포맷문자열에는 변환코드만을 사용한다. 


이 글은 스프링노트에서 작성되었습니다.

음수의 표현

언어로그/C/C++ 2011. 2. 22. 11:18


 

컴퓨터에서는 모든 데이터를 이진수로 다룬다.  그러다 보니 음수를 어떻게 이진수로
표현을 해야하는가에 대한 문제가 생기게 됐다.  가장 단순하게 음수를 표현하는 방법으로

부호화비트 표현법이 있다.  가장 상위비트를 부호비트로 표현하여 부호비트가 0이면 양수,

1이면 음수로 표현하는 방법이다.  하지만 두 수를 연산하는데 문제가 생기게 되는데...


(4비트로 이뤄진 수중에 첫번째 비트가 부호비트라고 가정해보자)

 + 5      =>     0101    

 -  5            =>             1101: 부호화 비트 표현   

  와 같이 +5는 0101,  -5는 부호비트만 바꾼 1010 으로 표현이 된다.

 하지만 두 값을 더한 값은 0이 되야 하지만 결과는 0010 (2)가 되어 잘못된 결과가 나오게 된다. 

 

그래서 다른 이진수 음수 표현법이 필요하게 됐고, 1의 보수표현법, 2의 보수표현법이 생겨나게 됐다.

1의 보수표현법은 음수를,  절대값의 이진수 표현에서 각 비트를 역전시킨 값을 음수로 나타낸다.  

+ 5  => 0101

 - 5               =>   1010      :   1의 보수 표현                         

두 값 0101과 1010을 더하면 결과는 1111 이 나온다.  음수를 1의 보수로 변경했기 때문에
다시 결과를 1의 보수로 취해주면 결과는 0000이 되어 올바른 결과가 나온다. 


그럼 2의 보수 표현법을 알아보자. 2의 보수 표현법은 1의 보수표현법에 1을 더한 값이다 

+ 5=> 0101

 - 5=>    1011:   2의 보수 표현               

 두 값 0101 과 1011 을 더하면 10000이 나오고, 4비트 표현이기 때문에 최상위 1비트를 버리면,

 결과가 0으로 올바른 값이 나온다.

 

2의 보수표현법은 1의 보수 표현법보다 속도가 더 빠르기 때문에 (총 n비트라면 1의 보수표현법은 2n번의 비트 역전을,

2의 보수표현법은 1n + 1 번의 비트 역전을 수행한다.) 컴퓨터에서 음수를 표현하기 위해 2의 보수표현법이 선택되었다.

'언어로그 > C/C++' 카테고리의 다른 글

비표준 입출력함수 getch(), getche()  (0) 2011.02.22
표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22

C 언어 학습에 핵심. 변수와 상수

언어로그/C/C++ 2011. 2. 22. 11:18


 

C언어를 학습하는데 있어서 중요한 요소는 

  • 운영체제에게 어떻게 메모리를 확보해서 쓸 것인가?
  • 프로그램을 어떻게 효율적으로 작성할 것인가?
  • 어떻게 파일을 모듈화 할 것인가?

 

C언어는 빠른 실행속도를 장점으로 하는 언어이다. java 언어와 같은 객체지향 언어는 그 나름대로의
장점을 가지고 있지만,  낮은 성능과 제약된 자원을 갖는 시스템 혹은 빠른 속도를 필요로 하는 프로그램에

적합한 언어이다. 직접적으로 메모리에 접근할 수 있기 때문에 빠른 속도를 낼 수 있는 만큼, 메모리를 얼마나

잘 다루느냐가 C언어 프로그래밍의 중요한 화두이다.  효율적인 프로그래밍은 C언어 자체뿐 아니 컴퓨터에 대한

구조를 정확히 이해하고 있을 때 이루어질 수 있다.  효율적인 프로그램을 작성하는 것 만큼, 중요한 것이

어떻게 구조적으로 프로그램을 작성하는냐 이다. 요즘과 같은 규모가 대형화된 프로젝트에서는 프로그램에 대한

복잡도 감소와 관리를 용이하게 하는 것이 비용 절감에 중요한 요소이다. 

 

 

변수의 선언 , 상수?

변수란 프로그램에서 사용할 데이터를 담을 메모리 혹은 그릇을 의미하며, 변수를 선언한다는 것은 

이러한 메모리를 생성한다는 것을 의미한다.  변수 의미 자체는 '변하는 수' 로 이 메모리는 운영체제의 의해

할당되지만, 사용은 사용자가 하기 때문에 그 데이터가 변할 수 있다. 반면 상수는 운영체제가 메모리에 대한 

제어권을 가지고 있어서 사용자에 의해 변경될 수 없는 메모리 혹은 데이터를 의미한다.  

 

int a;

다음과 같은 문장은 정수형 데이터를 저장할 수 있는 4바이트의 메모리 공간을 할당하고, 그 메모리 공간을
a 라는 이름으로 접근하겠다고 운영체제에 말하는 것이다.

 

변수의 타입

변수의 타입에는 정수형, 실수형,  문자형 등... 다양한 타입들이 존재한다. 하지만 운영체제 입장에서 이것들은

수치값을 저장할 수 있는  크기가 다른 메모리 블럭에 해당할 뿐이다.  프로그래머들이 좀더 용이하게 프로그램을 작성할 수 있게

실세계에서 다루는 데이터의 유형을 나누고, 크기를 부여하고, 다르게 해석하도록 컴파일러에게 장치를 한 것이다. 

 

 

변환코드

char ch = 'A';
printf("%d %c", ch, ch);

위의 문장을 실행하면  65  'A' 라는 결과가 나온다. 

먼저 char 형은 문자를 저장하기 위한 1바이트 크기의 데이터 타입이다. 자주 사용하는 문자들의 표를 구성하고, 각 문자에 해당
하는 숫자(ASCII 코드)를 부여했다.   char 형은 사실 작은 범위를 수를 저장할 수 있는 정수형과 다름이 없다.

%d , %c는 변환코드라 부르며, 우측에 일치하는 쌍의 값이 어떻게 해석되야 하는지를 나타낸다. %d를 decimal, %c는 character를 

의미하며 이 변환코드에 의해 'A' 라는 값이 65라는 정수(아스키값)로 혹은 문자 'A'로 해석이 되었다. 


 

 





'언어로그 > C/C++' 카테고리의 다른 글

표준입출력함수 printf() / scanf()  (0) 2011.02.22
음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10

C 프로그램 실행과정

언어로그/C/C++ 2011. 2. 22. 11:17



C프로그램 컴파일 - 실행

C언어로 작성된 프로그램은 .c 라는 확장자를 갖는다. 이를 소스파일이라 부르며 이 소스파일이

실행파일로 최종적으로 변환이 된다.  소스파일은 먼저 전처리기(preprocess)에 의해 읽혀지어, 컴파일 전에

특정한 작업이 수행된다. (소스 일부분이 삽입되거나 대체되는 것 같은...) 전처리기에 의해 읽혀진 컴파일러에 의해

머신에 맞는 기계어 (혹은 어셈블리어)로 변환이 되어 목적파일을 생성하게 된다. 이 목적파일은 링커에 의해

 해당 프로그램에서 참조하고 있는 파일들을 삽입하여 완전한 실행파일을 생성하게 된다. 
실행파일은  사용자가 실행을 하는 순간 운영체제에서 지원하는 Loader(적재기)에 의해 메모리가 올라가 실행되게 된다.

 

소스파일(.c)  > [Preprocessor, Translator] > 목적파일 (.o) > [Linker] > 실행파일(.exe) > [Loader]

 

이와 같이 C 프로그램이 생성되는 코딩, 디버깅, 컴파일, 배포 과정을 통일된 하나의 툴에서 제공해주는

프로그램이 IDE(통합개발환경)이다. 대표적인 IDE로 Visual Studio 가 있다.


Visual Studio6.0 단축키

컴파일 : Ctrl + F7

실    행:  Ctrl + F5

코드정렬 : Alt + F8

에러메시지 : F4

 

다음은 컨솔에 "Hello world!" 라는 문구를 출려가는 프로그램이다

#include <stdio.h>    // 표준 입출력 라이브러리를 사용하겠음
 
int main() // 프로그램 시작점 
{
    printf("Hello world!\n");  // 표준 출력에 문자열 출력 
    return 0;
}


#이 붙어 있는 명령을 전처리 지시자 라고 한다. 컴파일전에 전처리기에 의해 소스파일에 특정한 작업을

수행하는 명령이다. 위에서는 표준입출력 라이브러리를 사용하겠다고 알리고,  표준출력(컨솔)에 출력하는

printf 라는 함수를 사용하였다.  main은 C  프로그램에서 항상 시작점이 되는 함수로,  운영체제에 의해 처음으로

읽혀질 메모리 주소를 나타낸다.   

'언어로그 > C/C++' 카테고리의 다른 글

음수의 표현  (0) 2011.02.22
C 언어 학습에 핵심. 변수와 상수  (0) 2011.02.22
C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10
함수의 이해 / 데이터 전달  (0) 2010.12.10