DAY5_retrospective

Heejin Jo·2021년 8월 29일
0

Unity_C#

목록 보기
9/16

ref 의 의미

변수 이해하기

cs로 swapValue 함수를 만들어보자


public swapValue(int a, int b){
	//a와 b의 값을 바꿔주는 함수를 만들어보자
    }
	

swift라면 아래와 같이 표현될거임

func swapValue(int: a, int: b)->Int{
}

보이드 스타트에 만들 함수를 불러보자
c#에서 ; 까먹지 말고!

void start() {
int a = 2;
int b = 5;

swapValue(a,b);

//유니티에서 보이게 해주기 위해 
Debug.log($"a:{a}, b:{b}")	//$가 swift의 \() 같은 역할, 스트링내에서 변수읽기

보이드 스타트에서 변수를 초기화 해놓은 상태, 즉 외부매개변수
그러면 이제 어떻게 a에 b값이 들어가고 b에 a값이 들어가게 할까?

public swapValue(int a, int b) {
	a = b
   }

이렇게 표현한다면 a에 b값이 들어가 있는 상태 그런데 여기서 만약

public swapValue(int a, int b) {
	a = b
 	b = a
 }

이렇게 표현한다면? 우로보로스만들기임ㅋ 그럼 대체 어떻게 b에 a값을 넣을 수 있지?
이 때 바로 임시 변수를 설정해두면 해결됨

public swapValue(int a, int b) {
	int temp = a
    	a = b
	b = temp
}

이렇게 해놓으면 위에서 아래로 순서를 읽는 코드특성상 temp에 순수한 a값이 저장되어있고
a에 b값이 넣어져서 a는 5인 상태여도 temp는 여전히 a값인 2를 가지고 있어서 서로 교차가 가능해짐

근데 이 상태로 유니티 뽑으면 여전히 a = 2, b = 5임 왜 그럴까?
값이 복사되서임

void start(){
int a = 2;
int b = 5;

swapValue(a, b);

Debug.log($"a: {a}, b: {b}");
}

public swapValue(int a, int b) {
	int temp = a
    
    a = b
    b = temp
}

이상태에서

void start(){
int a = 2;
int b = 5;
//변수는 여기 선언되어 있고 

swapValue(ref a, ref b);
//함수에게 변수를 전달할 때 값을 복사해서 전달하는 게 아니라
//해당 값의 참조값을 전달해서 원래 변수를 바꿔버리는 거

Debug.log($"a: {a}, b: {b}");
}

public swapValue(ref int a, ref int b) {
	int temp = a
    
    a = b
    b = temp
}

이렇게 바꿔줘야해.

가변변수 이해하기

string Alltext (params string[] strings)
{
	string ref string = "";
    
    for (i = 0; i < string.length; i++)
    {
    	refString += string.length[i];
    }
    return refString

(params string[] strings) 라는 뜻은

params 나는 이제 매개변수를 만들거야
string[] 여러개 문자열을 담을 수 있는 배열을 선언하고 싶어
strings 그리고 이거를 strings라고 부를거야

라고 볼 수 있겠다.

이름을 받으면 성과 이름을 나눠서 출력해보기

void GetFirstAndLastname(string full, string first, string last){
	int total_length = full.Length;
	first = full.Substring(0, total_length -2);
	last = full.Substirng(total_length - 2);
}

void start(){
	string firstname = "";
    	string lastname = "";
	GetFirstAndLastname("조희진", firstname, lastname);

이렇게만 하면 출력이 안 됨 ref를 해줘야 함

void GetFirstAndLastname(string full, ref string first, ref string last){
	int total_length = full.Length;
	first = full.Substring(0, total_length -2);
	last = full.Substirng(total_length - 2);
}

void start(){
	string firstname = "";
    	string lastname = "";
	GetFirstAndLastname("조희진", ref firstname, ref lastname);
    
    Debug.log ($"성 : {lastname), 이름:{firstname})

ref를 쓰지 않으면 아무리 함수 안에서 값을 바꿔도 함수를 불러올 때 값이 변경되어 오지 않는다.

out

out은 ref랑 매우 흡사한데

void GetFirstAndLastname(string full, out string first, out string last){
	int total_length = full.Length;
    first = full.Substring(0, total_length -2);
    last = full.Substring(total_length -2);
    }
 
void start(){
	GetFirstAndLastname("조희진", out string firstname, out string last name);
    Debug.log($"성: {firstname], 이름: {lastname}")
    

이렇게

class

띵언 고준일강사님 설명개찰짐
리모콘을 예시로 들어서 설명해주셨는데
사실 리모콘 안에 수많은 기능 중 우리가 누르는 버튼은 몇 개 안 된다

기능은 가지고 있지만 외부로 노출이 안 되어야 하는 경우

프라이빗으로(기본값)으로 properties 나 methods를 만드는 거고
이 중에서 마치 리모컨 버튼 처럼 몇 몇 개만 public으로 해주는거

이 때 프라이빗으로 할당하면 어떻게 초기값을 만들까? 가 문제가 되는데
이 때 '생성자' 를 만듦으로 해결
생성자 메서드는 뭔데?

해당 클래스가 인스턴스로 생성될 때 해야할 일을 처리해주는 메서드

그래서 생성자는 해당 인스턴스가 생성될 때 호출되는 메서드끼 때문에 외부에 노출될 수 있게 퍼블릭으로 해주고 클래스명과 똑같이 해줘야해
얘가 하는 일은 properties를 초기화 해주는 역할을 한다.

-->> 사실 이 내용은 이미 익히 알고 있던 내용인데...이걸 이렇게 리모콘 비유로 들으니까 완전 뇌리에 팍


class Book (){
	var writer = "Heejin";
    var pages = 456;
    















profile
core를 기르자

0개의 댓글