티스토리 뷰

반응형

지난번에 구조체와 클래스의 차이점에 대해 짧게 찌끄려보려 했다가

[.NET(C#, VB) etc] - [C#] 구조체와 클래스(struct, class)에 대한 짧은 생각(개념과 차이점에 대해)_01

역시나 분량조절에 실패하는 바람에 1편으로 끊어버린 찝찝함을 해소하려

2편을 써보려고 한다.(이번에는 진짜 짧게..ㅎ)

........

지난번에는 구조체에 대해서 이야기를 했다면

이번에는 클래스에 대해서 짧게 이야기를 해 보고 마무리로 둘의 차이점에 대해 정리해보려고 한다.


클래스(class)

클래스도 구조체와 마찬가지로 변수나 메소드들을 담는 틀인건 마찬가지라고 보면 되는데

기본적인 형식은 다음과 같다.

   class Program {
        static void Main(string[] args)
        {
            int a = 1;

            void getData()
            {
                Console.WriteLine("나는 getData란 이름의 메소드입니다.");
            }
        }
    }

위 처럼 main메소드를 가질 수 있으며

변수 a도 선언할 수 있고 getData()란 이름의 메소드도 만들수 있다.

그리고 위 코드에서는 작성하지 않았지만 생성자도 존재하며 따로 선언하지 않으면 묵시적으로 디폴트 생성자가 존재한다.


그럼 바로 본론으로 들어가서... ㅎㅎ

구조체와 클래스가 기본적으로 다른점이 뭔지 정리해 보자면


1. 구조체는 값타입이고 클래스는 참조타입이다.

둘의 차이는 간단하게 다음과 같이 생각하면 된다.

값타입이란?

어떤 데이터 타입을 가진 변수를 선언하고 그곳에 직접 값을 저장하는 방식이며

스택(stack)에 할당하게 된다.

참조타입이란?

변수에 직접 데이터를 저장하는 것이 아니라 데이터가 저장된 위치를 참조하는 형식(new키워드 사용)이며

힙(heap)에 할당하게 된다

특히 이 타입의 경우에는 가비지 콜렉터에 의해 메모리가 해제될 수 있다.

2. 구조체는 상속받을 수 없다.

클래스의 경우에는 다음과 같이 간단하게 콜론(:) 키워드로 부모 클래스로부터 상속을 받을 수 있으며

    class parents // 부모 크래스
    {
        public int p_age = 40;   
    }

    class child : parents // 부모 클래스를 상속받은 자식 클래스

    {
        public void getParentsData()

        {
            Console.WriteLine("부모의 나이는 " + this.p_age);
        }
    }


public 혹은 protected 접근제어자로 선언된 변수 또는 메소드를 사용할 수 있게된다.

하지만

구조체에서는 상속은 불가능 하다.(클래스는 불가능 하지만 인터페이스는 가능하다.)

3. 디폴트 접근제한자

구조체는 디폴트 접근제한자가 public이다.

따라서 따로 public으로 선언하지 않더라도 main메소드에서 구조체의 멤버들을 접근해서 사용할 수 있다.

클래스는 디폴트가 private으로

public으로 선언하지 않으면 접근이 불가능하다.

여기까지 짧게 구조체와 클래스의 차이점에 대해서 정리해 봤는데

여러모로 봤을 때 딱히 구조체를 써야하는 이유를 찾기 어려울 수도 있을것이다.

내 생각에 구조체를 사용하는 가장 큰 이유(C#에서 계속 구조체를 지원하는 이유)는 아마도

C, C++부터 사용해 왔기 때문이지 않나 싶다.

호환성의 문제?

물론 깊게 들어가면 구조체를 꼭 써야하는 경우가 있을 수도 있지만

지금은 그냥 간단하게 이렇게 정리하고 마무리하는걸로.... ㅎㅎㅎ


반응형
댓글
반응형
05-19 00:16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함