C#에서 Object를 복제하는 것은 쉽고 단순해 보이지만 실제로는 복잡하고 실수가 발생하기 쉬운 작업 입니다. 여기서는 C# Object 복제에 관한 다양한 방법들을 소개합니다. 얕은복사 vs 깊은복사 객체를 복사하는 방법은 크게 얕은복사(Shallow Cloning)와 깊은복사(Deep Cloning) 2가지로 나뉩니다. 구분 값 유형 (Value Type) 참조 유형 (Reference Type) 얕은복사 값 복사 참조된 객체 공유 깊은복사 값 복사 참조된 객체 복사 두 방식 모두 값 유형(Value Type)의 멤버변수에 대해서는 동일하게 값 복사를 진행합니다. 참조 유형(Reference Type)의 멤버변수에 대해, 얕은복사는 주소 값을 공유하며 깊은복사는 객체를 복사합니다. 그림으로 나타내면..
2012년 소개된 C# 5부터 사용 가능한 CallerMemberName Attribute를 사용하면 함수 호출자의 이름을 전달받을 수 있습니다. 예를들어 다음 소스코드를 실행하면, 컴파일러는 매개변수 callerName에 함수를 호출한 "Main"을 할당합니다. [샘플코드] static void Main(string[] args) { DoWork(); } //[CallerMemberName]를 사용하면, 컴파일러는 매개변수 callerName에 함수를 호출한 "Main"을 할당함 static void DoWork([CallerMemberName] string callerName = null) { Console.WriteLine("함수 호출자 이름 : " + callerName); } [실행결과] Cal..
Language-Culture Codes 국가별 언어코드에서 대한민국은 ko-KR, 북한은 ko-KP로 표현됩니다. 여기서 앞 ko는 언어코드(한글)을 의미하며 KR, KP는 국가/지역코드로 각각 대한민국(Republic of Korea), 북한(Democratic People's Republic of Korea)을 의미합니다. 다른 예시로 영어-미국(United State)은 en-US, 영어-영국(Great British)은 en-GB를 사용합니다. C#에서는 이러한 언어, 국가/지역 코드를 바탕으로 문자열을 비교할 수 있습니다. 문자열을 비교할 때 StringComparison 매개변수를 통해서 언어, 국가/지역의 특수성을 어떻게 반영할 지 결정할 수 있습니다. StringComparison 열거형..
SMTP 프로토콜 Simple Mail Transfer Protocol의 약자로서 메일을 전송하는데 사용되는 프로토콜입니다. 주로 메일 서버 간에 메일을 송/수신할 때 사용합니다. 또한 사용자 PC에 설치된 메일 클라이언트 프로그램(아웃룩 등)이 SMTP 메일 서버로 메일을 전달할 때 SMTP 프로토콜을 사용하기도 합니다. SMTP 전송과정 SMTP 프로토콜은 TCP/IP 프로토콜을 사용하여 메일을 전송합니다. 메일을 발송하는 SMTP서버와 메일을 수신하는 SMTP서버는 주로 25번 포트를 통해 TCP/IP 연결을 맺게됩니다. TCP/IP 연결이 완료되면 메일을 발송하는 SMTP서버는 Outbound Queue에 쌓여있는 메일을 읽어 수신하는 SMTP서버로 전달하게 됩니다. 수신하는 SMTP 메일서버는 ..
서버는 일반 데스크톱과 달리 성능보다는 안정성을 위한 부품들로 구성합니다. (2021년 7월 기준으로 작성) CPU Xeon CPU를 사용하며 E3, E5, E7 라인업으로 나누어집니다. E3 라인업: 현재는 E3가 아니라 E2000 라인업으로 불리며, Entry Range 서버용 라인업입니다. 대략 동접자가 100명(작업에 따라 달라지겠지만) 이하인 소규모 서비스, 스타트업 서비스, 기업내부망 서버용으로 사용됩니다. ECC 메모리를 지원하지만 ECC/REG 메모리는 지원하지 않습니다. E5 라인업: Middle Range 서버용으로 주로 중대형 DB서버나 서비스에 적합합니다. 최소 수백만원에서 수천만원에 달하는 고가의 서버 제품군에서 사용되며 CPU 2~4개, 메모리 8~24개를 하나의 메인보드에 장착..
소프트웨어 공학에서 학문적으로 말하는 TDD의 장단점과 실무에서 느끼는 장단점에는 차이가 있음. 여기에서는 현업에서 실무자들의 피드백을 바탕으로 정리함 시간과 비용을 증가시킨다 TDD는 평균적으로 1.5배의 시간과 비용을 증가시킴 잘짜여진 테스트 코드를 작성해야 하기에 당연한 결과임. 비용이 높다는 것은 변화에 굼뜨다는 것이기에, 자주 빠르게 요구사항이 변화하는 부분은 TDD에서 제외하기도 함 TDD 투자비용을 회수하는 시기는 보통 2-3년 이후 현업의 연구보고서에 따르면 평균적으로 2-3년 후 부터, 극적인 효과를 볼 수 있다고 함. 예를들어 수년 후에 팀이 개편되거나 입퇴사로 사람이 바뀌는 경우 교육이나 적응기간이 필요하기 마련인데, TDD코드를 작성해두었다면 사람과 무관하게 일관된 Quality를 ..
파일에 작성된 방대한 Class들의 전체 구조를 파악하거나, 원하는 위치로 이동 할 때 Code Folding은 매우 유용한 기능입니다. 여기서는 Android Studio에서 Code Folding을 실행하는 방법을 안내합니다. Code Folding 활성화 Android Studio 상단메뉴의 File → Settings 클릭 Editor → General → Code Folding 이동 원하는 Code Folding 체크 코드폴딩 실행 전체 폴딩 : [Ctrl + Shift + Minus] 폴딩 해제 : [Ctrl + Shift + Plus] 메서드 레벨만 Folding: [Ctrl + Shift + Minus] → [Ctrl + Shift + Plus] 순으로 연속입력 코드폴딩 결과 [CodeFo..
최초 설치 후 접속 - 아이디/패스워드: ubuntu/ubuntu - 화면 지우기: clear - 디렉터리 나열: ls (-l 옵션: 소유자, 파일크기 등 상세정보 출력, -a 옵션: 숨김파일 출력) - 디렉터리 이동: cd 디렉터리명 - 관리자 권한 전환: sudo -su 인터넷 연결확인 유선으로 연결된 경우 별도 설정 없이 바로 인터넷에 연결되며, 연결이 정상적인지 확인하기 위해 ping 명령어를 사용함 예를들어 공유기로 IP를 날려보자 - 예시) ping -c 5 192.168.0.1 - 설명) ping -c 요청수 대상IP(또는 도메인) 만약 WIFI를 사용하고 있다면, 인터넷 설정 파일(/etc/netplan의 yaml 파일)을 직접 편집해야함 인터넷 아이피 주소확인 로컬IP: ip addr 또..
Office365 계정이나 Exchange 계정을 아웃룩에 추가하면 데이터파일(.ost)은 C:\에 생성됩니다. 데이터파일을 용량이 넉넉한 드라이브로 옮겨야 하는 경우가 있습니다. 하지만 pst파일과 달리 ost파일은 위치 변경이 쉽지가 않습니다. 여기서는 아웃룩 2010에서 .ost파일의 위치를 변경하는 방법에 대해 안내합니다. (Office2013 이상은 추후에 다룰 예정입니다) 아웃룩 2007이나 2010에서 파일 옮기기 아웃룩을 종료하고, 완전히 종료될 때까지 기다립니다. .ost 파일은 다음 위치에 존재합니다. 파일을 옮기려는 위치에 복사합니다. C:\Users\%username%\AppData\Local\Microsoft\Outlook [제어판 → 사용자 계정 → 메일]을 클릭합니다. [전자 ..
에베레스트 신드룸(Mount Everest Syndrome)은 다음과 같은 의미들로 사용된 적이 있다. 특별한 이유없이 인터넷 등 현존하는 첨단기술을 사용하려는 경향 최첨단 기술을 특별한 이유없이 단지 존재하기 때문에 사용하는 것이 좋을 것이라고 느끼는 교사들의 성향을 표현하기 위해 사용하였다. George Mallory가 에베레스트 산을 오르는 이유에 대해 "산이 거기 있기 때문이다"라고 답변한데 착안하여 사용했다고 한다. 1994년 Maddux에 의해 사용 (Gallo & Horton의 17 페이지)2013년 Stanley 사용 인터넷을 통해 접근가능한 엄청난 정보량이나 첨단도구들에 의해 압도되는 상황 수많은 정보와 도구들을 모두 알아야할 것 같고, 사용해아할 것 같은 심리적 부담감을 표현 1994년..
- material-ui
- WPF
- AntDesign
- ios
- Xamarin.Forms 요약
- React
- Xamarin.Forms eBook
- TypeScript
- npm
- VisualStudio
- Xamarin
- .NET Standard
- Vue
- flutter
- Xamarin.Forms
- Xamarin.iOS
- Android
- MS SQL
- StringComparison
- ASP.NET Core
- Total
- Today
- Yesterday