클래스의 멤버
<aside> 🏜️ 메서드의 기본 구조
접근제한자 반환타입 메서드이름(매개변수)
{
실행할 코드~
}
</aside>
접근제한자
<aside> ☝🏻 접근제한자 생략
public | protected internal | protected | internal | private protected | private | |
---|---|---|---|---|---|---|
클래스 내 | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ |
파생 클래스(동일 어셈블리) | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ | ❌ |
비파생 클래스(다른 어셈블리) | ⭕ | ⭕ | ❌ | ⭕ | ❌ | ❌ |
파생 클래스(동일 어셈블리) | ⭕ | ⭕ | ⭕ | ❌ | ❌ | ❌ |
비파생 클래스(다른 어셈블리) | ⭕ | ❌ | ❌ | ❌ | ❌ | ❌ |
public : 아무나 접근 가능
private : 정의된 곳에서만! 접근 가능
<aside> 💻 private Class
→ private Class 는.. 안쓰는것 같다 클래스 내부에 필드나 메서드에 보통 접근 제한자를 걸고 클래스 자체에는 접근제한자를 안걸고 생략하는듯
</aside>
protected : 선언한 본인 + 상속받은 자식에서만 접근 가능
<aside> ☝🏻 internal : 선언된 어셈블리 내에서만 접근 가능
→ 같은 프로젝트 파일 내에서만 접근 가능 / namespace로 구분 가능
</aside>
유니티는 기본적으로 하나의 어셈블리로 모든 소스코드를 컴파일한다!
⇒ 어셈블리 분할을 하지 않으면 유니티 내의 모든 소스코드들이 기본 클래스 외부에 선언되어 있으면 아무나 다 사용가능 (같은 폴더 내에 있지 않아도!)
근데? 클래스를 선언하고 사용할 때 꼭 void Start() 함수 내에서 해야 에러가 안난다… → 왜인지 아직 모르겠음 = !! 클래스나 구조체를 값을 할당해서 사용하러면, 일단 선언을 하고 나서 사용해야 하는데 생성된 객체를 따로 변수를 만들어서 대입하는 건 메서드 안에서만 가능하다
<aside> 🤷🏻 유니티 동일 폴더 내 스크립트 공유?
유니티에서는 동일 폴더 내에 있는 스크립트끼리는 기본 클래스 외부에 선언한 것들이 공유된다
왜냐면? 유니티에서는 기본적으로 같은 폴더 내의 스크립트들이 컴파일되어 하나의 어셈블리로 묶이기 때문에 같은 어셈블리에 포함되어서..
⇒ 같은 컴파일 단위에 속한다
</aside>
함수와 메서드
<aside> 🙉 함수와 메서드의 차이?
독립적으로 있다? ⇒ 함수
클래스 안에 있는 함수? ⇒ 메서드 </aside>
인수 : 함수가 호출될 때 함수로 전달해주는 값
매개변수 : 전달받은 인수를 함수 내부로 전달하기 위해 사용하는 변수
<aside> 🙊 인수와 매개변수의 차이?
public int Plus(int A, int B)
{
return A+B;
}
int main()
{
Plus(2,3);
}
여기에서 2, 3이 인수 / int A, int B가 매개변수
</aside>
class Human
{
string name;
float height;
int age;
public void Eat()
{
Debug.Log("Eat");
}
public void Walk()
{
Debug.Log("Walk");
}
public void Sleep()
{
Debug.Log("Sleep");
}
}
using UnityEngine;
public class MethodExample : MonoBehaviour
{
/*
- 메서드의 기본 구조
접근_제한자 반환_타입 메서드_이름(매개변수){
...실행할 코드
}
tip. 접근_제한자 생략 가능
*/
// 1. 실생활에서 자주 쓰이는 메서드 -> Half : 입력값을 반으로 나누어 반환해주는 메서드
// 2. 반환값이 없는 메서드 -> PrintNumber
// 3. 매개변수가 없는 메서드 -> GetTen
float Half(float num){
float result = num/2;
return result;
}
void PrintNumber(int num){
Debug.Log(num);
}
int GetTen(){
return 10;
}
void Start(){
float value = Half(10);
Debug.Log(value);
PrintNumber(10);
Debug.Log(GetTen());
}
}