2019. 11. 13. 14:45ㆍ더 쉽게 쓴 자바(소.자.바)19.11.07
* 본 블로그는 개인 공부용으로 해당 내용은 자북의 '최영관'님이 저자이신 소설같은 자바를 읽고 정리한 내용으로써 문제가 있을 시 모두 내리도록 하겠습니다.
`
2.2.1 구조체란?
구조체는 클래스가 없던 표준 C 시절에 새로운 데이터 타입을 만드는 역할을 담당하고 있었다.
현재 우리가 언급한 데이터 타입은 분명히 하나만의 데이터를 담을 수 있는 데이터 타입이다.
"int a = 3"이라고 했을 때 우리가 다시 a라는 변수에 다른 수를 담고자 한다면 3이라는 값은 사라지게 된다. 즉, a = 5라고 했을 때 a에 들어 있던 3은 없어지고 다시 5라는 수가 a의 메모리에 자리를 잡게 된다. 이러한 측면에서 기본 데이터 타입의 문제점은 단 하나의 데이터만을 넣을 수 있다는 것이다. 그렇다면 만약 데이터 타입이 2개의 수를 담을 수 있다고 한다면 어떻게 될까? 표준 C(ANSI C)언어에서는 이를 구조체라는것을 사용하여 해결하고 있다. 물론, 자바 언어에서는 사용하지 않지만 구조체의 의미는 객체 언어의 역사를 말해 주고 있기 때문에 구조체에 대하여 약간의 지식을 가지고 있으면 자바 언어가 어떠한 구조로 되어 있는지 쉽게 이해할 수 있다. 구조체의 정확한 문법 구조는 알 필요가 없다. 단순이 '아~, 이렇게 만다는 거구나'할 정도로만 이해하면 된다. 일단 구조치의 예를 살펴보자.
- 12 -
2.2.2 구조체를 만드는 방법
앞서 클래스로 데이터 타입을 만든다고 했다. 구조체는 데이터 타입을 생성하는 데이터 타입 생성기 역할을 하고 있기 때문에 클래스와 같은 레벨에 존재한다. 그래서 구조체는 클래스와 동급이다. 구조체는 완벽하게 클래스와 그 의미가 같다. 그리고 초기의 구조 또한 클래스와 아주 흡사하다. 구조체의 위치는 아래에서와 같이 최상위에 존재한다.
그럼 이제 구조체로 데이터 타입을 생성하는 예를 살펴보자.
※ 구조체 사용의 예
struct PERSON{
int age;
long height;
float weigth;
}
family_memer;
struct PERSON sister; //C style structure declaration
PERSON brother; //C ++ style structure declaration
sister.age = 13; //assigh values to members
brother.age = 7;
자바 언어는 C++의 문법 구조를 따르고 있으며 C++은 C 언어를 기반으로 하고 있다.
C 언어의 구조체는 C++에 와서 그 전과는 완전히 다른 모습인 class라는 이름으로 발전함과 동시에, 원래부터 존재하고 있던 구조체와 더불어 공존하게 된다. 현재 소개되는 C, C++ 문법을 잘 살펴보면 특정한 Rule을 찾을 수 있는데, 이러한 Rule은 자바 언어에서도 그대로 사용하게 된다.
그럼 이제 위의 구조체에 대해 예를 들어가며 하나씩 따져보도록 하자.
구조체라는 것은 앞에 struct라는 키워드를 사용하며, 이름을 지정하고 있다. 즉 PERSON이라는 이름으로 구조체를 만든다는 의미다. 그리고 그 내부에는 3개의 변수를 포함하고 있다. struct 키워드를 이용하여 3개의 변수를 묶어서 PERSON이라고 부르겠다는 것이다. 이를 하나씩 분해해서 보면 다음과 같다.
- 13 -
* 데이터 타입과 변수와 상수의 구조
■ struct : 구조체를 만드는 키워드
■ PERSON : 구조체로 만들어진 새로운 데이터 타입
■ int age : PERSON 내부의 멤버
■ int height : PERSON 내부의 멤버
■ int weight : PERSON 내부의 멤버
이 부분에서 구조체에 대해 헷갈리지 않게 이해를 잘해야 한다. 구조체는 새로운 형태의 데이터 타입을 만드는 역할을 한다. 이러한 점에서 구조체는 클래스와 같은 역할을 하는데 여기서 PERSON은새로운 데이터 타입이며 struct은 표준 C 언어에서 제공하는 데이터 타입 생성기라 할 수 있다.
* 그럼 이 구조체는 누가 만들수 있을까?
: 그것은 누구나 만들 수 있으며 여기서는 책의 저자가 임의의 이름을 하나 만들었다.
* PERSON 이라는 이름은 무엇일까?
: 새로운 데이터 타입의 이름이다.
* struct는 무엇을 하는 것일까?
: 새로운 데이터 타입을 만들 수 있게 해주는 키워드이다.
* age, height, weight는 새로운 데이터 타입 내부에 존재하는 멤버이다.
정리를 해보자. 기존에는 주어진 데이터 타입으로 데이터를 하나만 넣을 수 있는 변수를 선언하여 하나의 데이터만을 넣어 사용했다. 그런데 이제는 달라졌다. 구조체를 이용하여 PERSON이라는 새로운 데이터 타입을 만들었으며, 그 속에는 3개의 변수를 포함하고 있으며, 3개의 변수들을 대표하는 이름을 바로 PERSON으로 하겠다는 것이다.
앞 장에서 언급한 데이터 타입을 상기시켜보자. 데이터 타입은 어디에 사용한다고 했나? 바로 변수를 선언하는데 사용할 수 있다. 위의 만들어진 데이터 타입인 PERSON을 이용하여 아래와 같이 변수를 선언했다.
PERSON brother;
이와 같이 변수를 하나 만들었을 때(= 선언했을 때) 메모리가 하나 생성된다. 여기서, 변수의 이름은 누가 뭐래도 brother이다. 하지만 아주 곤란한 문제가 발생한다. 기존의 방식대로라면 이 속에 있는 3개의 변수에 값을 넣을 수가 없다. 그래서 나온 것이 점의(.) 원리이다. 그냥 단순이 이해하자면 소속이라는 의미다.
PERSON brother;
brother.age = 100;
brother.height = 170L;
brother.weight = 37.5F
- 14 -
이와 같이 사용자가 임의로 새로운 데이터 타입을 만들고, 그 타입을 사용할 수 있게 하는 것이 ANSI C의 구조체이다. 구조체의 의미는 여기까지만 알아두자. 더 이상 구조체는 자바에서 사용되지 않는다. 하지만 이 구조체야 말로 자바 언어에 대한 핵심의 의미를 그대로 담고 있으니 그 느낌만큼은 정확히 알아두어야 한다.
2.2.3. 결론
구조체와 클래스의 사용법이 동일하다면 왜 굳이 구조체를 사용하지 않고 새로운 형태의 클래스를 만들었을까?
바로 이 차이점이 클래스만의 특징이며 객제 지향 언어의 장점이다. 앞으로 구조체보다 어떠한 면에서 클래스가 나은가를 알게 된다면 클래스의 개념을 어느 정도 파악하고 있다고 말 할 수 있다.
그럼 차라리 뭐가 다른지 답부터 보고 다음으로 넘어가자. 구조체와 클래스는 데이터 타입의 생성이라는 측면에서는 같은 역할을 한다. 클래스가 구조체보다 강력한 점은 접근제어, 상속의 개념, 그리고 메소드의 활용 부분이 클래스에 추가 되었다는 점이다. 자바를 배운다는 것은 바로 클래스의 장점을 배우는 것이다.
다음 절에서 클래스를 만드는 방법을 살펴보자.
*클래스와 구조체의 차이점 : 접근제어, 상속의 개념, 그리고 메소드의 활용 부분이 구조체에 비해 추가되었다.
'더 쉽게 쓴 자바(소.자.바)19.11.07' 카테고리의 다른 글
[소.자.바] 4.6 this의 개념(완료) (0) | 2019.12.12 |
---|---|
[소.자.바] 4.5 Inheritance와 Overriding(완료) (0) | 2019.12.09 |
[소.자.바] 3장. The Class(21 ~ 23, 완료) (0) | 2019.11.14 |
[소.자.바] 2.4 클래스만의 특징(17 ~ 20, 완료) (0) | 2019.11.14 |
[소.자.바] 2.3 클래스로 데이터 타입을 만드는 방법(15 ~ 20, 완료) (0) | 2019.11.14 |