Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

시작은 0부터

9. OOP, 클래스, 메모리 개념 본문

C# 학습일지

9. OOP, 클래스, 메모리 개념

0base 2022. 7. 13. 22:07

OOP( Object-Oriented Programming)

: 객체 지향 언어. 코드를 처음부터 설계하기보다 하나의 틀을 만들어 그 틀을 활용하여 사용함으로써 코드를 보다 간편하게 사용하는 방식을 말한다. 가령 자동차 여러 종류를 만든다고 할 때, 각각을 일일이 뼈대부터 만드는 것이 아닌 자동차라는 공통된 특징을 가진 뼈대를 만들어두고 자동차의 한 종류를 만들 때 마다 만들어둔 자동차의 뼈대를 불러와 활용하는 것이다. 이렇게 함으로써 코드를 간결하고 보다 쉽게 작성할 수 있다는 장점도 있지만 규모가 커질수록 객체화된 각각의 코드들을 관리하기 힘들어지고, 느리다는 단점이 있다.

 

클래스(Class)

: OOP에서 말하는 객체를 표현하는 일종의 데이터형이다. 객체는 상태(속성)와 행동(기능)으로 구성될 수 있는데, 이러한 객체를 생성하는 설계도이다.

 

클래스의 구성요소

상태(속성)에 대한 코드 : 멤버 변수 혹은 멤버 필드

행동(기능)에 대한 코드 : 멤버 메소드

 

클래스 형식

[ 접근제한자 ] Class [ 클래스명 ]

{

//멤버 변수(필드)

[접근제한자] [데이터형] [변수이름];

 

//멤버 메소드

[접근제한자] [반환형] [메소드이름] ([매개변수목록])

{

//명령문들

return [반환값];

}

}

 

선언된 클래스를 사용하려면?

[클래스 이름] [클래스에 포함된 이름] = new [클래스 이름]; // car SUV = new car;

 

클래스 상속 => 자식 : 부모

자식은 부모의 속성을 받는다.

 

메모리(Memory)

: 메모리(기억장치)가 클수록 한번에 처리할 수 있는 데이터의 양이 커진다.

 

< 메모리의 영역 >

코드 영역
데이터 영역
힙 영역
↓                ↑
스택 영역

코드 영역 : 실행할 프로그램의 소스코드를 읽어들이는 부분.

 

데이터 영역 : 전역 변수, 정적 변수, 컴파일 시점에 크기가 할당되며, 프로그램이 종료될 때 까지 유지된다.

(힙 또는 스택 영역에 있으면 사라질 수 있음)

 

힙 영역 : new로 새로 메모리 할당하는 것들이 들어간다. 사용자에 의해 할당 및 해제되는 공간. 이 공간에 할당하는 것을 '동적할당' 이라고 하고 new 연산자를 통해 이루어진다. 할당한 것은 해제해줘야 하는데 C#에서는 시스템(가비지 컬렉터(GC))에 의해 자동(주기적)으로 이루어진다. (주기 대비 생성을 너무 많이하면 해제가 딜레이되어 지연될 수 있다!)

런타임에 크기가 결정된다. 낮은 주소에서 높은 주소의 방향으로 할당된다.

 

스택 영역 : 변수, 매개변수 할당하는 것들. 메소드 호출시 할당되는 것. 매개변수 컴파일 시점에 할당.

 

힙과 스택은 같은 공간을 공유한다.

힙은 낮은 주소에서부터, 스택은 높은 주소에서부터 할당된다.

스택이 커지면 힙이 작아지고, 힙이 커지면 스택이 작아진다.

둘이 같은 공간을 공유하기 때문에 서로의 영역을 침범할 수 있다.

힙이 침범하면 힙 오버플로우, 스택이 침범하면 스택 오버플로우.

 

클래스 안에 Main 함수나 다른 함수에 static을 붙이면 프로그램이 실행되면서 스택을 쌓는다는 개념으로 실행 동시에 누적이 된다고 생각할 수 있다. 함수 앞에 static 을 붙이고 그 안에 변수를 넣는다면 프로그램 실행과 동시에 실행이 되기 때문에 해당 변수를 사용할 수 있지만, static을 붙이지 않을 경우 안의 변수를 불러올 수 없는 오류가 발생할 수 있다.

 

Tip

※ 비주얼스튜디오 함수에 마우스를 가져다대거나 Ctrl + Shift + Space를 누르면 형식을 볼 수 있다.

   Ctrl 누른 상태에서 클릭하면 해당 함수에 대한 정보를 볼 수 있다.