안녕하세요, 어서 오세요 여긴 새로운 구역이에요
구조에 관해 얘기할 거예요
C#의 새로운 개념으로 항목을 함께 그룹화하죠
배열과 비슷하지만 더 강력해요
구조가 뭔지 얘기하고 싶어요 구조는 어떻게 만들고 어떻게
사용하는지 말이에요
C#의 구조는 요소 그룹화를 위한 또 다른 도구를 제공하죠
배열과 비슷하다고 말씀드렸지만 사실 좀 더 강력해요
개체 지향 프로그래밍에 익숙하시다면
자바나 C-플러스 플러스 혹은 어떤
개체 지향 언어든 개체로 생각되지만 데이터 멤버만
있고 실제 행동이나 메서드는 없어요
여러분이 개발한 많은 C#
프로그램에서 사용하게 될 강력한 개념이죠 다양한
항목을 하나의 이름으로 그룹화할 수 있고 그것들은
본질적으로 데이터 속성을 나타낼 수 있으니까요
예를 들어, 프로그램 안에 날짜를 저장하고 싶다고 해보죠
날짜는 보통 세 가지 변수로 구성됩니다 월, 일, 년이죠
데이터를 저장하기 위해 세 가지 변수를 생성하죠
예를 들어 int 월 = 9일 = 25년 = 2015라고
하는 거죠
프로그램이 특정 물품의 구매 날짜도 저장해야 한다고 가정해 보세요
프로그램에서 사용하는 날짜마다 변수를
세 개 더 만들어야 할 거예요 이게 얼마나 반복적인지
아실 겁니다 변수가 많이 생기게 되죠
하지만 이 변수들이 논리적으로 관련 있다는 걸 아셔야 해요 전부 데이트예요
한 조로 묶어야 해요
거의 고유한 데이터 유형이어야 해요 그런 다음 그걸 생성하고 다양한 요소에
엑세스할 수 있어야 하죠
데이트마다 세 가지 변수를 만들 필요는 없어요
여기서 객체 및 클래스와 관련해서 세 가지
데이터 속성을 가지게 되죠
그러니까 변수 3개의 집합을 하나로 묶는 게 훨씬 낫겠죠
그게 바로 구조 요소와 C의 역할이죠
이런 다양한 요소들을 특정 이름으로 그룹화할 수 있게 해주죠
그 다음 이름의 다양한 변수를 생성하고 그 이름의
요소에 엑세스할 수 있죠 다양한
데이터 속성에요 그런 걸 멤버라고 해요
C#에서 어떻게 구조를 만들까요?
아주 간단해요 구조 선언은 구조가 어떻게 구성되었는지를 설명하죠
이 구조물 안에 어떤 요소가 있는지 말이죠
이런 요소들을 멤버라고 불러요
먼저 구조를 정의해야 하니까요 또는 구조를 선언해야 하죠
구조 안에 뭐가 있는지 묘사해야 해요
스트럭츠 키워드로 할 수 있어요
스트럭트 키워드에서 구조라 부르는
다양한 유형의 변수 모음을 정의하면 단위로 취급할 수 있죠
아주 강력하죠
이 키워드를 사용하면 이름만 입력하면 돼요 이건
보통 태그 이름이라고 하죠 이 예제에선 날짜라는 태그 이름이 있어요
키워드 구조가 보이시죠 C 컴파일러에 이게 특정
함수라는 걸 알려주는 키워드예요
특정 기능으로 구성 요소를 그룹화할 수 있어요
키워드 다음에 태그 이름이 있고
왼쪽 중괄호와 오른쪽 중괄호가
있고 끝에는 세미콜론이 있어요
그 안에 어떤 형식의 변수든 정의할 수 있어요 심지어 포인터도 넣을 수 있죠
바로 스트럭츠 멤버들이죠
이건 C 컴파일러가 이해할 수 있는 날짜 구조를
정의하는 구문이에요
C 컴파일러에게 상태 구조가 포함하고 있는 세
가지 요소를 알려줍니다
월, 일, 연이죠 이 선언에 메모리 할당은 없어요
다시 말하지만 이건 실존하는 구조물이에요
아직 시작도 안 했어요 그냥 이렇게 정의될 거라고만 했어요
이게 날짜 구조가 될 거예요 이게 구성 요소죠
날짜 구조 내의 변수 이름 날짜, 월, 년도의 변수는
멤버 또는 필드라고 하죠
구조물 멤버들이 괄호 사이에 나타나
태그 이름 날짜를 따릅니다 태그 이름 날짜를요
아주 간단한 구문으로 이 요소들을 하나의 이름인 Date 안에 그룹화할 수 있어요
배열과는 다르죠 지수가 없으니까요
실제로 크기를 지정하는 게 아니에요
정확히 같은 데이터 타입이 아니에요
다양한 데이터 타입과 많은 것들을 가질 수 있죠
이 구조를 어떻게 활용할 건가요?
날짜의 정의는 새로운 유형을 정의하죠
int와 같은 또 다른 형식으로 생각할 수 있어요 2 또는 float처럼요
당신이 정의한 이 형식을 제외하면 열거형이라고 할 수 있죠
열핵의 가치는 하나뿐이죠
이 날짜 구조는 3개의 값을 갖고 있지만 다른 데이터 유형이에요
변수는 타입 구조로 선언할 수 있어요
바로 그렇게 하는 거죠
오늘이라는 새 변수를 생성할 수 있어요
형식상 구조 날짜가 되겠죠
오늘은 기본적으로 세 가지 값을 가지고 있어요.
그런 다음 더 많은 날짜를 선언해야 할 경우
같은 형식의 변수를 더 생성할 수 있어요
즉, 구매 날짜에는 세 가지 변수가 필요 없고 현재 날짜에는
세 가지 변수 청구 날짜에는
세 가지 변수가 필요하죠
실제 구조의 다양한
인스턴스의 변수 한두 개를 가질 수 있어요
이게 얼마나 강력한지 아셨으면 해요
위에 있는 구문은 구조데이터, 구매데이터가
되겠죠
메모리가 할당됩니다 변수 메모리가 이 구조에 대해
할당된다고 선언하셨기 때문이죠
메모리는 3개의 정수 값을 위해 할당됩니다 혹은 각 변수의 3개의
멤버들에 대해서 할당됩니다
메모리는 할당되는 것이죠
또한 할당되는 이유는 포인터가 없기 때문이죠
그 구조에 포인터가 있다면 그 포인터에 대해 메모리를 할당해야 해요
오늘의 날짜 구조는 아주 간단해요 천천히 시작할게요
int가 3개 있고 이 멤버들은 자동으로 할당돼요
하지만 이전 슬라이드와 현재 슬라이드의 차이를 이해하셔야 해요
구조를 정의하는 것과 특정 구조 유형의 변수를 선언하는
건 차이가 있어요
재무 구조는 C 컴파일러에게 여기 구조가
있고 그 안에 있는 데이터를 알려주는 거죠
하지만 실제로 특정 구조 유형의 변수를 선언하는 건
해당 구조를 사용하기 시작한다는 뜻이죠
세 가지 요소에 대해 할당된 메모리가 있고요 요소들에
접근해서 설정할 수 있어요
어떻게 멤버들에게 접근할 수 있을까요?
이제 구조를 정의하는 법을 아셨고 구조
변수 선언하는 법도 아셨으니 이제 구조
구성원들을 어떻게 언급하는지도 아셨을 거예요
접속해야 해요 액세스해서 값이나 값을 볼 수 없다면 쓸모없죠
구조 변수 이름은 포인터가 아니에요
멤버에게 접근하려면 특별한 구문이 필요해요
포인터는 보통 주소의 값만 포함하거든요
포인터가 아니라면 특별한 구문이 필요해요
구조의 구성원을 참조하려면 변수 이름과 마침표를 입력하세요
보통 .연산자라고 하죠
.연산자 마침표 다음에 스트럭츠
내부의 멤버 변수의 이름을 따라가죠
구조 변수 이름과 멤버 이름
사이의 마침표는 멤버 선택 연산자로
.연산자로도 불리죠
변수 이름, 마침표와 멤버 이름 사이에 빈칸이 없죠
오늘의 값을 오늘 변수로 25로 설정하려면
이렇게 하면 돼요 변수 이름, 오늘이죠
그런 다음 . 양쪽에 띄어쓰기 없어요
그런 다음 구성 요소의 이름을 지정합니다 구조 정의 안에서요
날짜죠
그런 다음 다른 정수를 할당하듯이 이것도 할당하죠
등호 할당 연산자를 사용하겠습니다
여기엔 문자 그대로 상수와 세미콜론이죠
아주 간단해요 연도를 정하고 싶다면
오늘로 하죠 년도와 = 2015를 예로 들게요
멤버 값에 접근하고 싶을 때요
예를 들어, 멤버 값에 접근해서 12인지 확인하고 싶다면 .구문을
이용하면 됩니다 멤버 선택 연산자요
멤버 선택 연산자를 이용해 멤버 값에 접근할 수 있죠
멤버 변수에 접근하면
다른 변수처럼 사용할 수 있어요
int라면 연산에서 사용할 수 있고요
해당 데이터 형식의 규칙을 따르세요
이 경우엔 if 문 안에서 등호를 이용해
12개와 비교할 수 있어요
그런 다음 예를 들어 12와 같으면 다음 달은 1이라고 할 수 있죠
우리가 할당하는 로컬 변수일 수도 있어요
예제를 보죠 여기서 날짜라는 구조를 정의하고 있어요
세 가지 원소가 있어요 월, 일, 연이죠
우리가 그걸 정의하는 건 구조 키워드랑 중괄호가 있기 때문이죠
오른쪽 중괄호에 세미콜론이 있는 걸 보세요 정의를 끝내기 위해서요
이 시점에서 이 구조에 대한 메모리는 할당되지 않아요
다음 줄에서 변수를 선언합니다 세 가지 요소를
포함하는 변수명에 대한 메모리를 할당하고 있습니다
int 형식의 월, 일, 년이죠
내부 구성 요소 세 가지에 데이터를 할당할 수 있어요 .Manager
액세스를 사용해서요
오늘요? 월은 오늘 9시예요 날짜는 25일과 오늘이에요 2015년요
프린트하거나 데이터에 접근하려면 할당된 후와 같은 방식으로
접근해야 해요 그 회원을 오늘 선택하는 거죠 월, 오늘요 오늘요
1년요 다시 연산을 할 수 있습니다 int이기 때문이죠
%d를 사용하거나 2로 포맷하고 싶다면
% 2I나 % 2D라고 하면 돼요
아주 간단한 구문이죠 구조를 생성하고
정의하는 게 아주 쉽습니다 그런 다음 닷 멤버 선택
연산자를 이용해 사용하고 액세스하죠
구조와 표현은요?
제가 연산 수식으로 데이터에 접근하는 거 보셨죠? 다르지
않아요
표정에 대한 평가를 할 때 구조 대원은
일반적인 변수와 같은 규칙을 따르죠
구조 안에 정수인 멤버가 있다면 다른 정수와
같은 규칙을 적용할 수 있어요
덧셈, 뺄셈 등을 적용할 수 있어요 캐릭터 버퍼라면 캐릭터 버퍼
규칙만 적용할 수 있죠 추가와 마이너스 문자 버퍼
같은 걸 할 수 있나요?
플로트, 더블 등 다양한 데이터 타입이
있죠 식에서 멤버를 사용할 때는 같은 규칙을 따르세요
여기 예제가 있어요
오늘요 100 더하기 1로 나누면요
년도가 int이기 때문에 완벽하게 유효하죠
int 형식의 정규 변수와 다르지 않아요
멤버 선택 연산자를 이용해 다르게 접근할 뿐이죠
이제 다양성이 생겼죠 구조는 여러 방식으로 정의할 수 있어요
c의 장점은 유연성입니다 c는 여러 방식으로
구조를 정의할 수 있게 해주죠 구조를 정의할 때 다른
구문을 볼 수도 있어요
제가 보여드린 첫 번째 예가 여러분이 따라야 할 거예요 항상 태그 이름을 갖고 있어야
하고 코드 한 곳에서 구조를 정의한 다음 다른 곳에서 변수를
선언해야 해요 하지만 C는 그 자체로
아주 유연해요 같은 라인에서 구조를 정의하고 변수를 선언할 수 있어요
이름 없는 구조도 정의할 수 있어요
그래서 융통성이 많죠 특정 구조의 일부라고 변수를
선언하는 건 유효해요 그 구조를 정의하는 것과 동시에요
변수 이름을 맨 밑에 넣어도 돼요 제가 시범을 보일게요
변수 이름을 포함하거나 구조 정의에서 세미콜론을 종료하기 전에 이름을 포함하세요
다른 변수처럼 값을 초기화하고 할당할
수도 있어요 어디 볼까요?
구조를 정의하는 변형은 그걸 정의하는 것과 동시에 변수를
선언할 수 있어요 이 경우에는 구조 날짜를
정의했어요 하지만 today라는 변수도 생성했죠
오른쪽 중괄호 끝에 세미콜론 앞에 이름이 붙거든요 이 세미콜론은
날짜 변수 생성과 날짜 구조의 정의를 둘 다 해주죠
이 상단 인스턴스에선 구조의 변수를
생성하고 있죠
우린 그걸 구조의 예로 부르기도 하죠 바로 오늘이죠
구조가 정의되는 것과 동시에 선언되죠
오늘은 형식의 변수 날짜예요 전부 하나로 했죠
오늘을 한 직후에 이런 변수들을
초기화할 수 있습니다 괄호를 이용해서요
그리고 월은 5, 날짜는
등등을 입력합니다 다른 정수 값을 초기화할
때처럼요
구조물을 만드는 또 다른 방법은 이름 없는
구조물을 만드는 거죠 할 수 있는 게 별로 없어서
제약이 좀 있어요
하지만 태그 이름을 제공할 필요는 없어요
태그 이름은 맨 위에 있고 키워드는 맨 뒤에 있어요
이전 예제에서 태그 이름은 날짜였어요
하지만 날짜를 제시할 필요는 없어요
특정 구조 유형의 모든 변수가 구조가 정의될 때 정의되면
이름은 생략할 수 있죠
이게 정말 의미하는 건 구조를 한 번만 사용한다는
거죠 딱 한 번만요
그냥 int 일, int
년, int 월로 변수를
선언하는 거죠
그런데 스트럭츠 키워드 뒤에 태그 이름이 없는 게 보이시죠
이건 하나의 구조물일 뿐이에요 한 번 사용하면 오늘
변수를 생성하고 다시는 사용하지 않아요
그게 영화의 단점이자 한계죠
로컬 스트럭처 같은 걸 한 번 사용하지 않는 한 절대 해선 안 돼요
하지만 더 이상의 인스턴스를 정의할 수 없어요 그
구조를 이런 식으로 정의한다면요
무명 구조물, 무명 구조물로요
여러분이 원하는 이 구조 형식의 모든 변수는 여러분의 프로그램이 하나의 문장에서 정의되어야만 하죠
하나 이상의 변수를 만들 수도 있어요 오늘 쉼표를 찍고 또
다른 변수를 만들어 여러 변수를 만들 수도 있죠
여러 변수를 시작할 수 있어요
이 방법은 약간 제한적이죠 아래에 변수
선언 이후엔 더 이상 변수를 만들 수 없어요
서로 다른 구조를 정의하는 세 가지 방법이 있어요
한 가지 방법은 태그 네임으로 구조를 정의하고
변수를 생성하지 않는 거죠 메모리가 할당될 때 별도의 인스턴스로 변수를 생성하죠
또 다른 방법은 변수와 구조를 생성하는
거죠 태그 이름을 넣으면 나중에
프로그램에서 해당 구조
형식의 다른 인스턴스나 다른 변수를 만들 수 있어요
이 세 번째 옵션에선 이름 없는 구조를 만들고
아래에 변수만 넣을
수도 있죠 중괄호 같은 걸 써서 변수를
만들 때마다 이걸 모두 초기화할 수 있어요
이제 구조를 초기화할게요
구조 초기화는 배열 초기화와 아주 비슷해요
각 요소는 한 쌍의 가새 안에 나열되어 있고 각각의
요소는 쉼표로 구분되어 있죠
새로 배울 게 없어요
중괄호 안에 나열된 초기 값은 정수식이어야 합니다
변수를 쓸 수 없죠 배열과 비슷해요
여기에 오늘 변수 타입의 구조 날짜를 생성합니다.
첫 번째 멤버는 7이라고 적고 두 번째는 2 세 번째는
2015라고 적습니다. 이것은 연도의 월일과 일치합니다.
왜냐하면 이것이 구조에서 정의된 순서이기
때문이죠.
배열 초기화와 마찬가지로 구조에
포함된 것보다 적은 값이 나열될 수 있어요
3개 모두를 제공할 필요는 없고 2개만 제공하면
됩니다 그러면 월과 일은 초기화되고 연도는 초기화되지
않죠
이게 날짜를 설정하죠 한 개요 12월부터
1일까지죠 날짜는 10일까지인데 초기 값은 안 나와요 1년요
초기화 목록에서 멤버 이름을 지정할 수도 있습니다 이 방법으로
어떤 주문도 할 필요가 없죠
원하는 순서대로 놓으면 거기에 의존하지 않아도 돼요
이런 것도 할 수 있어요 멤버 = 값, 날짜
= 1일이요 .월 = 12라고 할 수 있죠
이것의 초기 구문은 중괄호 안에 멤버를 넣고
.을 넣은 다음 값을 매기는 거예요. .time=12
쉼표.date=10
그 점이 필요해요 그 점이 중요하니까 그걸 잊지 마세요
점 전에 인스턴스는 필요 없어요
날짜 구조의 연도 멤버를 오늘
2015로 설정하는 거죠 다음 예제에서요
다른 멤버 변수를 생략할 수도 있다는
걸 기억하세요 이 예제는 월을 인정하는 예제라서
연도를 2015년으로 설정할게요.
아까 경우엔 사실 연도를 생략하고 월과
날짜를 각각 12와 10으로 설정했죠
복합 문자 그대로 배정도 할 수 있어요
저건 말 그대로 복합체예요
하나의 구문에서 한 개 이상의 값을 구조에 할당할 수 있습니다
복합 리터럴로 알려진 것을 이용해서요
C11에만 있는 것 같아요
여기에 오늘이라는 변수가
있다고 해 봅시다. 구조 날짜라는 변수를 생성했다고 해
봅시다. 그리고 괄호 안에 구조 날짜를 넣었어요.
중괄호 안에는 이렇게 쓰여 있죠 9 쉼표 25 쉼표 2015
말 그대로 복합 건물이죠
이 진술은 프로그램 어디서든 볼 수 있어요
.Manager를 이용해서 값을 초기화하거나 할당하는 것이
아니라 프로그램 어디에나 놓을 수 있습니다 오늘의 구조를 초기화한
후에 말이죠 진술서가 아니에요
말 그대로 복합 배정이에요
typecast 연산자는 컴파일러에게 식의 유형을 알려주는 역할을 하죠
괄호 안에 있는 것들은 cast, 구조 날짜에요.
값 목록은 캐스트를 따라가며 구조의
구성원에게 할당됩니다 그 순서대로요 순서에 따라 종속되죠
구조 변수를 초기화할 때와 같은 방식으로 나열돼 있죠
이것의 장점은 각각의 멤버
변수를 각각 다른 줄에 할당할 필요가 없다는 거죠
한 줄로 다 할 수 있어요 오늘 이 변수에 대한 새 값이라고
할 수 있죠
값을 명시할 수도 있습니다. 제가 말씀드린 것처럼.netor 표기법을 이용해서요.
이런 식으로 한 줄로 하거나 다른
줄로 하면 돼요 초기화처럼 보이지만 여전히
복합 리터럴을 하고 있죠
이 접근법의 장점은 인수가 어떤 순서로든 나타날 수 있다는
거죠 아까처럼요
이러한 할당의 핵심과 차이점은 초기화에서 일어나는 것이
아니라 프로그램의 다른 곳에서 일어난다는
것입니다 유형에 새로운 값들을 할당하기 위해서요
이번 강의에선 좋은 정보를 많이 얻었어요
스트럭츠가 얼마나 강력한지 여러 요소나 변수를
하나의 이름으로 묶는 법도 다뤘죠
그 구조를 정의하죠 구조를 정의하는 방법은 여러 가지가 있어요
그런 다음 변수를 선언해야 해요
일단 그 변수가 생기면 접근해서 그 구조에
데이터를 할당할 수 있습니다 .인원 선택 연산자를 이용해서요
다양한 표기법과 초기화 외에 다른
방법에 대해서도 얘기해보죠
구조물을 많이 사용할 거예요
여러분이 이 구문에 익숙해지는 데 도움이 될 몇 가지 어려움이 있어요
하지만 이건 시작에 불과하죠 중첩된 구조도 얘기해야죠
포인터와 구조 같은 걸 어떻게 사용하느냐는
거예요
그러니 행운을 빌어요 재미있고 신나는 섹션이 될 테니까요 고마워요