Study/개념 정리27 [Study] GC 가비지 컬렉터란?- 가비지 컬렉션 => 시스템에서 더이상 사용하지 않는 동적 할당된 메모리(Garbage)를 찾아 자동으로 다시 사용가능한 자원으로 회수하는 것- 가비지 컬렉터 => 시스템에서 가비지컬렉션을 수행하는 부분 => 할당된 힙 메모리 공간이 부족할 때 GC가 힙 메모리를 돌며 사용하지 않는 메모리를 회수한다.- 메모리 관리법- C, C++ 언어는 메모리 관리를 위해 프로그래머가 객체의 생성뿐 아니라 삭제도 담당해야 한다. 이때 삭제를 제대로 하지 않으면 메모리 누수나 버그가 발생한다.더보기메모리 누수란?메모리의 힙 영역에 할당된 부분이 참조되지 않는데도 메모리가 해제되지 않은 채로 계속 점유중인 것 이를 해결하기 위해 가비지컬렉터가 존재. 가비지.. 2024. 7. 8. [Study] 상속과 인터페이스 클래스를 다른 클래스로 상속하기 위한 방법class 부모 클래스{}class 자식 클래스 : 부모 클래스{} 다이아몬드 문제- 부모 클래스가 같은 조상 클래스를 상속받는 경우 발생 - 다중 상속이 가능한 경우 발생- 인터페이스를 사용하여 구현하면 문제가 사라진다. 인터페이스란? - 인터페이스는 다중 상속을 지원해줌- 이름 정의시 앞에 I를 붙이는 규칙을 가짐- 다른 클래스에서 해당 인터페이스를 구현하여 동일한 기능을 공유 -> 코드의 양이 많아질수록 효율성 증가interface IMyInterface{ void Method1(); int Method2(string str);}class MyClass : IMyInterface{ // 반드시 클래스 내에서 구현해주어야함 p.. 2024. 7. 5. [Study] 스택 메모리 , 힙 메모리 참조 형식과 값 형식형식값 형식참조 형식데이터 저장 방법 변수가 값을 담는다 변수가 값 대신 값이 있는 곳의 위치(주소)를 담는다데이터 저장 위치데이터를 스택에 할당데이터를 힙에 할당 ( 힙 메모리의 주소를 스택에 저장)초기화 방법0으로 초기화Null로 초기화 메모리에서 힙과 스택의 차이점스택- 정적으로 메모리에 할당- 스택은 FILO 구조이다. 변수가 소멸할 때 먼저 들어온 데이터가 마지막에 소멸된다. 힙- 동적으로 메모리에 할당- 프로그래머가 원하는 시점에 동적으로 메모리를 할당- Garbage Collector가 변수를 소멸시킨다 Struct 와 Class의 차이점구조체- 값 형식 - 스택에 할당, 복사될 때 값이 복사. - 상속 X - 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합 .. 2024. 7. 3. [Study] 콜백, delegate, event 콜백?- 피호출자가 다시 호출자의 메서드를 호출하는 것 - 콜백의 정의 : 매개변수로 전달되는 함수- 특정 이벤트나 조건이 발생했을 때 발생하는 함수 => If문도 포함되는 정의라 모호하다- 서버가 클라이언트에게 비동기적으로 피드백을 주기 위해 사용하는 방법 - 예시1) button.onClick.AddListener의 정의를 살펴보면public void AddListener(UnityAction call){ AddCall(GetDelegate(call));} AddListener 자체도 Action을 매개변수로 전달받아 구현된 함수이다.다음과 같은 방식이 콜백! - 예시2) 이런 식으로 각 버튼을 객체지향적으로 관리해줄 수도 있다.public abstract ButtonObj{ Butt.. 2024. 7. 3. [Study] 객체지향 프로그래밍 SOLID 원칙Single Responsibility Principle (단일 책임의 원칙)- 각 클래스는 하나의 기능만 가지며, 이 하나의 기능(책임)을 수행하는데 집중해야 한다.- SRP를 통해 프로그램의 유지보수성을 높일 수 있음 Open Close Principle (개방폐쇄의 원칙)- 소프트웨어의 구성 요소는 확장에는 열려있고 수정에는 닫혀있어야 한다.- 새로운 기능을 추가할 때 기존 코드를 수정하지 않고 기능을 추가할 수 있도록 설계해야 한다.- 추상화나 다형성을 통해 구현 가능 Liskov Substitution Principle (리스코브 치환의 원칙) - 자식 클래스는 언제나 부모 클래스로 교체(업캐스팅)할 수 있어야 한다.- 즉 자식클래스에게 정말 필요한 기능만 부모 클래스에 존재해야한.. 2024. 7. 2. [Study] 객체와 한정자 객체객체란 클래스에서 정의한 것을 토대로 메모리에 할당된 실체(인스턴스)이다.클래스란? 멤버 변수와 메서드를 가지고 있는 틀인스턴스란? 소프트웨어 세계에 구현된 실체 생성자생성자란 객체가 생성될 때 호출되는 초기화 메서드이다. - 생성자의 이름은 클래스의 이름과 같다- 생성자는 public으로 정의되어야 하며 리턴값이 없다.- 아래는 승도님 예시using System;using UnityEngine;public class Character{ // static, 접근 제한자 public static int Num { get; private set; } public string Name { get; private set; } public Character(string name) // .. 2024. 7. 1. [Study] 응집도 & 결합도 응집도- 모듈 내부 요소 간 연관 정도- 한 스크립트가 하나의 기능만을 수행하는 것- 코드의 응집도는 높아야 좋다. 결합도- 외부 모듈 간의 상호 의존성- 코드는 결합도가 낮아야함 - 결합도가 높으면 클래스 간 의존성이 높은 것 -> 한 클래스 수정하면 다른 클래스 수정해야 할 가능성이 높아진다-> 협업 시 다른 팀원이 코드를 수정하면 내 코드를 수정해야 할 가능성이 높아진다는 뜻... 좋지않군 결합도를 낮추는 방법?1. 작은 단위의 여러 인터페이스 사용하기! -> 기능 별로 쪼개서 인터페이스 사용하기-> 협업 시 독립적 프로그래밍 가능 (선언만 인터페이스에서 해주고 구현은 클래스 내에서 해주면 된다) 2. 응집도 높이기! -> 코드 내의 기능들이 그 안에서 수행되고 끝나도록 코딩하기! 인터페이스의 .. 2024. 5. 27. [Study] 동기 & 비동기 동기 (Synchronous)- 서버에서 요청을 보냈을 때 응답이 돌아와야 다음 동작 수행 가능- 즉, 한 코드의 실행이 끝난 후 다음 코드가 실행되는 과정 - 직렬은 데이터를 하나씩 순서대로 처리하거나 전송하는 방식.동기는 실행이 완료될 때까지 다른 코드들이 대기하는 방식을 의미하고직렬은 데이터 전송 방식에 대한 용어이다 비동기 (Asynchronous)- 요청을 보냈을 때 응답이 안와도 다음 동작 수행 가능- 즉, 동시에 작업이 실행되고 작업이 빠른 순으로 끝나는 것 - 코루틴은 비동기 (처리가 너무 빨라서 동기처럼 보이는 것 뿐) -> 코루틴은 함수 처리 중 잠시 멈췄다가 다시 시작할 수 있는 함수 - 언뜻 보면 병렬과 비슷하나 다르다.병렬은 여러 작업을 동시에 실행하는 방식이긴 하나 주로 .. 2024. 5. 27. [Study] 아크탄젠트 삼각함수 - 각도를 통해 삼각형들의 각 변의 비율을 알아낼 수 있다- sin = 높이/빗변- cos = 밑변/빗변- tan = 높이/밑변 역삼각함수 - 비율을 통해 각도를 알아낼 수 있다 아크탄젠트- 탄젠트의 역삼각함수- x,y 의 값을 받아 각각의 값이 양수인지 음수인지를 통해 360도의 각도를 전부 계산할 수 있다 - Math.Atan2(y,x) - y, x 순으로 인수를 넣는다 - 캐릭터와 플레이어의 마우스 사이의 각도를 구할 때 쓰인다1. 아크 탄젠트를 통해 사이 각을 구한다.2. 구한 사이 각 (라디안) 값을 각도로 변환한다. ( [- π, π] 사이 값으로 계산되므로 반드시 Mathf.Rad2Deg을 곱해 Degree로 변환해주어야 한다.)3. Quaternion.Euler()를 통해.. 2024. 5. 8. 이전 1 2 3 다음