반응형 전체 글553 Effective C# - Item 16 생성자 내에서는 절대로 가상 함수를 호출하지 말라 객체가 완전히 생성되기 이전에 가상 함수를 호출하면 이상 동작을 일으킨다. 어떤 타입이든 생성자가 수행을 완료할 때까지는 완전히 생성되었다고 할 수 없다. 따라서 생성자 내에서 가상 함수를 호출하면 예상 처럼 동작하지 않는다. class B { protected B() { VFunc(); } protected virtual void VFunc() { Console.WriteLine("VFunc in B"); } } class Derived : B { private readonly string msg = "Set by initailizer"; public Derived(string msg) { this.msg = msg; onsole.WriteLine("Program 출력 " + msg); } protec.. 2023. 12. 3. Effective C# - Item 15 불필요한 객체를 만들지 말라 GC( Garbage Collection )는 사용자를 대신하여 사용하지 않는 객체를 효율적인 방식으로 제거한다. 하지만 이러한 작업이 아무리 효율적이라 하더라도 힙에서 새로운 객체를 생성하고 삭제하는 작업은 그러한 일을 전혀 하지 않는 것에 비한다면 상대적으로 많은 프로세서 시간을 사용하므로 성능 문제를 일으킬 수 있다. 따라서 GC가 과도하게 동작하지 않도록 주의 해야한다. 기술적으로 몇 가지만 유념하면 GC의 작업을 현저히 줄일 수 있다. GC 작업을 줄일 수 있는 방법 01 지역변수를 멤버 변수로 변경 모든 참조 타입의 객체는 지역변수라 하더라도 동적으로 메모리를 할당한다. 이렇게 할당된 객체는 이 객체를 참조하는 상위 객체가 삭제되면 가비지가 된다. 지역변수의 경우 그 변수를 선언한 메서드를 벗.. 2023. 12. 3. Effective C# - Item14 초기화 코드가 중복되는 것을 최소화하라 C# 컴파일러는 공용 생성자를 이용하는 초기화 방식을 매우 특별한 문법으로 인식한다. 변수에 대한 중복 초기화 코드를 제거해줄 뿐 아니라 베이스 클래스의 생성자가 반복적으로 호출되는 것도 막아준다. 즉 객체 초기화를 위해 수행해야 하는 코드를 최적화해준다. 개발자 입장에서는 초기화 과정 일부를 공용 생성자에 위임할 수 있으므로 작성하는 코드의 양을 최소활 할 수 있다. 1. Constructor Chaining 여러 생성자 중에서 가장 많은 입력을 필요로 하는 생성자를 기준으로 하여, 입력할 값의 수가 적은 다른 생성자들을 이 기준이 되는 생성자를 통해 간접적으로 호출하는 기법이다. 이를 통해 코드의 중복을 최소화하고 재사용성을 높일 수 있다. Unity - Constructor Chaining(생성자 .. 2023. 12. 3. 컴퓨터 구조 - 논리주소와 물리주소, MMU, 베이스 레지스터 및 한계 레지스터 메모리에 저장된 정보의 위치는 주소로 나타낼 수 있다. CPU와 실행 중인 프로그램은 현재 메모리 몇번지에 무엇이 저장되어 있는지 다 알고 있을까요? 없다. 메모리에 저장된 정보는 시시각각 변하기 때문이다. 메모리에는 새롭게 실행되는 프로그램이 시시때때로 적재되고 실행이 끝난 프로그램은 삭제된다. 게다가 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라진다. 그렇다면 CPU와 실행 중인 프로그램이 이해하는 주소는 무엇일까? 주소에는 메모리가 사용하는 물리주소가 있고 CPU와 실행 중인 프로그램이 사용하는 논리주소가 있다. 01 물리 주소(Phyiscal Address) 메모리 입장에서 실제로 데이터가 저장된 물리적인 주소를 나타낸다. 주로 하드웨어 에서 사용되며 각 데이터의 실제 물리 위치.. 2023. 12. 2. 컴퓨터 구조 - RAM의 특성과 종류(DRAM,SRAM,SDRAM,DDR SDRAM) 컴퓨터의 핵식 부품에는 CPU, 메모리, 보조기억장치, 입출력장치가 있다. 메모리에 더 알아보자 주기억장치(메인메모리)는 종류에는 크게 RAM과 ROM 두가지가 있고 메모리라는 용어는 그 중 RAM을 지칭하는 경우가 많다. 휘발성 저장 장치(Volatile Memory) RAM(Random Access Memory)는 주로 컴퓨터에서 실행 중인 프로그램 및 작업에 필요한 데이터를 일시적으로 저장하는데 사용된다. RAM은 전원이 켜져 있는 동안에만 데이터를 보유하며 전원이 꺼지면 저장된 내용이 사라진다. 특성 1 ) 실행 중인 운영 체제 및 응용 프로그램이 RAM에 로드되어 빠른 액세스를 허용한다. 데이터를 임시로 저장하여 CPU가 빠르게 읽고 쓸 수 있도록 도와준다. 2) 전원이 꺼지면 RAM에 저장된 .. 2023. 12. 2. 백준 C# - 10844 +)풀이 DP를 이용해서 풀어야한다. DP알아보러 가기 C# - 다이나믹 프로그래밍(DP) 다이나믹 프로그래밍 메모리를 적절히 사용하여 수행 시간 효율성을 향상 시키는 최적화 기법중 하나이다. 큰 문제를 작은 부분 문제로 나누어 해결하며 이미 계산된 작은 문제의 결과를 문제를 풀기 앞서 문제를 먼저 이해해보자 (문제 이해하기가 제일 어렵다..) N = 자릿수 문제에서 N이 주어질때 길이가 N인 계단수라고 했는데 이 말이 무슨말인지 이해가 안갔다. 결과적으로 자릿수였다. 점화식 구하기 01 일단 써보자 DP문제는 점화식을 구하기 위해 일단 써보는 수 밖에 없다. N = 1일때는 한 자릿수 숫자인 계단수를 구하고 N = 2일때는 두 자릿수 숫자인 계단수를 구해보면 아래 왼쪽 사진과 같이 나타낼 수 있다. 그리고 이를.. 2023. 12. 2. 이전 1 ··· 31 32 33 34 35 36 37 ··· 93 다음 반응형