좋은 프로그램이란?
사용자의 입장에서
- 사용하기 편한것
- 원하는 기능이 있는 것
개발자 입장에서
- 쉽게 수정할 수 있는 것(남이 작성한 코드를 읽기 쉽게)
- 유연한 개발 구조를 가지고 있어서 요구 조건에 따라 쉽게 유지 보수 할 수 있는 것
- 이해하기 쉬운 것
Refactoring
결과는 똑같지만 프로그램의 구조를 바구는것
중복된 코드를 하나의 메서드로 바꾸는것
가독성이 떨어지는 메소드, 변수명을 바구는 것
코드는 사람을 위한 문서다. 과거 pc 성능이 안좋을때는 한줄로 코드를 짜면 좋은 코드였지만, 지금은 이해가 어렵더라면 좋은 코드라고 인정받기 어렵다.
cns에서는 코드 변수명, 4줄마다 띄어쓰기 등 신입사원 연수에서 이런것을 평가 항목으로 놨다 한다. 코드도 컴퓨터를 돌리는 것이지만, 결국 다른사람을 위한 문서라 생각해야 한다.
Entity Class
선물상자와 같은 기능을 말한다. 복잡한 로직보다는 낯낯의 데이터드를 관리하는 클래스. 그래서 필요한 곳에 데이터를 전송하는데 사용하기도 한다(DTO : Data Transport Object)
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가 없기 때문에 인터페이스를 활용함?
미리 약속된 객체의 주소를 찾아가 메소드를 호출한다?
그래서 메소드 명을 자유롭게 할 수 없다.
Thread
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 |