디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[💡정보] C# 모드 만들기?-클래스, 인스턴스, 참조, 상속

스갤러(14.45) 2024.05.15 20:42:04
조회 162 추천 7 댓글 10
														

찻집에 올리는거 말투 수정해서 올림



ㅎㅇ 오래전에 두개 쓰고 유기했었던 C# 모드 만들기 강좌글의 번외편임

암만 강좌 써봤자 이거 모르면 제대로 만들 수 있는 게 별로 없다는 걸 깨달았음

그래서 도피하느라 스듀 좀 했음 재밌더라


이해가 좀 쉽게 되라고 부정확한 면이 있음

정확한 걸 원하면 직접 찾아보는 게 훨씬 유익함


0. 한 장 정리

a05c04ad1b2ab44caa3506489a03f0b1ea937792e69909f9edf62888c76dcba1a93e18382731da27406685

(빨간 화살표는 지금 보니까 방향이 반대인 게 맞는듯)


1. 클래스

쉽게 말해서 틀(틀딱아님)

이 틀은 여러 변수(또는 상수)들로 이루어진 필드와, 그 필드들을 조작하거나 이용하는 코드들의 블록인 메서드가 기본임

클래스는 객체의 타입이기도 함

// 실제 게임의 코드와는 다릅니다!!!

public class Farmer {

    // 필드

    public string name;

    public favorite;

    public int money;

    public int maxHp;

    public int maxEnergy;

    public int hp;

    public int energy;

    public bool achivedPerfection;


    // 메서드

    public void AddMoney(int amount) {

        money += amount;

    }

    public void RestoreAll() {

        hp = maxHp;

        energy = maxEnergy;

    }

    public bool DidAchivePerfection() {

        return achivedPerfection;

    }

}

필요한 경우 클래스에 객체가 생성될 때 실행되는 메서드인 생성자를 정의할 수 있음

객체를 생성하면서 변수를 받고 싶은 경우에는 매개변수를 추가하면 됨. 어떤 매개변수를 받는지에 따라서 생성자나 메서드를 필요한 만큼 정의할 수 있음(오버로드)

// 실제 게임의 코드와는 다릅니다!!!

public class Farmer {

    // 필드

    public string name;

    public favorite;

    public int money;

    public int maxHp;

    public int maxEnergy;

    public int hp;

    public int energy;

    public bool achivedPerfection;

    

    // 생성자

    public Farmer() { // 생성자의 메서드 이름은 클래스의 이름과 같습니다. 반환 형식은 포함되지 않습니다.

        name = "농부";

        favorite = "ConcernedApe";

        money = 500;

        hp = maxHp = 100;

        energy = maxEnergy = 270;

        achivedPerfection = false;

    }

    public Farmer(string playerName, string favoriteThing) { // 오버로드

        name = playerName;

        favorite = favoriteThing;

        money = 500;

        hp = maxHp = 100;

        energy = maxEnergy = 270;

        achivedPerfection = false;

    }

    

    // 메서드

    public void AddMoney(int amount) {

        money += amount;

        if (money < 0) {

            money = 0;

        }

    }

    public void RestoreAll() {

        hp = maxHp;

        energy = maxEnergy;

    }

    public bool DidAchivePerfection() {

        return achivedPerfection;

    }

}

클래스가 정의되었으면 아래와 같이 새로운 객체를 생성할 수 있음

// 매개변수가 없는 생성자(Farmer())가 호출됩니다.

Farmer myFarmer = new Farmer();

// 문자열 두 개를 매개변수로 하는 생성자(Farmer(string playerName, string favoriteThing))가 호출됩니다.

Farmer notMyFarmer = new Farmer(playerName: "농장주", favoriteThing: "스듀");


2. 인스턴스

객체 생성을 통해 실제로 생성된 객체임. 인스턴스마다 같은 필드라도 값이 다를 수 있고 그래서 같은 메서드의 실행 결과도 달라질 수 있음

print("myFarmer의 좋아하는 것: " + myFarmer.favoriteThing); // "myFarmer의 좋아하는 것: ConcernedApe"

print("notMyFarmer의 좋아하는 것: " + notMyFarmer.favoriteThing); // "notMyFarmer의 좋아하는 것: 스듀"


myFarmer.achivedPerfection = true;

bool boolean1 = myFarmer.DidAchivePerfection(); // true

bool boolean2 = notMyFarmer.DidAchivePerfection(); // false


3. 참조

기본 자료형(int, string, bool 등등)을 제외한 타입의 경우에는 대입할 때 해당 객체를 참조하게 됨. 참조는 직접 값을 끌어오는 것이 아니라서 참조된 객체가 다른 인스턴스에 의해 영향을 받을 수 있음

