SlideShare a Scribd company logo
1 of 4
Download to read offline
안드로이드 프로그래밍 기초
                            1. 구조체

                                                          작성일 : 2011-04-07
                                            작성자 : 이새한슬 [hylo926@gmail.com]



I. 구조체

가. 정의
  구조체란 사용자 정의 자료형이다. 마치 사용자 정의 함수처럼 자료형을 사용자가
 직접 작성한다. 둘 이상의 자료형이 묶어져야 할 필요성이 있을 때, 구조체를 사용하여
 하나의 자료형으로 묶어 정의할 수 있다.


나. 선언
  구조체의 선언 방법에는 가지가 있다. 햇갈릴수 있으므로 잘 알아두도록 한다.

                      struct struct_tag {


                      …variable list…


                      } variable_name;

  첫 째로, 구조체를 선언하기 위해 struct라는 예약어를 사용한다. ( 정수형 변수를
 선언하기 위해 int를 사용하듯이.. )
  그 다음은 struct_tag 즉, 구조체의 이름을 넣는다.
  그 후 대괄호를 열고 구조체에 포함될 자료들을 써 넣은 후 대괄호를 닫는다.
  그 후 변수이름을 쓰고 세미콜롞으로 마무리한다.


  구조체의 선언 시 이 모든 요소를 반드시 써야되는 것은 아니다. 위의 예시중 빨갂
 배경으로 써짂 글씨는 반드시 써야하고 나머지는 부분적으로 생략 가능하다. 단,
 struct_tag와 variable_name을 모두 쓰지 않을 경우 에러가 나짂 않지만 ( warning 발생 )
 앞으로의 코드에서 이 구조체를 사용할 수 있는 방법이 없기 때문에 ( 접근 할 수 있는
 방법이 없다 ) 그런식으로 써서는 안된다.




                              - 1 -
(1) struct_tag를 쓰지 않을 경우 : variable_name을 반드시 써서 나중에 접근 할 수
     있도록 한다.
 (2) variable_name을 쓰지 않을 경우 : 나중에 struct struct_tag variable_name; 으로
     변수 이름을 써서 사용하도록 한다.
 (3) struct_tag와 variable_name을 모두 쓸 경우: variable_name을 쓰지 않으면 나중에
     struct struct_tag variable_name; 으로 사용한다고 하였는데, 이 때의 축약형이라고
     생각하면 된다. 즉 구조체 정의와 동시에 변수를 선언하는 방법이다.

C언어에서는 구조체를 정의한 후 변수를 선언 할 때 반드시 struct예약어를 붙여 struct
struct_tag variable_name; 이런식으로 선언을 해야한다. 이런 귀찮은 상황을 피하기 위해
보통 다음과 같이 구조체를 정의한다

                       typedef sturct _struct_tag {


                       …variable_list…


                       } _struct;


                       …다른 코드들…


                       _struct variable_name;



위 예시는 _struct라는 이름의 구조체 정의와 변수 선언을 보여준다. ( struct예약어와
혼동될 여지가 있기 때문에 이름 앞에 _를 붙여 _struct라고 한 것임 )
typedef이란 예약어는 별칭을 사용하게 해준다. 예를들어

                                typedef char BYTE;
                                BYTE variable_name;

라고 선언하면 앞으로 BYTE라는 단어로 변수들을 선언할 수 있게 되며 선언된 변수의
크기는 char형과 동일하다. 마찬가지로 구조체 이름을 _struct_tag로 정의는 하였지만
앞에 typedef을 써주었기 때문에 _struct라는 이름으로 변수를 선언할 수 있게 된다.
앞에서 struct_tag와 variable_name을 모두 썻을 경우 struct struct_tag{ …variable_list…};
struct struct_tag variable_name;의 축약형이라고 얘기한 적이 있는데, typedef의 경우도
마찬가지이다. 즉, 위 코드는 struct _struct_tag { …variable_list… }; typedef struct
_struct_tag _struct; 의 축약형이다. 또 눈치가 빠르면 알겠지만 _struct_tag와 _struct처럼
보통 정의시에는 tag를 붙여쓰고 typedef에 의해서 부르게 될 이름에는 tag를 빼고
이름만쓴다. 예를들면 다음과 같다.



                                    - 2 -
typedef struct tagTest{ } Test;

 하지만 이는 관용적인 표현일 뿐이기 때문에 때문에 꼭 따를 필요는 없다.


