C# 객체지향, Class, 메모리, 생성자

장현태입니다·2025년 3월 24일

객체지향

프로그램 내에서 개별적으로 존재하는 각 객체들이 서로 상호작용 절차적으로 처리한다면 프로그램이 커질수록 절차적으로 관리하기 어렵기 때문에 객체지향을 사용한다.

->
1)효율적인 데이터관리, 에러의 경우 해당 객체만 확인하여 해결가능하다
2) 하나의 객체로 재사용이 가능하다

Class

하나의 객체지향으로써 설계도의 특성을 지닌다

class Player
{
=
//변수(명사) : 정보
int level;
int attack;

//함수(동사) : 행동
void Attack(Monster monster){}
void Jump(){}
}

이를 통해 main함수에 객체를 생성
-> 이떄 접근제한자를 기반으로 데이터를 관리한다
(private, public)

ex)
객체(object) -. 몬스터{ 체력, 공격하기, 죽기, 속도}
클래스 (설계도, 정보 + 행동)

  • class Monster
    {
    int hp;
    float speed;
    void Attack();
    void Die();
    }

SOLID원칙

필수는 아니지만 지킬수록 더 좋은 객체,클래스를 만들 수 있다

S : 단일 책임 원칙

  • 클래스(객체)는 하나의 기능만 담당한다

O : 개방 폐쇄 원칙

  • 확장에 열려잇어야하고 수정에 닫혀잇어야한다
  • 기존의 코드를 수정보다 코드를 추가하는것이다

L : 리스코프 치환 원칙

  • 자식객체는 언제나 부모객체 타입으로 교체 가능해야한다

I : 인터페이스 분리 원칙

  • 하나의 큰 인터페이스보다 용도에 맞게 작은 인터페이스가 낫다.

D : 의존 역전 원칙

  • 부모객체가 자식객체에 의존이 안된다

메모리

stack - heap - data - code

stack

  • 함수와 관련된 지역변수,매개변수 저장
  • 함수 종료시 데이터 삭제 (함수 호출 - 함수 종료)
  • 후입선출

heap

  • 동적 메모리 저장영역
  • 동적이란 : 사용자의 의도에따라 저장 삭제
  • 클래스 인스턴스가 저장되는 영역
    (인스턴스 생성 - 사용 안할시 삭제)
  • 주소값을 참조해서 힙영역의 주소로 클래스 가리키고있음

data영역

  • 프로그램 시작될떄 시작 종료시 사라짐
  • 정적변수(한번 저장시 변하지않음)가 저장되는 영역
    (시작 - 끝)

코드영역(code)

  • 프로그램 시작과 동시에 메모리 저장
  • 프로그램이 실행할 코드가 저장되는 영역
    (시작 - 끝)

heap - struct 예제

값과 참조형식의 차이

클래스의 경우

HeapClass local;
local = new HeapClass();

  • new로 클래스 주소를 가리키는것이 있어야지 사용가능
  • 가리키는게 없을경우 null가능

구조체의 경우

Struct local;
local.num;

  • 같이 따로 선언 없이 데이터 접근가능 struct자체 변수에 저장
  • 가리키는게 없기때문에 null안됨

1) 클래스

2) 구조체

class -> 참조 (바로가기) 원본 객체 자체를 넘길때 사용
struct -> 값(데이터 저장소)

struct
값타입의 형식에선 스택 메모리에 저장하는 것으로 실제 데이터의 영역에서 전달을 주고 받으므로 struct형식에서 원본의 데이터값을 복사받아 가져온다.

class
참조타입의 형식에선 힙 메모리의 주소를 참조해 주소를 가리키고 데이터를 전달하여 주고받는 형식으로 데이터의 값을 직접적으로 영향을 주는 효과를 볼 수 있다.

클래스 생성자

  • 클래스 인스턴스를 만들 때 호출되는 역할
  • 생성자를 안 만들경우 자동으로 생성자 만들어줌
  • 예를들어 레벨의 경우 0, hp가 0인경우 기본 설정값이 필요할때 사용

class자기 자신을 호출하는 방식으로 함수의 형태는 작성해주지 않고 사용할 수 있다.
초기 설정에서 0이 되면 안되는 데이터에 값을 넣어서 사용가능하다.

0개의 댓글