프로그래밍 <45>
두 개의 이진트리가 주어졌을 때 같은 트리인지 확인하는 코드 작성하기 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: bool isSame..
malloc 1. 메모리 공간 할당 new 1. 메모리 공간 할당 2. 생성자의 호출(초기화) 3. 반환된 주소 값을 할당하고자 하는 자료형에 맞게 형 변환
가비지 컬렉터 C#은 managed language이다. 즉 메모리가 관리되는 언어라는 것이다. 이 메모리를 관리하기 위해 CLR안에는 가비지 컬렉터라는 게 존재한다. 하지만. 가비지 컬렉터도 CPU와 메모리 같은 컴퓨팅 자원을 소모한다. 가비지 컬렉터가 자원을 최소한으로 사용하게 만들기 위해서는 프로그래머가 가비지 컬렉터가 어떻게 동작하는지를 알고 있어야 한다. (C#으로 Unmanaged Code를 작성하고 싶다면 unsafe 키워드를 사용하면 된다.) C#은 실행파일을 실행하면 이 프로그램을 위한 일정 크기의 힙 메모리를 확보한다. 객체를 할당하면 메모리 포인터가 움직여서 다음 객체를 할당할 곳을 가리키게 된다. 할당된 메모리의 위치를 참조하는 객체를 Root라고 함. . NET 애플리케이션이 실행..
은닉성과 편의성 두 마리 토끼를 잡을 수 있다? 보통은 private 필드; public Get필드() { return 필드; } public Set필드(value) { 필드 = value; } private로 설정한 필드지만 Get, Set 메서드를 통해 외부에서 접근 가능하다. 프로퍼티는? 접근한정자 데이터형식 프로퍼티이름 { get { return 필드이름; } set { 필드이름 = value; } } public string Name { get; set;} public string Age {get;} 흠.. 더 우아한 방식이라고는 하는데 여튼 set 하려면 public이니 은닉은 아니지 않나?.. 편의성이 좀 좋아진 건 인정
* 인터페이스(interface) 메서드, 이벤트, 인덱서(인덱스를 이용해서 객체 내의 데이터에 접근하게 해주는 프로퍼티), 프로퍼티만 가질 수 있다. (구현을 가질 수 없다.) 클래스, 인터페이스에서 상속 가능함 여러 개의 인터페이스 한꺼번에 상속 가능 * 추상 클래스 (abstract class) 구현을 가질 수 있으나 일반 클래스와 달리 인스턴스를 가질 수 없다. 여러 개의 클래스를 한꺼번에 상속할 수 없음 (죽음의 다이아몬드 문제) - up-casting 때문에 할아버지 클래스를 두 개의 파생 클래스가 상속하고, 이 두 개의 파생 클래스를 하나의 자식 클래스가 상속하게 될 경우 모호해진다.
왜? 예를 들어 Generic이 아닌 ArrayList를 쓴다고 해보자. Type을 컴파일 타임에 지정하지 않는다. 오오 개발 짱편한데? ArrayList 변수명 = new ArrayList(); ArrayList.Add(1); ...blabla... ArrayList.Add('abc'); 코딩할 때는 아무 생각 없이 했다. 근데 런타임에는 타입이 안 맞아? 허... 예외가 터진다. generic인 List를 사용하자. 성능적인 측면에서도 generic이 우세하다. 참고 (https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1?view=netcore-3.1#performance-considerations)