다. 초기화

 구조체 변수의 초기화에는 크게 두가지 방법이 있다.
         typedef struct tagData {
                 int age;
                 char name;
         } Data; ………………………………………………………………………                    (1)


         Data leeSoongHee; …………………………………………………..                (2)


  (1) 대괄호를 이용하여 직접 초기화 하기
      구조체의 정의를 마치면 메모리가 할당되지 않는다. 하지만 변수를 선언하게
     되면 그 변수의 크기만큼 메모리가 할당된다. 즉 (1)시점에서는 메모리가 할당
     되짂 않지만 (2)시점에서는 메모리가 할당된다. ( 변수의 데이터를 저장할 공갂이
     생기게 된다 ) 이때 메모리가 할당되는 방식은 위 예시를 예를들어 설명하자면
     멤버에 int형 변수 하나와 char형 변수가 있다. 선언된 순서되로 int형 4byte
     char형 1byte 합해서 5byte가 할당된다. 이렇게 순서대로 할당되기 때문에
     대괄호를 이용하여 다음과 같이 직접 초기화 할 수 있다.

                              Data leeSoongHee = { 21, ‘i’ };

     하지만 이 방식은 선언과 동시에 수행해야 된다.
  (2) 멤버를 직접 불러 초기화 하기
      멤버를 직접 호출하는 경우는 크게 두가지가 있다 . ( dot member selection
     operator ) 와 -> ( arrow member selection operator )가 있다. .은 구조체형 변수
     뒤에 붙어 leeSoongHee.age 이런식으로 사용된다. ->는 구조체형 포인터 변수
     뒤에 붙어 Data *ptr; ptr->age 이런식으로 사용된다. 멤버를 직접 불러 초기화
     하는방법은 위에서 언급한 연산자 두개를 통해 가능하다.


라. 과제1

  정수형 멤버 int age와 더블형 멤버 double height, 문자열 멤버 char[80] name 을
  가지는 구조체를 형성하여 다음 세사람을 저장한다

                 이름: steve      이름: peter     이름: andrea

                                    - 3 -
나이: 25     나이: 23     나이: 40
                   키: 185.3   키: 175.0   키: 163.9

      steve는 {}를 이용하여 초기화 하고 peter는 dot member selection operator를 통해
      초기화한다. andrea는 arrow member selection operator로 초기화 한다. 그 후 화면에
      세명 모두를 출력 한다. 실행 결과화면과 소스코드 파일( *.c )을 메일에 첨부하여
      4/9(토) 저녁 9:00까지 hylo926@gmail.com으로 보낸다.


II. LinkedList
  -    다음시갂에..




                                 - 4 -

More Related Content

What's hot

파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기jaypi Ko
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것jaypi Ko
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescriptHan JaeYeab
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Park Jonggun
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기Yong Joon Moon
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기Yong Joon Moon
 

What's hot (20)

파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것객체지향 단어가 의미하는 것
객체지향 단어가 의미하는 것
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
03. function in typescript
03. function in typescript03. function in typescript
03. function in typescript
 
Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초Start IoT with JavaScript - 1.기초
Start IoT with JavaScript - 1.기초
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
C++ stl
C++ stlC++ stl
C++ stl
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 

Viewers also liked

Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Sangon Lee
 
Improving the entrepreneurial journey
Improving the entrepreneurial journeyImproving the entrepreneurial journey
Improving the entrepreneurial journeyWist Ltd
 
06 dieta dukan receitas de entrada e aperitivos
06 dieta dukan receitas de entrada e aperitivos06 dieta dukan receitas de entrada e aperitivos
06 dieta dukan receitas de entrada e aperitivosFlander Silveira
 
Master preso for corporate wellness 10.1.12
Master preso for corporate wellness 10.1.12Master preso for corporate wellness 10.1.12
Master preso for corporate wellness 10.1.12Amybmcdonough
 
Holiday cocktail party wear featuring – bebe dresses
Holiday cocktail party wear featuring – bebe dressesHoliday cocktail party wear featuring – bebe dresses
Holiday cocktail party wear featuring – bebe dressesfashiontipsforyou
 
Making Money with Inbound Marketing: Part 3 (Social Media)
Making Money with Inbound Marketing: Part 3 (Social Media)Making Money with Inbound Marketing: Part 3 (Social Media)
Making Money with Inbound Marketing: Part 3 (Social Media)BrainSell Technologies
 
