분류 전체보기205 [Refactoring 기법 #03] 메서드 정리 - 임시변수 내용 직접 삽입 ※ 오늘의 명언 훌륭한 코드는 훌륭한 문서보다 낫다. - Steve McConnell, 개발자 서론 이번에 공부할 내용은 메서드 정리 파트에서 임시변수 내용 직접 삽입이다. 바로 시작해보자. 작성소스 private bool compareSumValue() { int temp_val = Calculator.Sum(1,2); return (temp_val > 2) } 위의 소스에서 temp_val은 Sum()이라는 함수에서 나온 결과물을 담아놓는 임시 변수이다. 리팩토링 책에서는 이렇게 제안한다. "간단한 수식을 대입받는 임시변수로 인해 다른 리팩토링 기법 적용이 힘들 땐 그 임시변수를 참조하는 부분을 전부 수식으로 치환하자" 위의 내용을 참고하여 리팩토링을 진행해보자. 리펙토링 후 소스 private bo.. Refactoring/Refactoring Skill 2022. 1. 9. [Refactoring 기법 #02] 메서드 정리 - 메서드 내용 직접 삽입 ※ 오늘의 명언 항상 이런 생각으로 개발에 임하라.“내 소스를 유지보수하게 될 개발자는내가 어디 살고 있는지 알고 싶어하는 과격한 사이코패스일 것이다.” - Martin Golding 서론 우리는 보통 어떠한 기능을 갖고 있는 로직들을 함수로 만들어 사용한다. 과연 기능을 갖고 있다해서 모두 함수로 만들어 사용하는 것이 좋은 소스라고 볼 수 있을 것인가? 바로 이 질문에 대해 이번 글에서 다뤄볼려고 한다. 작성 소스 int val = ?; private int getValue() { return compareValueCheck() ? 2 : 1; } boolean compareValueCheck() { return val > 5; } 위의 소스를 보면 int형은 val가 멤버변수로 선언되어있는 상태이고 .. Refactoring/Refactoring Skill 2022. 1. 9. C# .Net Framework와 .Net Core 5.0 어셈블리(dll) 참조하는 방법 서론 이번 원격 프로그램을 만드는 프로젝트를 진행 중 WPF의 자동화 어셈블리들을 추가하는 과정중에 설정 문제가 발생했다. 내가 사용하고싶은 참조는 System.Windows.Rect의 속성이였고 해당 속성을 사용하기 위해서는 WindowsBase를 참조해야했다. System.Windows.ResourceDictionary, System.Windows.Application.Current, System.Windows.Point 등 속성을 가진 using System.Windows을 참조하고싶다면 어떻게 해야할까? 방법은 간단하다. 솔루션 탐색기 - 프로젝트 더블 클릭 - csproj에서 true줄 추가 - 끝 해당 방식을 캡쳐 이미지로 간단히 정리해보겠다. 설정 방법 1. 솔루션 탐색기에서 프로젝트(원격제.. Programming/C# 2022. 1. 6. C# Properties.Settings.Default의 설정 값은 어디에 저장이 될까? (app.config 관리) 서론 나는 여지껏 App.config에 값을 관리할때 Properties.Settings.Default.Save()를 하면 app.config에 적용이 되어 값이 관리되는줄로알고 해당 문법을 사용해왔었다. 그런데 !! 최근에 config에 값을 수정한 후에 해당 .exe파일과 .config파일을 다른 곳에 옮겨서 사용해보니 수정한 값이 없어지고 처음 설정한 초기 기본값으로만 잡혀있는 것이였다. 당황감속에 config파일을 열어봤다. 실행경로에 있는 config에 수정한 값들이 하나도 적용이 안되어 있는 것을 마주했다.. 난 당연히 Save()하고 난 뒤에 프로그램을 껐다켜도 저장이 되어있기에 app.config에 저장이 되어 관리가 되고있겠지란 생각을 하고 사용해왔는데 너무 당황스러웠다. 이것을 어떻게 .. Programming/C# 2022. 1. 6. [VisualStudio] .net 5.0 종속성에 어셈블리(dll) 추가가 안될 때 !!! 서론 없이 어떤 문제 발생 내용과 어떻게 해결했는지 알아보자. 문제 발생 내용 클래스 라이브러리에서 System.Window.Form.dll 을 참조 할려고 했는데 종속성에서 추가하면 자꾸 이상한 문자가 반환되고 참조가 안됐었다. (2-1 이미지 참고) 해결 우선 종속성에서 dll추가를 찾아보기를 눌러서 Microsoft 폴더에서 해당 dll 검색하여 추가하니 정상작동. .net 5.0에서 기존 솔루션 탐색기에 참조라고 있던 것이 종속성으로 변경하였고, 해당 종속성에 기존 어셈블리(dll)을 추가할려고 하면 아래의 경로로 들어가서 추가할 dll 검색하여 추가해주면 된다. 아래 이미지 방식대로 종속성에서 COM 에서 검색해서 추가하면 자꾸 이상한 문자만 나오고 추가가 안되서 애좀 먹었었다. 문제 발생 ! .. Programming/C# 2022. 1. 5. [Refactoring 기법 #01] 메서드 정리 - 메서드 추출 ※ 오늘의 명언 아무리 구조가 잘 되어 있더라도, 프로그래머가 나쁜 프로그램을 만드는 걸 막아주는 프로그래밍 언어는 없다. - Larry Flon, 구조적 프로그래밍에 대한 연구 저자 서론 이번 글에서 공부할 내용은 메서드 정리 파트에서 메소드 추출 부분의 내용을 정리할려고 한다. 해당 내용은 간단한 내용이니 부담없이 봐도 좋을 것 같다. 작성 소스 private string _blog = ""; private string _owner = ""; praivte void printBlogOwner() { //블로그 정보를 불러오는 함수 호출 inputVal(); //세부 정보 출력하기 System.out.println("blog" : + _blog); System.out.println("owner" : +.. Refactoring/Refactoring Skill 2022. 1. 4. [Refactoring] 리팩토링(Refactoring)이란? (리팩토링 효과 / 해야 하는 이유) ※ 오늘의 명언 올바로 작동하지 않는다고 걱정하지 마라. 모든 게 잘 되었다면, 내가 할 일이 없어진다. - Mosher’s Law of Software Engineering 서론 클린 코드가 필요한 개발자에게 필요한 기술은 리팩토링이다. 위의 이미지에 있는 교재로 스터디를 진행할 예정이며 지금처럼 여유있을 때마다 하나씩 정리할 예정이다. 개발에 대한 공부는 끝이없지만 이 리팩토링에 대한 개념을 정리하여 한줄을 적더라도 누구에게 보여줘도 이해하기 쉬운 소스를 짜보자. 우선 기술들을 익히기 앞서 리팩토링 기술들에 대해 리펙토링에 대해 먼저 알아보자 리팩토링이란? ( What is Refactoring ? ) 위키백과에서 정의 된 내용부터 알아보자. 리팩토링(Refactoring)이란 "'결과의 변경 없이 .. Refactoring/Refactoring Skill 2022. 1. 3. [Review] "초보자를 위한 C# 200제" 책 공부 후기 ! 이번 글에서는 나의 C#의 베이스를 다져준 이 책에 대해 후기를 간단히 남겨 볼려고 한다. 요즘 이리저리 하는게 많아서 너무 바쁘지만 이렇게 굳이 시간을 쪼개서 후기를 남기는 이유는 이 책에서 내가 어떤 지식을 얻었고 어디 부분이 나에게 도움이 되었는지 적어놓으면 나중에 해당 문제가 다시 발생했을 때 쉽게 서치할 수 있도록 남겨두기 위함이 있다. 작성 목적의 이유를 정리해보면 이렇다. 어떤 부분이 도움이 되었는가 ? 이 책을 공부해서 해결한 문제 ? 이 책을 보고 더 깊게 공부하고 싶은 부분은? 어떤 부분이 도움이 되었는가 ? 1. 객체 지향의 기초를 다지는데 아주 좋다. > OOP의 특성을 파트별로 잘 나누어 실습하게 좋게 되어있다. 2. 기초 알고리즘에 대한 예제가 많다. > 처음 C#이란 언어에 익.. Self-Development/Book Review 2022. 1. 2. [Network] TCP/IP Server와 Client의 통신 구조 서론 이번글에서는 개발자라면 한번씩은 들어봤을 tcp/ip 통신 방식과 서버와 클라이언트 간의 통신 구조에 대해 알아볼 것이다. 우선 TCP/IP가 뭔지부터 알아보자. TCP/IP란? 먼저 간단히 정의하면 TCP/IP는 컴퓨터와 컴퓨터간의 기본적인 통신규약(프로토콜)이다. TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP(Internet Protocol)와 전송 조절 프로토콜인 TCP(Transmission Control Protocol)로 이루어져 있는 구조이며 이 중 IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있고, TCP는 IP 위에서 동작하는 프로토콜로 데이터의 전달을 보증하고 보낸 순서대로 받게 해주는 속성을 갖고있다. 우리가 흔히 볼 수 있는 HTT.. Computer Science/Network 2021. 12. 30. [Algorithm] 선택 정렬(Selection Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 선택정렬이다. 바로 선택정렬의 개념부터 알아보자. 선택정렬이란? 첫번째 인덱스부터 모든 인덱스를 검사하여 최소값을 찾아 정렬하는 방식이다. 그렇기 때문에 입력된 데이터가 정렬이 되어있건, 역순이건, 반쯤 정렬이 되어있건 모두 같은 시간이 걸리게된다. 따라서 이 정렬의 시간복잡도는 O(n^2)가 되고 데이터 수가 커지면 커질수록 실행시간은 제곱으로 늘어나게 되는 형식인 것이다. 아래의 참고 이미지를 보면 이해가 쉽게 갈 것이라 생각한다. 위의 참고 이미지처럼 끝까지 한번 돌고 최소 값을 찾아 교환(swap)하는 형식이다. 이런 방식의 장점고 단점에 대해서도 알아보자. 장점 코드 구현이 쉽다. 정렬이 진행됨에 따라 속도는 빨라지는 속성을 갖고있다. 버블 정렬.. Algorithm/Concept 2021. 12. 29. [Algorithm] 삽입 정렬(Insertion Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 삽입정렬이다. 바로 삽입정렬의 개념부터 알아보자. 삽입정렬이란? 배열 값 중에서 비교할 키 값을 정해놓고 맨 앞 인덱스부터 하나씩 비교 키 값과 비교하여 작은 수를 앞으로 옮기는 방식이다. 풀어서 얘기하면 삽입정렬은 1번 인덱스부터 시작을 하며 2개의 수를 비교하여 배열 사이에 변수를 삽입하여 정렬하는데 이렇게 정렬을 하다보면 비교한 숫자보다 왼쪽으로 자신이 더 크면 그냥 원래 자리에 있는 방식이라서 순차적으로 계속 진행하면 정렬이 되는 형식이다. 아래의 참고 사진을 보면 이해에 도움이 될것이다. 위의 사진을 보면 알 수있듯 키값을 정해두고 비교해가며 정렬해가는 방식인 것이다. 이제 삽입정렬의 장 단점을 알아보자. 장점 비교적 쉬운 코드로 구현이 가능하다.. Algorithm/Concept 2021. 12. 29. [Algorithm] 버블 정렬(Bubble Sort)에 대해 알아보자! 이번에 다룰 내용은 여러 정렬 알고리즘 중 하나인 버블정렬이다. 바로 버블정렬의 개념부터 알아보자. 버블정렬이란? 인접한 값을 순차적으로 계속 비교하여 위치를 바꾸면서 최대, 최소값을 구해가는 정렬 방식이다. 다시 말해, A>B or AB, 내림차순으로 정렬을 하고싶다 하면 A arr[j]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } /// /// Print 함수 /// /// static void Print(int[] arr_val) { for (int i = 0; i < arr_val.Length; i++) { Console.Write(arr_val[i].ToString() + "\t"); } } } } Algorithm/Concept 2021. 12. 29. 이전 1 ··· 11 12 13 14 15 16 17 18 다음 💲 많이 본 글