반응형

개발공부 120

[Effective C#] 아이템 6 : nameof() 연산자를 적극 활용하라

nameof() 란? 임의의 기호(형식, 멤버, 변수 등)의 이름에 해당하는 문자열을 돌려주는 연산자. 심볼의 이름을 평가하며 타입, 변수, 인터페이스, 네임스페이스에 대해 사용할 수 있다. 완전히 정규화된 이름, 정규화되지 않은 이름 모두 제한 없이 사용할 수 있다. 다만, 제네릭 타입을 사용할 때는 부분적으로 제작이 있어 모든 타입 매개 변수를 지정한 닫힌 제네릭 타입만 사용할 수 있다. 제네릭 타입 열린 타입 : 아직 결정되지 않은 타입 파라미터가 존재. (ex. Dictionary) 닫힌 타입 : 모든 파라미터가 정해진 경우. (ex. Dictionary ) 장점 Visual Studio에서 기호 참조를 이해할 수 있기 때문에, 해당 기호의 이름을 바꾸면 그에 대한 모든 참조의 이름도 바뀐다. (..

개발공부/C# 2021.11.21

[Effective C#] 아이템 4 : string.Format()을 보간 문자열로 대체해라

문자열 보간 기능의 장점 코드 가독성이 대폭 향상된다. 컴파일러는 정적 타입 검사를 수행할 수 있으므로 개발자의 실수를 미연에 방지할 수 있다. 기존 방식에 비해 문자열을 생성하기 위한 표현식이 더 풍성하다. 보간 문자열 사용 방법 1. 문자열 앞에 '$'를 붙인다. 2. 문자열로 변경할 표현식은 {}(중괄호) 안에 둔다. 문자열 표현식의 주의사항 1. 내장된 표준 포맷 문자열 사용 방법 Console.WriteLine($"The value of pi is {Math.PI:F2}"); ':' 기호는 조건 표현식을 나타내는 용도로 사용된다. ':'이 조건 표현식의 일부임을 알리는 방법 (@를 사용한다.) Console.WriteLine($@"The value of pi is {(round ? Math.PI..

개발공부/C# 2021.11.21

[Effective C#] 아이템 3: cast보다는 is, as가 좋다.

C#에서 형변환을 수행하는 방법 as 연산자를 사용하기 cast 연산자 사용하기 cast 연산자 피연산자 앞에 괄호로 변경할 자료형을 넣어서 자료의 형태를 변환해주는 연산자. int number = 10; (string)number; //int 형을 cast를 활용해 string으로 변환한다. is 연산자 변환의 성공 유무를 확인할 수 있는 연산자. 변환이 가능하면 true, 불가능하면 false를 리턴한다. if(number is int num) //is 연산자는 주로 조건을 확인할 때 사용한다. { num = ... //is 연산자가 true이면 number를 num으로 변환하여 사용할 수 있다. } as 연산자 객체의 타입을 변환할 때 사용하는 연산자. 변환에 성공하면 변환 결과를 리턴하고, 실패하..

개발공부/C# 2021.11.20

[Effective C#] 아이템 2 : const와 readonly 차이

const, readonly는 무엇일까? 변수를 변하지 못하는 변수로 만들어 주는 C# 키워드. const 컴파일 타임 상수로 내장 자료형(정수형, 실수형, enum, string)에 대해서만 쓸 수 있으며, 변수 선언과 동시에 사용 해야 한다. readonly 런타임 상수이고, 모든 자료형에 사용할 수 있다. 런타임에 이루어 지므로 생성과 동시에 초기화할 필요는 없다. 단, 생성자 단계에서 1번 할당을 통해 초기화 할 수 있다. static readonly 스태틱 생성자에서 초기화할 수 있는 상수. 클래스 이름으로 접근할 수 있다. 런타임 상수를 이용해야 하는 이유 컴파일타임 상수는 런타임 상수에 비해 유연성이 떨어진다. readonly로 선언할 수 있지만 const로 선언할 수 없는 구조체가 있다. ..

개발공부/C# 2021.11.19

[WPF] 트리거(Trigger) 설명 및 예제

트리거 어떤 조건이나 이벤트가 주어졌을 때, 묵시적으로 컨트롤의 상태나 이벤트 핸들러를 호출하는 기능. 트리거를 사용하면 변화에 따른 변화를 지정할 수 있다. Style에서 Setter와 Trigger의 차이 Setter : 엘리먼트가 처음 생성되는 시점에 프로퍼티를 설정한다. Trigger : 프로퍼티가 변경되는 시점에 프로퍼티를 설정한다. 트리거 종류 Property Trigger : Dependency Property가 변경될 때 실행된다. Event Trigger : 라우티드 이벤트(Routed event)가 발생할 때 실행된다. Data Trigger : Binding 문법으로 연결된 .NET 프로퍼티 값이 변경되었을 때 실행된다. Multi Trigger : 다수의 프로퍼티를 트리거 조건으로 ..

개발공부/WPF 2021.11.18

[OS] 프로세스의 주소 공간

Process Address Space 정의 프로그램이 실행되면 메모리에 할당되는 것 구성요소 1. Code Segment 프로그램의 코드가 저장되어 있다. 프로그램의 코드는 바뀌어서는 안 되므로 읽기만 가능하다. 2. Data Segment 전역변수 같은 데이터가 저장되어 있다. 함수 바깥에 있는 데이터를 저장한다. 변수는 변할 수 있으므로 읽고 쓰기가 가능하다. 3. Stack Segment 함수나 지역 변수가 저장되어 있다. 변수는 변할 수 있으므로 읽고 쓰기가 가능하다. 구조 프로그램이 실행되면 프로세스가 생성된다. 메모리에 프로세스의 주소 공간이 할당된다. 주소 공간 안은 Code, Data, Stack 부분으로 이루어져 있다. Code 부분 존재 이유 코드는 프로그램이 만들어지고 나서는 바뀌지..

[OS] CPU Scheduling

스케줄링 CPU를 잘 사용하기 위해 프로세스를 잘 배정하기 조건 : 오버헤드 ↓ / 사용률 ↑ / 기아 현상 ↓ 목표 Batch System: 가능하면 많은 일을 수행. 시간(time) 보단 처리량(throughout)이 중요 Interactive System: 빠른 응답 시간. 적은 대기 시간. Real-time System: 기한(deadline) 맞추기. 스케줄링 종류 스케줄링은 선점 스케줄링, 비선점 스케줄링으로 나뉜다. 프로세스 상태 비선점 스케줄링 : Interrupt, Scheduler Dispatch 선점 스케줄링 : I/O or Event Wait 프로세스의 상태 전이 승인 (Admitted) : 프로세스 생성이 가능하여 승인됨 스케줄러 디스패치 (Scheduler Dispatch) : ..

[OS] System Call

System Call Process 생성과 제어를 위한 System call fork(), exec(), wait() fork(), exec() : 새로운 Process 생성과 관련 있다. wait() : 프로세스 Parent 가 자신이 만든 프로세스인 child의 종료를 기다리는 명령어다. Fork 새로운 Process를 생성할 때 사용한다. code #include #include #include int main(int argc, char *argv[]) { printf("pid : %d", (int) getpid()); // pid : 29146 int rc = fork(); // 새로운 프로세스 생성 if (rc < 0) { // (1) fork 실패 exit(1); } else if (rc ==..

[OS] 데드락(Dead Lock)이란

데드락이란? Process 1과 Process 2가 Resource 1, Resource 2를 모두 얻어야 할 때, t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음 t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림 서로 원하는 자원이 상대방에 할당되어 있어서 두 프로세스는 무한정 wait 상태에 빠지는 상태를 DeadLock이라고 한다. Dead Lock 프로세스가 자원을 얻지 못해서 다음 처리를 하지 못하는 상태 교착 상태 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생한다. 데드락이 발생하는 경우 멀티프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없는 상황이 발생하면서..

[OS] 세마포어와 뮤텍스 이해하기 | 화장실 예제와 설명

세마포어와 뮤텍스 여러 프로세스나 쓰레드가 공유 자원에 접근하는 것을 제어하기 위한 방법 병행 처리를 위한 프로세스 동기화 기법이다. 뮤텍스 뮤텍스는 화장실이 하나뿐인 식당과 비슷하다. 화장실을 가기 위해서는 카운터에서 열쇠를 받아야 한다. 당신이 화장실을 가려고 하는데 카운터에 키가 있으면 화장실에 사람이 없다는 뜻이고, 당신은 열쇠를 이용해 화장실에 들어갈 수 있다. 당신이 화장실에서 행복한 시간을 보내고 있는데 다른 테이블에 있는 어떤 남자가 화장실에 가고 싶어졌다. 이 남자는 아무리 용무가 급하더라도 열쇠가 없기 때문에 화장실에 들어갈 수 없다. 결국 남자는 당신이 용무를 마친 후 나올 때까지 카운터에서 기다려야 한다. 곧이어 옆 테이블에 있는 남자도 화장실에 가고 싶어져서 이 남자 또한 화장실에..