Java 7. Java의 구조체 (Struct)
페이지 정보
본문
안녕하세요. 소심비형입니다. 너무 오랫만에 자바 관련해서 글을 쓰게 되는군요. 오늘은 C나 C#에 있는 구조체에 대해서 알아보도록 하겠습니다.
먼저 결론부터 말하자면, 자바에는 구조체를 정의할 수 있는 Struct 키워드가 없습니다. 이 말은 C#에서의 구조체를 자바에서 만들 수 없다는 의미입니다. 하지만, C#에서 사용하는 구조체도 클래스(약간의 제약이 있긴 하지만...)이므로 자바에서 클래스로 다른 언어에서 말하는 구조체를 직접 구현해서 사용할 수 있습니다. C#에서는 구조체와 클래스간의 제약이 존재하지만 자바의 경우에는 클래스와 똑같이 사용됩니다.
혹시라도 C#의 구조체에 대해서 궁금하신 분은 [ 여기 ]에서 확인할 수 있습니다. 하지만, 이 글을 읽는데 크게 도움이 되거나 하지는 않을겁니다. 몰라도 아무 상관이 없거든요^^;
C#이나 C++에서 제공하는 구조체와 다르지만, Java로 비슷하게 만들수는 있습니다. 하지만, 언어의 차이에서 오는 성능과 사용 편의성은 흉내낼 수 없는 부분도 있습니다. 아래 예제를 통해 어떻게 만들고 사용하는지 알아보도록 하겠습니다.
StructJava.java
package JavaType;
public class StructJava {
enum Sex {
Male, Female;
}
// 구조체를 대신할 Nested 클래스.
class People {
public String Name;
public int Age;
public Sex Sex;
public People(String name, int age, Sex sex) {
this.Name = name;
this.Age = age;
this.Sex = sex;
}
}
public static void main(String[] args) {
People people = new StructJava().new People("아이언맨", 52, Sex.Male);
System.out.println(people.Name);
System.out.println(people.Age);
System.out.println(people.Sex);
}
}
위의 코드를 실행해보면 여러분이 예상한 결과가 출력되는 것을 확인할 수 있습니다.
다른 언어에서 말하는 구조체와는 다르죠. 엄밀히 말하면 클래스입니다. 클래스이므로 new로 인스턴스를 생성해야하구요. C#은 new로 인스턴스화 하지 않아도 됩니다. C++처럼 배열을 초기화하는 방식으로 사용하면 좋겠지만, 이 부분은 Java와 C# 둘다 불가능합니다. C++에서 넘어오신 분들은 불편할 수 있죠. Java로 개발 하다보면 이런 종류의 데이타를 핸들링할 때 반복기를 이용하여 값을 할당하고 가져와야 하기 때문에 그리 어려운 부분은 없을겁니다. 사실 구조체가 그리 많이 쓰이지도 않구요. 어떻게보면 ORM이 이와같은 형태로 더 자주 이용된다고 볼 수 있습니다.
그렇더라도 분명 장점은 존재합니다. 단순 배열로 데이타를 채우기 보다는 각각 속성에 데이타를 채우는게 보다 명확하기 때문에 가독성면에서 좋습니다. 이 외에도 C#의 경우에는 Struct 키워드를 사용하면 Stack 영역에 할당되므로 메모리의 사용량이나 속도에서 얻는 이점도 존재합니다.
다음 시간에...
- 이전글Java vs C# (열거형과 구조체, enum and struct) - 5부 20.08.16
- 다음글6. Enum 형식. 20.08.16
댓글목록
등록된 댓글이 없습니다.