해골들에게 두들겨맞는 농부의 예시를 보면서 알아보자

// 실제 게임의 코드와는 다릅니다!!!


// 해골의 클래스 정의

public class Skeleton {

    // 필드

    Farmer target;

    int hp = 100;

    

    // 메서드

    public void SetTarget(Farmer player) {

        target = player; // 전달받은 Farmer 타입의 객체를 참조합니다.

    }

    public void AttackTarget(int damage) {

        if (target != null) { // target이 null일 경우, 필드의 값을 조작하면 NullReferenceException 예외가 발생합니다.

            target.hp -= damage;

        }

    }

}


// 인스턴스 생성

Skeleton skel1 = new Skeleton();

Skeleton skel2 = new Skeleton();

Farmer farmer = new Farmer();


// 메서드로 해골들의 타겟 지정

// 두 해골이 같은 Farmer를 타겟으로 합니다(같은 객체를 참조).

skel1.SetTarget(farmer);

skel2.SetTarget(farmer);


// 공격

while (farmer.hp > 0) { // 반복문: farmer의 hp가 0 초과인 동안 반복

    skel1.AttackTarget(5);

    skel2.AttackTarget(10);

    // 두 해골이 같은 객체를 참조하기 때문에, 반복 한 번당 farmer의 hp가 15씩 깎이게 됩니다.

    // hp: 85 -> 70 -> 55 -> 40 -> 25 -> 10 -> -5

}

아주 중요하다. 잊지 말자


4. 상속

클래스를 상속함으로써 그 클래스의 멤버(필드, 메서드, 생성자 등)를 쓸 수 있고, 파생된 클래스만의 멤버를 추가하거나 기본 클래스의 멤버를 재정의해서(오버라이드) 클래스를 확장할 수 있다.


* static 한정자

클래스에 붙으면 그 클래스는 프로그램에서 단 하나만 존재함.

클래스의 멤버에 붙으면 그 멤버는 각 인스턴스가 아닌 클래스 자체에 속하게 되고, 모든 인스턴스에 걸쳐 단 하나만 존재한다



질문이나 제안이 있으면 알려주셈

그리고 틀린 정보도 있다면 알려줘

정확하게 아는 건 중요하다고 생각하거든


그럼 다음 시간에


* 펌, 재업 가능

추천 비추천

7

