본문 바로가기

전체 글

C# 람다식이란? 1. 람다식의 의미 람다(Lambda)라는 용어와 C#에서 제공하는 람다식과는 어떤 연관관계가 있는 것일까요? 람다라는 단어가 생소하니 람다식이라고 하면 언뜻 그 의미가 잘 떠오르질 않습니다. (개념이 궁금하신 분은 나무위키를 참고하시기 바랍니다) 이 글에서는 LINQ에서 람다식의 활용에 한정해서 설명하도록 하겠습니다. 일단 다른건 다 잊으시고 람다식 = 익명함수를 의미한다 라고 이해하시기 바랍니다. 결론부터 얘기하자면 람다식은 다음과 같은 코드를 의미합니다. x => x*10 위의 코드 한 줄이 우리가 알아야 하는 람다식의 전부입니다. =>연산자 때문에 괜히 어렵게 느껴지는 위의 식은 x를 파라미터로 받아 x*10한 결과를 리턴하는 함수를 의미합니다. 익명(무명) 메소드와 비슷.. 더보기
C# 확장메서드의 개념과 작성법, 주요메서드. 1. 확장메서드의 개념 어떤 클래스에 메서드를 추가하고 싶으면 어떤 방법이 있을까요? 다음과 같은 두 가지를 생각해 볼 수 있습니다. 1. 클래스를 수정한다. 2. 클래스를 상속받아 새로운 파생클래스를 만든다. 이 두 가지 방법 이외에 기존의 클래스를 손대지 않고 간단하게 메서드를 추가할 수 있는방법이 하나 더 있는데, 바로 확장메서드(Extension methods)입니다. 확장메서드를 이용하기 위해서는 전제조건이 있는데요, 바로 정적클래스(static class)이어야 한다는 것입니다. 우리가 확장메서드에 대해 알아야하는 이유는 무엇보다도 LINQ를 이해하기 위해서입니다. 확장메서드가 LINQ에 자주 사용되고, 메서드 신택스를 통해 구현되기 때문입니다. 먼저, 쉬운 예제를 통해 확장메서드 만드는 법을.. 더보기
MSSQL 일련번호는 시퀀스(Sequence)를 사용하자. MSSQL2012 부터 시퀀스(Sequence)를 지원하게 되었습니다. 일반적으로 숫자로 된 일련번호를 생성할 때 쉽게 생각해 볼 수 있는 방법은 테이블에서 가장 큰 수를 가져와 +1 하는 것일 것입니다. 쿼리로 보자면 다음과 같습니다. SELECT MAX(Seq) + 1 FROM Table 이 방법은 사용자가 1명일 경우는 문제가 없겠지만 다수의 사용자가 번호를 따는 상황이라면 중복이 발생할 수 있습니다. 즉, 이러한 방식의 번호따기는 언제든 문제가 발생할수 있다는 것이죠. 이 때 사용할 수 있는 기능이 시퀀스(Sequence)입니다. 시퀀스를 사용하면 프라이머리 키로 사용할 수 있는 유니크한 자동 증가번호를 딸 수있습니다. 1. 시퀀스의 생성 2. 옵션 설명 시작값 : 1 (번호가 1부터 시작) 증가.. 더보기
C# 삼항연산자(Ternary Operator)로 간결한 코딩을! 삼항연산자(?)란 피연산자의 갯수가 3개인 조건부 연산자를 의미합니다. if else 구문을 한줄로 간단하게 표현할 수 있기 때문에 인라인 if(inline-if)라고도 합니다. if else 구문과 결과는 동일하지만 if else 구문은 여러줄로 작성되는 반면, 삼항연산자를 사용하면 한줄로 간단하게 표현할 수 있기 때문에 소스가 간결해집니다. 다음의 코드를 통해 if else와 삼항연산자의 차이를 알아보도록 하겠습니다. if else int number = 2; bool isEven; if (number % 2 == 0) { isEven = true; } else { isEven = false; } ? : 삼항연산자 int number = 2; bool isEven; isEven = (number % .. 더보기
C# 반올림, 올림, 버림 - 0.5는 왜 1이 안되는가? 반올림은 매우 간단하게 Round() 함수를 이용하면 됩니다. 하지만 반올림이 여러분이 생각하는 것처럼 동작하지 않는다면 이번글을 끝까지 읽어주시기 바랍니다. 이번글 에서는 Math클래스의 Round(), Ceiling(), Truncate() 메소드 등을 이용한 반올림, 올림, 버림 방법에 대해 알아보겠습니다. 특히 반올림에서는 우리가 일반적으로 생각하는 .5가 1이 되도록 하기위해선 MidpointRounding.AwayFromZero를 사용해야 함을 특히 주의하시기 바랍니다. 반올림 - Math.Round() double val1 = 2.1; double val2 = 2.5; double val3 = 2.6; double val4 = 2.71; int result1 = (int)Math.Round(.. 더보기
C# using과 try catch finally의 차이점 여러분도 try catch 구문을 많이 사용하시죠? DBConnection과 같이 반드시 닫아주어야 하는 객체를 사용할 땐 finally를 꼬박꼬박 작성하고 있을겁니다. using은 이 try finally와 동일하게 동작하는 구문인데요. try finally구문과 비교해 어떤 잇점이 있는지 사용법에 대해 알아보도록 하겠습니다. MS Docs엔 다음과 using구문에 대해 다음과 같이 설명하고 있습니다. (원문보기) using구문은 using블록 내에서 어떤 예외적인 상황이 발생한다 하더라도 Dispose가 호출되는 것을 보장합니다. 이는 여러분이 try블록 내에 객체를 두고 finally블록에서 Dispose를 호출 하는 것과 동일한 결과를 얻어낼수 있음을 의미합니다. 이것은 실제로 using구문이 컴.. 더보기
MSSQL 프로시저 텍스트 검색 프로젝트 중에 테이블 이름이 바뀌는 경우가 있다고 가정합시다. 그럼 기존에 작성된 프로시저나 사용자 정의함수 중에 변경될 테이블명이 사용된 것들을 찾으려는 경우 어떻게 해야 할까요? 모든 프로시저를 다 까보고 전수검사 하겠다는 다짐하시는건 아니겠죠? 다음과 같은 쿼리로 한번에 어떤 프로시저에 텍스트가 포함되어 있는지 검색을 할 수있습니다. 검색쿼리(Stored Procedure Text Search) SELECT xtype, name, text FROM syscomments COM JOIN sysobjects OBJ ON COM.id = OBJ.id WHERE OBJ.xtype='P' AND COM.text LIKE '%텍스트%' 위에 텍스트 부분에 찾으려는 테이블명, 함수명 등을 넣으시면 됩니다. XT.. 더보기
MSSQL 날짜 변환, CONVERT()함수의 활용 이번 글에서는 CONVERT함수를 활용한 MSSQL 날짜 변환에 대해 알아보겠습니다. 프로젝트를 수행하다 보면 날짜정보를 많이 다루게 되는데요, 국내에서는 대부분 yyyymmdd 또는 yyyy-mm-dd 형식으로 날짜를 관리합니다. GETDATE함수로 MSSQL서버의 현재시간을 가져오면 yyyy-mm-dd hh:mm:ss 형식인데요, 각 스타일 번호별로 리턴형식이 어떻게 변하는지 다음 표에서 확인하시기 바랍니다. 1. CONVERT()함수의 스타일 번호별 날짜 변환 형식 쿼리 스타일번호 출력결과 비고 SELECT CONVERT(nvarchar(50), GETDATE(), 1) 1 01/20/19 mm/dd/yy SELECT CONVERT(nvarchar(50), GETDATE(), 101) 101 01/.. 더보기
C# 엑셀 셀 형식표(mso-number-format) 웹프로그래밍을 하다보면 데이터 엑셀다운을 구현하는 경우가 많습니다. 이 때 태그를 사용하여 데이터 테이블을 만들고 엑셀형식으로 변환후 다운로드를 받는 과정에서 00001과 같이 숫자로만 구성된 문자일 경우 숫자 1 처럼 변환되어 난감한 경우가 있습니다. 이럴땐 엑셀의 셀에 해당하는 태그의 스타일을 지정해주면 원하는 결과파일을 다운로드 하실 수 있습니다. 아래의 표에서 지정하실 셀 스타일을 확인하세요. 엑셀 셀 형식표 셀 스타일 결과 mso-number-format:"0" 정수 mso-number-format:"0\.000" 소숫점 3자리 mso-number-format:"\#\,\#\#0\.000" 콤마, 소숫점 3자리 mso-number-format:"mm\/dd\/yy" mm/dd/yy mso-num.. 더보기
MSSQL 게시판 글번호 매기기 관련글 : 2019/01/17 - [MS-SQL] - MSSQL 그룹별 최상위 데이터 가져오기 게시판 글번호 매기는 방법(최신글이 앞에 나오게)에 대해 알아보겠습니다. 간단한 건데, ROW_NUMBER() 함수를 이용합니다. ----------------------- -- 예제 테이블 생성 ----------------------- CREATE TABLE [dbo].[Board]( [Idx] [int] IDENTITY(1,1) NOT NULL, [Writer] [nvarchar](50) NULL, [Subject] [nvarchar](100) NULL, [WriteTime] [datetime] NULL, [Contents] [nvarchar](1000) NULL, CONSTRAINT [PK_Board] .. 더보기