'구조체'에 해당되는 글 2건

  1. 2021.01.27 구조체
  2. 2020.12.08 구조체

구조체

Swift/문법 2021. 1. 27. 16:59

struct 이름 {

구현부

}

 

 

프로퍼티 및 메서드

- 메서드는 구조체 안에 들어가 있는 함수

- 어떤 타입 안에 들어가 있는 변수를 프로퍼티라고 보면 됨

- 타입 안에 들어가 있는 함수를 메서드라고 보면 됨

 

struct Sample {

var mutableProperty: Int = 100   // 값을 변경할 수 있는 가변 프로퍼티

let immutableProperty: Int = 100   // 값을 변경할 수 없는 불변 프로퍼티

 

static var typeProperty: Int = 100   // 타입 프로퍼티

 

// 인스턴스 메서드

func instanceMethod() {

print("instance method")

}

 

// 타입 메서드

static func typeMethod() {

print("type method")

}

 

 

구조체 사용

1. 가변 인스턴스

var mutable: Sample = Sample()

 

2. 불변 인스턴스

let immutable: Sample = Sample()

 

3. 타입 프로퍼티 및 메서드

Sample.typeProperty = 300

Sample.typeMethod()   // type method

 

 

* 학생 구조체

import Foundation

struct Student {
    var name: String = "unknown"
    var 'class' = String = "Swift"
    
    // 타입 메서드
    static func selfIntroduce() {
        print("학생 타입 입니다")
    }
    
    // 인스턴스 메서드
    func selfIntroduce() {
        print("저는 \(self.class)반 \(name)입니다")
    }
}

Student.selfIntroduce() // 학생 타입 입니다

var khon: Student = Student()
khon.name = "khon"
khon.class = "스위프트"
khon.selfIntroduce() // 저는 스위프트반 khon입니다

let khon3: Student = Student()

// 불변 인스턴스이므로 프로퍼티 값 변경 불가
// 컴파일 오류 발생
// khon3.name = "khon3"
khon3.selfIntroduce() // 저는 Swift반 unknown입니다

'Swift > 문법' 카테고리의 다른 글

열거형(enum)  (0) 2021.01.27
클래스  (0) 2021.01.27
옵셔널 추출(Optional Unwrapping)  (0) 2021.01.27
옵셔널(Optional)  (0) 2021.01.27
반복문  (0) 2021.01.27
Posted by khon98
,

구조체

C언어 2020. 12. 8. 23:29

구조체

- 여러 개의 변수를 묶어 하나의 객체를 표현하고자 할 때 구조체를 사용할 수 있음(배열과는 성질이 다름)

- 캐릭터, 몬스터, 학생, 좌표 등 다양한 객체를 모두 프로그래밍 언어를 이용해 표현할 수 있음

 

구조체의 정의와 선언

struct 구조체명 {

   자료형 1 변수명 1;

   자료형 2 변수명 2;

   ...

};

 

* 한 명의 학생에 대한 정보를 담고 있는 구조체

#include <stdio.h>

struct Student {
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
};

 

구조체의 변수의 선언과 접근

- 기본적으로 구조체의 변수에 접근할 때는 온점(.)을 사용함

int main(void){
    struct Student s; // 구조체 변수 선언
    strcpy(s.studentId, "20201208"); // 구조체 변수에 접근
    strcpy(s.name, "khon");
    s.grade = 4;
    strcpy(s.major, "컴퓨터교육");
}

 

*학생 구조체를 만들어서 활용하기

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

struct Student { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
};

int main(void){
    struct Student s; // 구조체 변수 선언
    strcpy(s.studentId, "20201208"); // 구조체 변수에 접근
    strcpy(s.name, "khon");
    s.grade = 4;
    strcpy(s.major, "컴퓨터교육");
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

구조체의 정의와 선언

- 하나의 구조체 변수만 사용하는 경우 정의와 동시에 선언을 할 수도 있음

- 이 경우 변수는 전역 변수로 사용됨

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

struct Student { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} s; // 전역 변수

int main(void){
    strcpy(s.studentId, "20201208"); // 구조체 변수에 접근
    strcpy(s.name, "khon");
    s.grade = 4;
    strcpy(s.major, "컴퓨터교육");
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

구조체의 초기화

1.

- 구조체의 변수를 한 번에 초기화하기 위해서는 중괄호에 차례대로 변수의 값을 넣음

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

struct Student { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} s; // 전역 변수

int main(void){
    struct Student s = { "20201208", "khon", 4, "컴퓨터교육"};
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

2.

- 위쪽에서 구조체를 정의하고 선언하면서 그와 동시에 초기화까지 할 수 있음

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

struct Student { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} s = { "20201208", "khon", 4, "컴퓨터교육"};

int main(void){
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

더 짧게 구조체 정의하기

1.

- typedef 키워드를 이용하면 임의의 자료형을 만들 수 있으므로 선언이 더 짧아짐

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

typedef struct Student { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} Student;

int main(void){
    Student s = {"20201208", "khon", 4, "컴퓨터교육"};
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

2.

- 최근에는 익명 구조체의 개념이 등장하여 구조체 이름 부분을 비워놔도 됨

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

typedef struct { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} Student;

int main(void){
    Student s = {"20201208", "khon", 4, "컴퓨터교육"};
    printf("학번: %s\n", s.studentId); // 구조체 내용 출력
    printf("이름: %s\n", s.name);
    printf("학년: %d\n", s.grade);
    printf("학과: %s\n", s.major);
    system("pause");
    return 0;
}

 

구조체 포인터 변수에 접근하기

- 구조체가 포인터 변수로 사용되는 경우 내부 변수에 접근할 때 화살표(->) 를 사용함

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // strcpy를 사용하기 위한 헤더

typedef struct { // 학생 구조체 정의
    char studentId[10];
    char name[10];
    int grade;
    char major[100];
} Student;

int main(void){
    Student *s = malloc(sizeof(Student));
    strcpy(s -> studentId, "20201208"); // 구조체 포인터 변수에 접근
    strcpy(s -> name, "khon");
    s -> grade = 4;
    strcpy(s -> major, "컴퓨터교육");
    printf("학번: %s\n", s -> studentId); // 구조체 내용 출력
    printf("이름: %s\n", s -> name);
    printf("학년: %d\n", s -> grade);
    printf("학과: %s\n", s -> major);
    system("pause");
    return 0;
}

 

 

- 구조체는 현실 세계의 객체를 소스코드 상에서 매우 쉽게 표현할 수 있도록 해줌

'C언어' 카테고리의 다른 글

전처리기  (0) 2020.12.09
파일 입출력  (0) 2020.12.08
함수 포인터  (0) 2020.12.08
동적 메모리 할당  (0) 2020.12.08
다차원 배열과 포인터 배열  (0) 2020.12.07
Posted by khon98
,