사실 하고 싶은 게 많이 거창해서, 조금 해봤는데 너무 어려운 거야 걍 포기할까하다가

낭비가 없으면 낭만도 없다는 류의 말을 시프트업 CEO가 하더라 너무 멋있는 거임

나의 자꾸 포기하는 면모도 싫고 완벽주의 성향도 좀 내려놓고 싶어서 일단 부담 없게 공부해봤어

C언어 정도는 알아서 좀 수월한 거 같긴한데 혹시 나한테 오개념이나 잘못 생각하는 게 있으면 알려줘!

=====================

아 근데 절차 지향만 보다가 객체 지향을 보니까 너무 어렵더라고 이것도 따로 정리를 해봤어


비유를 해보자면

객체 지향-> 스마트폰(객체)이 있고 카메라앱(함수)가 있음 스마트폰 자체가 사진 찍는 기능을 내장하고 있어서 

사진 찍는 기능을 불러올 떄는 객체인 스마트폰을 한 번 거쳐서

Phone.takkePicture() 이렇게 객체의 함수를 불러올 수 있는 거임


반면에 절차 지향은 -> 사진관(함수)에 가서 얼굴(객체)를 사진사(함수)에게 보여주면 사진사가 사진을 찍어줌!!!

그래서 우리는 그냥 TakePhoto(face);이런 식으로 함수 호출만 해주면 되는 거임


이게 맞나? 아는 애들은 짚어주길 바란다

=====================




24b0d121e09c28a8699fe8b115ef0464d585e2




24b0d121e09c28a8699fe8b115ef046549a2fd3a




AI Q

'다른 스크립트에 똑같은 moveSpeed라는 변수가 있더라도, 서로 다른 별개의 변수로 인식됩니다. 즉, 간섭 방지보다는 '이 변수는 내 거니 내가 관리한다'는 개념에 가깝습니다.'

 

긍까 만약에 player이랑 teki라는 씨샵모노비헤이어가 있어 근데 나는 두 곳 모두에서 같은 무브스피드라는 이름으로 변수를 쓰고 싶은데 퍼블릭으로 해버리면 서로 충돌이 일어나니까 프라이빗으로 쓴다는 거 아냐?

AI A

네, 맞습니다! 정확하게 이해하셨습니다.

말씀하신 대로입니다. 만약 Player 스크립트에도 moveSpeed 변수가 있고, Enemy (여기서는 'teki'라고 하셨으니 Enemy라고 가정할게요) 스크립트에도 moveSpeed 변수가 있다고 해봅시다.

  • 만약 둘 다 public float moveSpeed;로 선언했다면? 각 스크립트가 붙어있는 게임 오브젝트 인스턴스(예: Player 스크립트가 붙은 'Player' 오브젝트, Enemy 스크립트가 붙은 'Goblin' 오브젝트)는 각자 고유한 moveSpeed 값을 가질 수 있습니다. public이라 해도 변수 이름이 같다고 해서 서로 충돌하거나 값을 공유하게 되는 것은 아닙니다. 예를 들어, 'Player' 오브젝트의 moveSpeed를 5로 설정하고, 'Goblin' 오브젝트의 moveSpeed를 3으로 설정할 수 있어요.
  • 하지만 public 변수는 어떤 스크립트에서든 해당 오브젝트에 접근하면 그 moveSpeed 값을 직접 읽거나 변경할 수 있게 됩니다. 이는 때로 의도치 않은 변경을 초래할 수 있어 좋지 않은 코딩 관행으로 여겨질 수 있습니다.
  • private float moveSpeed; (혹은 [SerializeField] private float moveSpeed;)로 선언했다면? 이것이 핵심입니다. Player 스크립트의 moveSpeed는 Player 스크립트 내부에서만 관리되는 독립적인 변수이고, Enemy 스크립트의 moveSpeed 역시 Enemy 스크립트 내부에서만 관리되는 독립적인 변수가 됩니다.따라서, "private으로 선언하는 것은 '이 변수는 내(스크립트) 거니까 다른 곳에서 함부로 건드리지 말고 내가 알아서 관리할게'라는 의미이며, 이는 다른 스크립트와 이름이 겹치더라도 충돌을 방지하고 각자의 고유한 값을 안전하게 유지하기 위함이다"라고 이해하시면 됩니다.
  • Player 스크립트는 Enemy 스크립트의 moveSpeed에 직접 접근할 수 없고, Enemy 스크립트 또한 Player 스크립트의 moveSpeed에 직접 접근할 수 없습니다. 서로 같은 '이름'을 가졌더라도, 각자 자신의 스크립트 안에서만 의미를 가지는 '별개의 변수'인 거죠.



24b0d121e09c28a8699fe8b115ef0468e6aee3


24b0d121e09c28a8699fe8b115ef046f574d989d


골드메탈 '키보드 마우스로 이동시켜보자'


24b0d121e09c28a8699fe8b115ef0468e3abe2



24b0d121e09c28a8699fe8b115ef046f58459999



24b0d121e09c28a8699fe8b115ef046f594c9f



24b0d121e09c28a8699fe8b115ef046f574d9198