전체 글132 [Study] 제네릭 & 람다 & LINQ & Reflection 제네릭이란?- 클래스나 메서드에서 사용할 내부 데이터 타입을 일반화한 것- 제네릭을 사용하면 박싱, 언박싱이 수행되지 않아 성능에 좋다. (Object 타입을 사용하면 박싱& 언박싱이 일어남)- 컴파일시 데이터 형식이 결정 되는 것이 아니라 코드에서 메서드를 호출할 때 데이터 형식이 정해진다- 클래스나 인터페이스, 메서드를 사용할 때 동일한 기능을 수행하지만 입력하는 데이터 형식만 틀린 경우 사용void Swap(int x, int y){ int temp = y; y = x; x = temp;}void Swap(float x, float y){ float temp = y; y = x; x = temp;}// 제네릭 사용void Swap(T x, T y){ T t.. 2024. 7. 9. [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. [Unity] 오일러 각과 짐벌락 오일러 각이란?- 3차원 상의 강체 (rigidbody, 외부의 힘에 변하지 않는 물체)의 방향과 회전을 정의하기 위해 만들어낸 각도- x, y, z 좌표를 뜻함 짐벌(Gimbal)이란?- 물체가 회전하도록 중심축을 가진 구조물 - 이 강체의 방향은 오일러 각도를 사용하여 세 번의 회전을 통해 얻을 수 있다. 짐벌락(Gimbal Lock)이란?오일러 각을 이용하여 회전시킬 때 x축 -> y축 -> z축 순으로 회전한다. (이렇게 순서대로 회전하기 때문에 오일러 각에서 세 개의 축 (x, y, z축)은 서로 종속적이다.) 이 때 먼저 회전한 축이 아직 회전하지 않은 축을 함께 회전시킨다.두 번째로 회전한 축의 회전 결과로 인해 첫 번째 축과 세 번째 축이 겹쳐지는 상황이 발생하는 것이다.따라서 아직 회전하.. 2024. 6. 28. [백준] 12015번 파이썬 - 가장 긴 증가하는 부분 수열 2 문제 첫 코드n = int(input())lst = list(map(int,input().split()))answer = 0dp = [1] * (n)for i in range(0,n): dp[i] = 1 tmp = 0 for j in range(i+1,n-i): if lst[i] tmp: tmp = lst[j] dp[i] += 1print(max(dp)) 다이나믹 프로그래밍을 사용하여 풀었고(LIS 알고리즘), 시간초과가 났다.문제 제목만 보고 입력 조건을 확인하지 않았다.. 위 코드의 시간복잡도를 계산해보니첫 for문에서 n, 두번째 for문에서 i부터 n까지 돈다고 해도결국 시간복잡도는 O(N^2)가 된다. 따라서 시간복잡도를 줄일.. 2024. 6. 27. 이전 1 ··· 4 5 6 7 8 9 10 ··· 15 다음