NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    Java 7. Java의 구조체 (Struct)

    페이지 정보

    본문

    안녕하세요. 소심비형입니다. 너무 오랫만에 자바 관련해서 글을 쓰게 되는군요. 오늘은 C나 C#에 있는 구조체에 대해서 알아보도록 하겠습니다.

     

    먼저 결론부터 말하자면, 자바에는 구조체를 정의할 수 있는 Struct 키워드가 없습니다. 이 말은 C#에서의 구조체를 자바에서 만들 수 없다는 의미입니다. 하지만, C#에서 사용하는 구조체도 클래스(약간의 제약이 있긴 하지만...)이므로 자바에서 클래스로 다른 언어에서 말하는 구조체를 직접 구현해서 사용할 수 있습니다. C#에서는 구조체와 클래스간의 제약이 존재하지만 자바의 경우에는 클래스와 똑같이 사용됩니다.

    wu0FROm.png

     

     

    혹시라도 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);
        }
    }

     

     

    위의 코드를 실행해보면 여러분이 예상한 결과가 출력되는 것을 확인할 수 있습니다.

    QejC8pV.png

     

     

    다른 언어에서 말하는 구조체와는 다르죠. 엄밀히 말하면 클래스입니다. 클래스이므로 new로 인스턴스를 생성해야하구요. C#은 new로 인스턴스화 하지 않아도 됩니다. C++처럼 배열을 초기화하는 방식으로 사용하면 좋겠지만, 이 부분은 Java와 C# 둘다 불가능합니다. C++에서 넘어오신 분들은 불편할 수 있죠. Java로 개발 하다보면 이런 종류의 데이타를 핸들링할 때 반복기를 이용하여 값을 할당하고 가져와야 하기 때문에 그리 어려운 부분은 없을겁니다. 사실 구조체가 그리 많이 쓰이지도 않구요. 어떻게보면 ORM이 이와같은 형태로 더 자주 이용된다고 볼 수 있습니다.

     

    그렇더라도 분명 장점은 존재합니다. 단순 배열로 데이타를 채우기 보다는 각각 속성에 데이타를 채우는게 보다 명확하기 때문에 가독성면에서 좋습니다. 이 외에도 C#의 경우에는 Struct 키워드를 사용하면 Stack 영역에 할당되므로 메모리의 사용량이나 속도에서 얻는 이점도 존재합니다.

     

    다음 시간에...

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.