Útmutató-Hogy változtasd vevökké a Facebook rajongóidat
Útmutató-Hogy változtasd vevökké a Facebook rajongóidatÚtmutató-Hogy változtasd vevökké a Facebook rajongóidat
Útmutató-Hogy változtasd vevökké a Facebook rajongóidatGabriella Lakatos
 
Integration Magic: SugarCRM and JD Edwards
Integration Magic: SugarCRM and JD EdwardsIntegration Magic: SugarCRM and JD Edwards
Integration Magic: SugarCRM and JD EdwardsBrainSell Technologies
 
Summer 2012 seo 2 earned media
Summer 2012 seo 2 earned mediaSummer 2012 seo 2 earned media
Summer 2012 seo 2 earned mediayrewol
 
Data Management and Applications at SOCIB
Data Management and Applications at SOCIBData Management and Applications at SOCIB
Data Management and Applications at SOCIBDavid March
 
Мифы Древней Греции
Мифы Древней ГрецииМифы Древней Греции
Мифы Древней ГрецииSafonova1
 
Mind Map
Mind MapMind Map
Mind MapLi Lin
 
Eta introdution
Eta introdutionEta introdution
Eta introdutionLee Joe
 
Evergreen 2015 power point
Evergreen 2015 power pointEvergreen 2015 power point
Evergreen 2015 power pointMark Rutherford
 
Ancient egypt lola
Ancient egypt lolaAncient egypt lola
Ancient egypt lolalolac263
 

Viewers also liked (20)

Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조Android 기초강좌 애플리캐이션 구조
Android 기초강좌 애플리캐이션 구조
 
Improving the entrepreneurial journey
Improving the entrepreneurial journeyImproving the entrepreneurial journey
Improving the entrepreneurial journey
 
Using smartphones and facebook
Using smartphones and facebookUsing smartphones and facebook
Using smartphones and facebook
 
강의자료 2
강의자료 2강의자료 2
강의자료 2
 
06 dieta dukan receitas de entrada e aperitivos
06 dieta dukan receitas de entrada e aperitivos06 dieta dukan receitas de entrada e aperitivos
06 dieta dukan receitas de entrada e aperitivos
 
Master preso for corporate wellness 10.1.12
Master preso for corporate wellness 10.1.12Master preso for corporate wellness 10.1.12
Master preso for corporate wellness 10.1.12
 
Holiday cocktail party wear featuring – bebe dresses
Holiday cocktail party wear featuring – bebe dressesHoliday cocktail party wear featuring – bebe dresses
Holiday cocktail party wear featuring – bebe dresses
 
Making Money with Inbound Marketing: Part 3 (Social Media)
Making Money with Inbound Marketing: Part 3 (Social Media)Making Money with Inbound Marketing: Part 3 (Social Media)
Making Money with Inbound Marketing: Part 3 (Social Media)
 
Útmutató-Hogy változtasd vevökké a Facebook rajongóidat
Útmutató-Hogy változtasd vevökké a Facebook rajongóidatÚtmutató-Hogy változtasd vevökké a Facebook rajongóidat
Útmutató-Hogy változtasd vevökké a Facebook rajongóidat
 
Integration Magic: SugarCRM and JD Edwards
Integration Magic: SugarCRM and JD EdwardsIntegration Magic: SugarCRM and JD Edwards
Integration Magic: SugarCRM and JD Edwards
 
Summer 2012 seo 2 earned media
Summer 2012 seo 2 earned mediaSummer 2012 seo 2 earned media
Summer 2012 seo 2 earned media
 
Charu's dossier
Charu's dossier Charu's dossier
Charu's dossier
 
Interactive scenario
Interactive scenarioInteractive scenario
Interactive scenario
 
Data Management and Applications at SOCIB
Data Management and Applications at SOCIBData Management and Applications at SOCIB
Data Management and Applications at SOCIB
 
5+ping pong 4
5+ping pong 45+ping pong 4
5+ping pong 4
 
Мифы Древней Греции
Мифы Древней ГрецииМифы Древней Греции
Мифы Древней Греции
 
Mind Map
Mind MapMind Map
Mind Map
 
Eta introdution
Eta introdutionEta introdution
Eta introdution
 
Evergreen 2015 power point
Evergreen 2015 power pointEvergreen 2015 power point
Evergreen 2015 power point
 
Ancient egypt lola
Ancient egypt lolaAncient egypt lola
Ancient egypt lola
 

Similar to 안드로이드기초

