본문 바로가기

IT/C#

C# 004

좋은 프로그램이란?

사용자의 입장에서

- 사용하기 편한것

- 원하는 기능이 있는 것


개발자 입장에서

- 쉽게 수정할 수 있는 것(남이 작성한 코드를 읽기 쉽게)

- 유연한 개발 구조를 가지고 있어서 요구 조건에 따라 쉽게 유지 보수 할 수 있는 것

- 이해하기 쉬운 것


Refactoring

결과는 똑같지만 프로그램의 구조를 바구는것

중복된 코드를 하나의 메서드로 바꾸는것

가독성이 떨어지는 메소드, 변수명을 바구는 것


코드는 사람을 위한 문서다. 과거 pc 성능이 안좋을때는 한줄로 코드를 짜면 좋은 코드였지만, 지금은 이해가 어렵더라면 좋은 코드라고 인정받기 어렵다.


cns에서는 코드 변수명, 4줄마다 띄어쓰기 등 신입사원 연수에서 이런것을 평가 항목으로 놨다 한다. 코드도 컴퓨터를 돌리는 것이지만, 결국 다른사람을 위한 문서라 생각해야 한다.



Entity Class

선물상자와 같은 기능을 말한다. 복잡한 로직보다는 낯낯의 데이터드를 관리하는 클래스. 그래서 필요한 곳에 데이터를 전송하는데 사용하기도 한다(DTO : Data Transport Object) 



Exception(예외처리)

- 프로그램 수행 도중 발행하는 오류
- 주로 실행 환경의 문제나 입력 값의 오류 또는 잘못된 코드로 발생할 수 있음
- Exception 발생시 CLR은 Exception 종류에 따라 해당 type의 Exception 객체를 생성하여 예외처리기 (catch block)로 객체의 참조값을 전달해 줌

java랑다르게 catch에서 파라미터를 넣지 않는다 자바는 주로 익셉션 파라미터로 e
try{}
catch{}
finally{} 해도되고 안해도 되고 but 반드시 실행되는 구문(주로 초기화, DB에서 사용하는데 연결하고 어떤 에러가나든 DB는 끊어줘야함 이럴때 쓰면 편함)




서버에서는 가급적이면 Exception은 하지 말자 왜냐하면 시스탬 내로 처리할 수 있는데도 익셉션 처리 하면 객체가 생성되서 오버해드가 날 가능성이 있음



사용자 정의 Exception을 만드는 이유는? 비지니스 로직상 안맞는 경우가 있을 수 있다. 포인트를 쓰려는데 포인트가 부족함 그럼 상위메소드에 포인트 없다고 보고해야 함. 문제가 발생할 시 사용자 정의 Exception을 사용한다. return true false, Enumertype 같은 방법으로


예외처리는 사용자에게 보여지는 문제를 보여주기도 함 이상한 컴퓨터 에러를 보여주는거보다 사용자에게 개발자가 정한 메세지를 알리는게 좋다. 신뢰감을 줄 수있으니까





Delegate(대리자)

C에서는 포인터를 통해 변수를 찾아가 값을 수정하거나 가져올수 있엇다. C#에서도 마찬가지로 call by value로 할수 있었다.

Delegate는 변수에 접근하는 것이 아니라 메소드위치를 담는 것이다!!


나는 일을 할 준비가 되어있음 톱을 주면 나무를 자를 것이고 망치를 주면 망치질을 할 것

망치와 톱을 객체로 보지 말고 메소드로 보자!

메소드의 위치값을 표시하는 것



정식


약식



Delegate 파라미터

- 메서드가 수행될 때 필요한 기능을 외부에서 제공해주는 역할을 함

- 하나의 메서드가 다양한 기능을 수행하는 효과가 있음


방법

- 딜리게이트 선언, 메소드 리턴형 확인, 이름 명명, 파라미터 갯수 확인


Delegate를 사용하면 변수와 함께 메소드를 던져줄 수 있음

망치(변수)를 줄께 망치질을 해라(메소드)

여기선 arr 배열 변수를 던져줄테니 3의 배수만 찍어내!라고 해석이 가능함




익명메서드 (Anonymous) 무명메서드

메서드의 이름이 없음, 파라미터와 리턴값만 있음



람다식(Lambda Expression)



Where 조건 메서드 사용하기



Action Delegate

- 리턴값이 없는 메서드를 참조할 Delegate로써 미리 제공되는 delegate type임

- Generic을 지원하고, 파라미터 개수도 16개까지 사용할 수 있도록 overloading되어있음


Func Delegate

- 리턴값이 있음


Ex




코드의 중복을 최소화 하는 방법

- 딜리게이트 쓰기

- 무명 메소드로 넣기

- 람다표현식으로 넣기





Event



Delegate 사용




 


이벤트를 가지고 있는 객체만 이벤트 메서드를 호출할 수 있다
이벤트는 +=로만 등록가능

이벤트는 계속 +=로 등록 가능



자바는 delegate가 없기 때문에 인터페이스를 활용함?

미리 약속된 객체의 주소를 찾아가 메소드를 호출한다?

그래서 메소드 명을 자유롭게 할 수 없다.



Thread

- 프로세스에서 실행 제어만 분리한 실행 단위
- 프로세스는 스레드를 하나 이상 가질 수 있음
- 하나의 프로세스를 여러 개의 실행 단위로 구분하여 자원을 공유하며 수행함으로써 수행 능력을 향상
- 하나의 스레드에서 문제가 발생한 경우, 같은 프로세스 안의 다른 스레드에게 영향을 줄 수 있음

프로그래밍은 쓰래드 안에 돌아가는데 쓰레드를 이용하면 다른 프로그램을 내 프로그램내에서 사용할 수 있고, 동시에 프로그램을 돌릴 수 있다.

손오공이 100마리 요괴랑 싸울 때 털 100개 뽑아서 싸우면 쎔
CPU가 빠르게 작동하면서 동시에 활동하는것처럼보임




Thread의 문제점

동시에 같은 자원을 공유할 경우 문제가 나타날 수 있음



join은 쓰레드가 끝나는것을 알리는것 만약 없으면 쓰레드가 다 끝나지 않았는데 console.writeline 잔액이 실행 될 수 도 있음


공유 자원을 사용하다보니 애러발생


Rock이 필요함(하나의 쓰레드가 끝나야 락을 풀고 다른 쓰레드가 실행 가능하게 함)


공유된 자원을 쓰래드로 가져와 쓸 경우(불러오는것은 상관없음) 문제가 발생함으로 lock을 쓰자

lock 개념 물어봄

쓰레드 하나가 끝날때까지 기다려 다른 쓰레드가 공유 자원을 접근하지 못하게 하는것


lock을 쓰면 오히려 성능은 나빠짐



비동기적 프로그램


동기적: 월드컵을 보는데 짜장면 4개 탕수육 1개 주시오 주문한 후 현관에 서있기 -> 음식먹기

비동기적: 월드컵 봄 짜장면 주문 -> 월드컵 보기 -> 짜장면 오면 먹음



동기적 프로그램



비동기 프로그램 만드는법







두가지 방법으로 Async 처리 할수 있음




'IT > C#' 카테고리의 다른 글

Web Server  (0) 2017.03.30
C# 005  (0) 2017.03.24
C# 003 (컬랙션, 싱글톤)  (0) 2017.03.22
C# 002  (0) 2017.03.21
사전 과제 C#  (0) 2017.03.15