고정닉 4

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2864 설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
220518 공지 스듀갤 정보글 모음 (24. 05. 16 갱신) [5] 지나가는고영갤로그로 이동합니다. 24.05.16 4497 3
217510 공지 스타듀밸리 갤러리(스듀갤) 규정. Ver 2.2 [30] 아빠양갤로그로 이동합니다. 24.05.05 2246 19
217511 공지 호출벨 (갤규정 위반글 신고) ПпПп갤로그로 이동합니다. 24.05.05 641 0
214856 공지 번역 오역 및 업뎃 제보란 [59] 아빠양갤로그로 이동합니다. 24.04.23 1427 6
188322 공지 스듀갤 유용한 글 모음 (공지 정리) [6] ПпПп갤로그로 이동합니다. 23.07.16 29525 4
132776 공지 팀 아빠양 / 대규모 모드 전용 한국어 모드 다운로드 및 적용 방법 [92] 아빠양갤로그로 이동합니다. 21.07.30 94142 86
223769 일반 이새끼 좀 좆같네 [2] ㅇㅇ갤로그로 이동합니다. 05:36 138 0
223768 일반 뉴비 돈 확벌리기 시작하니까 몬가 팍식음 [6] 스갤러(211.109) 03:00 198 0
223767 일반 거스가 왜 1년차 봄 23일 화요일에 없지? [2] ㅇㅇ(1.252) 02:38 84 0
223766 일반 스타듀밸리 찍싸는애들 ㅈㄴ많나보네 [5] 스갤러(14.138) 02:37 222 0
223765 ❓질문 라이프사이클 모드 중간에 넣어도 됨? 스갤러(223.62) 02:31 35 0
223764 일반 무슨상자 채워야하는게 있는데 뭐채워야하는지 까먹음 [5] ㅇㅇ(118.235) 02:25 85 0
223763 ❓질문 이거 버그 맞지? [7] 스갤러(210.217) 02:13 119 0
223762 일반 봄10일 떴다!! [1] 스갤러(210.107) 01:43 110 1
223761 일반 모든 전설 물고기 수집 완 [2] ㅇㅇ갤로그로 이동합니다. 01:21 155 0
223760 일반 스타듀밸리 아이폰으로 하는데 화면이 너무너무커 스갤러(223.38) 01:05 55 0
223759 일반 세바스찬이랑 결혼했는데 이새끼 싸가지가 [4] ㅇㅇ갤로그로 이동합니다. 01:00 173 2
223758 ❓질문 올가 집 부엌 장식장이 어디야? [1] ㅇㅇ(223.39) 00:57 49 0
223757 일반 아... 이리듐바늘 왜 안나와 스갤러(210.217) 00:48 44 0
223756 일반 좆에르새끼 볼수록 어이가 없네 [4] ㅇㅇ(211.197) 00:48 151 2
223755 일반 무슨 짓을 한 거냐 과거의 나 ㅇㅇ갤로그로 이동합니다. 00:46 111 0
223754 일반 초상화리텍 Beach.xnb는 언제적용됨? [1] ■x(211.110) 00:45 74 0
223753 일반 보관함 비어잇으면 옮겨지지않음? [1] 스갤러(59.25) 00:45 77 0
223752 일반 물고기연못으로는 돈 많이 못벌어? [4] ㅇㅇ(223.62) 00:38 83 0
223751 일반 결혼확장모드는 호감도 14 이벤트 없음? ㅇㅇ(121.153) 00:16 33 0
223750 ❓질문 농사지을때 심은 날까지 포함하는거임? [3] 모노아라갤로그로 이동합니다. 00:15 96 0
223749 일반 내 집 위치는 못 옮김? [1] ㅇㅇ(223.62) 00:12 58 0
223748 ❓질문 물고기연못,무지개송어,오리(?) [2] ㅇㅇ(220.78) 00:08 55 0
223747 ❓질문 겨울에 리텍풀리는거 어케해야해 [4] ㅇㅇ(1.247) 00:02 75 0
223746 일반 압도적인 비율의 흑인요정과 흰색요정. [2] 스갤러(119.192) 00:00 180 0
223745 일반 마그누스랑 이혼했는데 모건한데 존나 신경질냈나보네.. [1] 스갤러(221.163) 06.03 84 0
223744 ❓질문 뉴비 광산 파밍 질문좀 [4] 스갤러(59.24) 06.03 75 0
223743 일반 스위치판은 언제 1.6 업데이트해주는거임?? [3] 스갤러(211.185) 06.03 91 0
223742 일반 번들 난이도 높이는 모드 까니까 왜캐빡셈 ㄷ 스갤러(223.38) 06.03 70 0
223741 일반 집앞에 버섯 나무가 자랐는데요... [6] 스갤러(42.113) 06.03 135 0
223740 ❓질문 자쓰담 [2] ㅇㅇ(220.78) 06.03 85 0
223739 ❓질문 마요네즈기계 [3] ㅇㅇ(220.78) 06.03 83 0
223738 일반 마루 하트8 이벤은 플레이어 다치고 끝임? ㅇㅇ(222.237) 06.03 52 0
223737 일반 님들 이거 물건 한번에 5개씩 밖에 못사나요? [2] ㅇㅇ갤로그로 이동합니다. 06.03 159 0
223736 일반 컴알못인데 [16] 스갤러(211.235) 06.03 192 0
223735 일반 아 고대열매가 더 비싼줄알고 [6] 스갤러(49.166) 06.03 205 0
223734 ❓질문 집 모드 깔면 NPC 스케줄 망가짐? 스갤러(180.229) 06.03 44 0
223733 일반 색감 고트의 계절 [5] ㅇㅇ갤로그로 이동합니다. 06.03 206 3
223731 ❓질문 자동채집기 [6] ㅇㅇ(220.78) 06.03 95 0
223730 일반 이스트 스카프 깐 스붕이 이거 알았음? [4] ㅇㅇ갤로그로 이동합니다. 06.03 91 0
223729 일반 겨울에 파우더멜론보다 겨울씨앗모음이 좋은 거 같은데 착각임? [4] 스갤러(14.53) 06.03 132 0
223728 ❓질문 갤 ts모드 쓰는사람 봄꽃무도회 잘 됨? 이거 왜이러지 [6] ㅇㅇ갤로그로 이동합니다. 06.03 156 0
223727 일반 디씨에서 스듀 갤이 제일 순한 맛인듯ㅋㅋㅋ [8] ㅇㅇ(1.241) 06.03 246 1
223726 ❓질문 캐롤라인 소꿉친구모드 질문 [1] ■x(211.110) 06.03 40 0
223725 일반 (대확장) 양식연못 5개 만들었는데 뭐키울지 추천좀해주세요 [2] 스갤러(180.69) 06.03 93 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2