CAFE

회원닷넷공부방

[ASP.NET]남처리 - 삼항연산자 중복 사용 (초급자용 - 고수님들은 Pass)

작성자남처리|작성시간07.11.20|조회수1,577 목록 댓글 11

참고로 이 글은 제가 어제 오늘 고생했던 일이 풀려서 작성 하게 되었습니다.

고수님들은 이글을 pass 하셔도 되고 초급자들도 안 궁금 하시면 안 읽으셔도 됩니다. ^^

(재우니형의 꼬드김에 넘어가 오랜만에 글을 씁니다 ㅋㅋ)

-------------------------------------------------------------------------------------

오늘 적을 내용은 어제 오늘 하루 종일 저를 괴롭혔던 삼항연산자 입니다.

학교 다닐때 배운 기억은 있는데. 매일 if~else 문을 쓰다보니 잊혀졌었는데. 추가개발 하러 온 사이트에 삼항 연산자가 많이 사용 되어있더군요. 알고보니 유용해요 ^^

 

우선 삼항연산자의 형식은 이렇 습니다.

(조건) ? A : B

조건이 참일 경우는 A값을 그렇지 않고 False일 경우는 B값을 반환 하지요.

 

예를 들어 사용해 보자면.

string TeamName = string.Empty;

TeamName = TeamCode == 0001 ? "인사팀" : "총무팀";

팀코드가 0001과 같을 경우는 TeamName 변수에 "인사팀"을 그렇지 않을 경우는 "총무팀" 이라는 문자열을 저장하게 됩니다.

 

그리고 오늘 제가 경험했던 경우는 이렇습니다.

-------------------------------------------------------------------------------------

<asp:repeater id="aRepeater" runat="server">
   <ItemTemplate>
      <tr>
         <td width="12"><img src='<%#url["CallCenterCommon"] + "/bullet12.gif"%>' ></td>     
         <td width="123"><a href="xxxxjavascript: OpenTopUserView('<%#Convert.ToString(DataBinder.Eval‎(Container.DataItem, "ID"))%>')" [안내]태그제한으로등록되지않습니다-xx[안내]태그제한으로등록되지않습니다-xxonfocus="this.blur();"><%# string.Format("[{0}] {1}", (DataBinder.Eval‎(Container.DataItem, "CenterName").ToString().Length>2)?DataBinder.Eval‎(Container.DataItem, "CenterName").ToString().Substring(0,2):"미정",DataBinder.Eval‎(Container.DataItem, "UserName")) %></a>
         </td>     
      </tr>
   </ItemTemplate>

-------------------------------------------------------------------------------------

삼항연산자를 사용 하는 부분은 초록색으로 칠했습니다.

너무 길어서 한줄에 안나오네요 ^^;  (불편 하시면 다른 에디터로 카피해서 보시길....)

 

보시면 repeater 컨트롤의 ItemTemplate에 값을 바인딩 하고 있습니다.

삼항연산자가 들어간 곳을 살펴보면,

"CenterName"값의 길이가 2보다 크냐? "CenterName"값을 앞에서 2개만 짤라서 반환해라(true): "미정" 이라는 문자열을 반환(false)

이렇게 되어 있지요.

그런데 추가적으로 제가 해야 할 부분은. 다른 값을 한번더 조건을 주어야 했습니다.

이유는 특정 팀을때만 "CenterName"값을 앞에서 2개만 짤라서 반환하고 나머지 팀은 "CenterName"값을 그대로 반환하라는 요구가 들어와서 이지요.

그래서 아래와 같이 수정을 했습니다. (삼항연산자를 2번 사용 했습니다. 추가된 부분은 빨간색 입니다.)

---------------------------------------------------------------------------------------------------------------------------

<%# string.Format("[{0}] {1}", (DataBinder.Eval‎(Container.DataItem, "CenterName").ToString().Length>2)?(DataBinder.Eval‎(Container.DataItem, "GubunCode").ToString() == "CS")?DataBinder.Eval‎(Container.DataItem, "CenterName").ToString().Substring(0,2):DataBinder.Eval‎(Container.DataItem, "CenterName").ToString():"미정",DataBinder.Eval‎(Container.DataItem, "UserName")) %>

---------------------------------------------------------------------------------------------------------------------------

간단하게 쓰자면.

(조건A)?(조건B)?(반환값A):(반환값B):(반환값C)

설명을 하자면.

우선 (조건A) 가 참이냐 거짓이냐를 따집니다. 거짓이면 (반환값C)를 반환합니다.

그리고 (조건A)가 참인 경우는 다시 (조건B)를 따져서 참 일경우와 거짓일 경우의 값을 반환 하지요.

 

삼항연산자는 if~else문으로도 구현 할 수 있지만. 위와 같이 하게 된다면 코드량이 줄어 들겠지요.

그리고 결정적으로 저는 aspx 페이지에서 저런 바인딩 표현식에 무쟈게 약해서리 -_-; 어떻게 바꿔야 할지 참 난감했답니다.

 

오늘의 결론은~!

삼항연산자도 중복해서 사용 할 수 있으며. 효과도 따봉입니다 ^^

(어젯밤에 삼항연산자 중복 사용이 안된다고 했던 분이 계세요 -_-; ㅋㅋㅋ)

 

By 남처리.(http://blog.naver.com/nclovehs)

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자심재운 | 작성시간 07.11.21 삼항연산자는 javascript,php,java,c#2.0 등등 많이 사용되는 물건입니다. ^^; 저렇게까지 복잡한 삼항연산자 구문은 처음보지만... 좋은 tip 이네요.
  • 작성자돌도끼 | 작성시간 07.11.21 조건A? (조건B?반환값A:반환값B) :반환값C.. 참일때 한번더 삼항 연산자를 쓴것이죠. 거짓일때는 조건으로 한다면 조건A?반환값A:(조건B?반환값B:반환값C) .. 괄호처보면 그냥 두번 쓴것이죠. 세번도 써볼까요. 조건A?반환값A:(조건B?(조건C?반환값B:반환값C):반환값D) .. 삼항연산자는 제가 알고 있는 모든 언어에 있으며 C#2.0 에서 추가된 것은 아닙니다.. 그리고 아키텍처 성향에 따라 프로젝트에서 제한적으로 쓰게 합니다.(표준이 삼항연산자 사용못하게 하는곳도 있습니다.). 제한하는 이유로는 가독성을 떨어트리는 경우가 있기 때문이죠. 그런이유에서 중복사용은 좋은 코딩방법은 되지 못한것 같습니다.
  • 작성자남처리 작성자 본인 여부 작성자 | 작성시간 07.11.21 아~ 삼항연산자를 못쓰게 하는 곳도 있구나..! 하긴 가독성이 떨어지죠 ㅋㅋ
  • 작성자퇴근5분전 | 작성시간 09.05.28 삼항연산자가 저런형태로 쓰이는건 첨 알았네요 ^^ 잘봤습니다.
  • 답댓글 작성자남처리 작성자 본인 여부 작성자 | 작성시간 09.05.31 1년반 전 글인데 댓글이 달리다니 글쓴이로써 감사드리옵니다 ^^
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