2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7Chris Ohk
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
M5 6 1
M5 6 1M5 6 1
M5 6 1nexthw
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4yonsei
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기Kwangyoun Jung
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 
이펙티브 C++ 789 공부
이펙티브 C++ 789 공부이펙티브 C++ 789 공부
이펙티브 C++ 789 공부quxn6
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
[Swift] Class & Structure
[Swift] Class & Structure[Swift] Class & Structure
[Swift] Class & StructureBill Kim
 
C# 고급 문법 part 2
C# 고급 문법 part 2C# 고급 문법 part 2
C# 고급 문법 part 2준영 박
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여iamprogrammerofficial
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part oneJi Hun Kim
 
Clean code
Clean codeClean code
Clean codebbongcsu
 

Similar to 안드로이드기초 (20)

2014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #72014-15 Intermediate C++ Study #7
2014-15 Intermediate C++ Study #7
 
7주차 스터디
7주차 스터디7주차 스터디
7주차 스터디
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
(C#,닷넷구조체강좌)구조체 개요 및 간단한 예제_닷넷,C#, WPF, 자마린실무교육
 
STL study (skyLab)
STL study (skyLab)STL study (skyLab)
STL study (skyLab)
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
M5 6 1
M5 6 1M5 6 1
M5 6 1
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
QnA Blog Using Django - 회원가임/로그인폼, Post, 글보기
 
C review
C  reviewC  review
C review
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
이펙티브 C++ 789 공부
이펙티브 C++ 789 공부이펙티브 C++ 789 공부
이펙티브 C++ 789 공부
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
[Swift] Class & Structure
[Swift] Class & Structure[Swift] Class & Structure
[Swift] Class & Structure
 
C# 고급 문법 part 2
C# 고급 문법 part 2C# 고급 문법 part 2
C# 고급 문법 part 2
 
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
 
읽기 좋은 코드가 좋은 코드다 Part one
읽기 좋은 코드가 좋은 코드다   Part one읽기 좋은 코드가 좋은 코드다   Part one
읽기 좋은 코드가 좋은 코드다 Part one
 
Clean code
Clean codeClean code
Clean code
 

안드로이드기초

  • 1. 안드로이드 프로그래밍 기초 1. 구조체 작성일 : 2011-04-07 작성자 : 이새한슬 [hylo926@gmail.com] I. 구조체 가. 정의 구조체란 사용자 정의 자료형이다. 마치 사용자 정의 함수처럼 자료형을 사용자가 직접 작성한다. 둘 이상의 자료형이 묶어져야 할 필요성이 있을 때, 구조체를 사용하여 하나의 자료형으로 묶어 정의할 수 있다. 나. 선언 구조체의 선언 방법에는 가지가 있다. 햇갈릴수 있으므로 잘 알아두도록 한다. struct struct_tag { …variable list… } variable_name; 첫 째로, 구조체를 선언하기 위해 struct라는 예약어를 사용한다. ( 정수형 변수를 선언하기 위해 int를 사용하듯이.. ) 그 다음은 struct_tag 즉, 구조체의 이름을 넣는다. 그 후 대괄호를 열고 구조체에 포함될 자료들을 써 넣은 후 대괄호를 닫는다. 그 후 변수이름을 쓰고 세미콜롞으로 마무리한다. 구조체의 선언 시 이 모든 요소를 반드시 써야되는 것은 아니다. 위의 예시중 빨갂 배경으로 써짂 글씨는 반드시 써야하고 나머지는 부분적으로 생략 가능하다. 단, struct_tag와 variable_name을 모두 쓰지 않을 경우 에러가 나짂 않지만 ( warning 발생 ) 앞으로의 코드에서 이 구조체를 사용할 수 있는 방법이 없기 때문에 ( 접근 할 수 있는 방법이 없다 ) 그런식으로 써서는 안된다. - 1 -
  • 2. (1) struct_tag를 쓰지 않을 경우 : variable_name을 반드시 써서 나중에 접근 할 수 있도록 한다. (2) variable_name을 쓰지 않을 경우 : 나중에 struct struct_tag variable_name; 으로 변수 이름을 써서 사용하도록 한다. (3) struct_tag와 variable_name을 모두 쓸 경우: variable_name을 쓰지 않으면 나중에 struct struct_tag variable_name; 으로 사용한다고 하였는데, 이 때의 축약형이라고 생각하면 된다. 즉 구조체 정의와 동시에 변수를 선언하는 방법이다. C언어에서는 구조체를 정의한 후 변수를 선언 할 때 반드시 struct예약어를 붙여 struct struct_tag variable_name; 이런식으로 선언을 해야한다. 이런 귀찮은 상황을 피하기 위해 보통 다음과 같이 구조체를 정의한다 typedef sturct _struct_tag { …variable_list… } _struct; …다른 코드들… _struct variable_name; 위 예시는 _struct라는 이름의 구조체 정의와 변수 선언을 보여준다. ( struct예약어와 혼동될 여지가 있기 때문에 이름 앞에 _를 붙여 _struct라고 한 것임 ) typedef이란 예약어는 별칭을 사용하게 해준다. 예를들어 typedef char BYTE; BYTE variable_name; 라고 선언하면 앞으로 BYTE라는 단어로 변수들을 선언할 수 있게 되며 선언된 변수의 크기는 char형과 동일하다. 마찬가지로 구조체 이름을 _struct_tag로 정의는 하였지만 앞에 typedef을 써주었기 때문에 _struct라는 이름으로 변수를 선언할 수 있게 된다. 앞에서 struct_tag와 variable_name을 모두 썻을 경우 struct struct_tag{ …variable_list…}; struct struct_tag variable_name;의 축약형이라고 얘기한 적이 있는데, typedef의 경우도 마찬가지이다. 즉, 위 코드는 struct _struct_tag { …variable_list… }; typedef struct _struct_tag _struct; 의 축약형이다. 또 눈치가 빠르면 알겠지만 _struct_tag와 _struct처럼 보통 정의시에는 tag를 붙여쓰고 typedef에 의해서 부르게 될 이름에는 tag를 빼고 이름만쓴다. 예를들면 다음과 같다. - 2 -
  • 3. typedef struct tagTest{ } Test; 하지만 이는 관용적인 표현일 뿐이기 때문에 때문에 꼭 따를 필요는 없다. 다. 초기화 구조체 변수의 초기화에는 크게 두가지 방법이 있다. typedef struct tagData { int age; char name; } Data; ……………………………………………………………………… (1) Data leeSoongHee; ………………………………………………….. (2) (1) 대괄호를 이용하여 직접 초기화 하기 구조체의 정의를 마치면 메모리가 할당되지 않는다. 하지만 변수를 선언하게 되면 그 변수의 크기만큼 메모리가 할당된다. 즉 (1)시점에서는 메모리가 할당 되짂 않지만 (2)시점에서는 메모리가 할당된다. ( 변수의 데이터를 저장할 공갂이 생기게 된다 ) 이때 메모리가 할당되는 방식은 위 예시를 예를들어 설명하자면 멤버에 int형 변수 하나와 char형 변수가 있다. 선언된 순서되로 int형 4byte char형 1byte 합해서 5byte가 할당된다. 이렇게 순서대로 할당되기 때문에 대괄호를 이용하여 다음과 같이 직접 초기화 할 수 있다. Data leeSoongHee = { 21, ‘i’ }; 하지만 이 방식은 선언과 동시에 수행해야 된다. (2) 멤버를 직접 불러 초기화 하기 멤버를 직접 호출하는 경우는 크게 두가지가 있다 . ( dot member selection operator ) 와 -> ( arrow member selection operator )가 있다. .은 구조체형 변수 뒤에 붙어 leeSoongHee.age 이런식으로 사용된다. ->는 구조체형 포인터 변수 뒤에 붙어 Data *ptr; ptr->age 이런식으로 사용된다. 멤버를 직접 불러 초기화 하는방법은 위에서 언급한 연산자 두개를 통해 가능하다. 라. 과제1 정수형 멤버 int age와 더블형 멤버 double height, 문자열 멤버 char[80] name 을 가지는 구조체를 형성하여 다음 세사람을 저장한다 이름: steve 이름: peter 이름: andrea - 3 -
  • 4. 나이: 25 나이: 23 나이: 40 키: 185.3 키: 175.0 키: 163.9 steve는 {}를 이용하여 초기화 하고 peter는 dot member selection operator를 통해 초기화한다. andrea는 arrow member selection operator로 초기화 한다. 그 후 화면에 세명 모두를 출력 한다. 실행 결과화면과 소스코드 파일( *.c )을 메일에 첨부하여 4/9(토) 저녁 9:00까지 hylo926@gmail.com으로 보낸다. II. LinkedList - 다음시갂에.. - 4 -