분류 전체보기 102

String 문자열의 불변성

문자열은 값형식이 아닌 참조형식으로 heap 메모리에 실제 값을 저장한다. string str1 = "안녕하세요";string str2 = str1; str2 에 str1 의 참조주소를 할당하였고str2 또한 str1의 "안녕하세요"라는 데이터를 가리키게 된다.   이때 만약 str1의 문자를 변경하면 어떻게 될까string str1 = “안녕하세요”;string str2 = str1;str1 = "abc"; 일반 참조타입과 다른방식으로 작동하게 된다.일반적인 참조타입의 경우 가변객체의 특성으로 heap 영역의 데이터가 변경되어도참조는 그대로 유지하며 데이터만 변경된다. 하지만 위의 그림과 같이 문자열은 heap 영역의 데이터를 변경하는 경우다시 새로운 메모리를 할당하게 된다. 이러한 성질을 불변성이라 ..

CS 2024.09.02

Builder Pattern 빌더 패턴

복잡한 객체의 생성 과정을 단계별로 나누는 방법을 제공하는 디자인 패턴이다.객체 생성의 복잡성을 줄이고, 코드의 가독성을 높일 수 있다. 특징1. 생성 과정을 분리하여 복잡한 객체 생성과정을 단순화 할 수 있다.2. 객체를 다양한 형태로 생성할 수 있다.3. 객체 생성 코드가 명확해질 수 있다.  자동차의 객체가 다음과 같다고 가정한다.  위의 코드는 아마 클라이언트가 전부 내용을 한번에 전달해줘야 하는 상황일 것이다. 또는 생성자를 통해 초기화 하지 않고 아래의 그림처럼 Set.. 같은 함수로 설정할 수 있겠지만어느 설정을 깜빡할 가능성도 있다. 이를 좀더 쉽게 구성하기 위해 빌더를 통해 구조를 좀더 괜찮은 방식으로 생성할 수 있다.좀더 소통을 간결하며 명확하게 전달하는 방식이다.클라이언트의 오더를 받..

디자인 패턴 2024.08.08

Factory Pattern 팩토리 패턴

객체 생성의 세부사항을 외부로 노출하지 않고 상위 클래스, 인터페이스를 통해 객체를 생성하는 디자인 패턴객체 생성 로직을 캡슐화 하여 코드의 유연성, 확장성을 높이는데 도움이 됨 생성 패턴의 기본이 되는 심플 팩토리 구조이다.즉, 객체 생성을 대신해주는 별도의 객체가 있다고 생각하면 되겠다. 만약 클라이언트가 모든 객체를 직접 생성하고, 별도의 설정을 전부 직접 해줘도 상관은 없다.하지만 각 설정이 정규화 되어있다면 매번 반복적인 작업을 할 필요가 있을까? 또한 모든 객체에 변경점이 생겼을 때 모든 객체에 직접 수정을 해줘야한다면 유지보수성에 문제가 될 수 있다. 위의 그림처럼 공장처럼 요구사항에 맞게 대신 제작해주는 객체가 있다고 보자. 클라이언트의 요구사항에 맞게 원하는 객체를 받아낼 수 있으며가장 ..

디자인 패턴 2024.08.08

커밋메세지 한글 깨짐 인코딩문제 해결

Tools - Options  일반탭에서 Default text encoding : euc-kr 설정 설정에서 Edit Config File... 로 메모장 열어주기 [i18n] logOutputEncoding = euc-kr commitEncoding = UTF-8[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true ignorecase = true[remote "origin"] url = https://github.com/....git fetch = +refs/heads/*:refs/remotes/origin/*[branch "master"] remote = origin merge = r..

Git/SourceTree 2024.08.04

C# - stack 주소와 heap 주소 찾기

Stack 메모리 주소 확인하는 방법string a = "안녕하세요";string b = a; a 와 b 는 스택영역에서 각자의 주소를 갖고 하나의 heap 메모리를 참조하고 있는 상황이다. &변수명 으로 조사식을 확인해보면 해당 문자열 참조변수의 크기는 8byte로 해당 주소는 스택영역의 주소임을 알 수 있다. Heap 메모리 주소 확인하는 방법 string a = "안녕하세요";string b = a;a = "안녕하세요2";string c = "안녕하세요";GCHandle handle = GCHandle.Alloc(a, GCHandleType.Pinned);GCHandle handle2 = GCHandle.Alloc(b, GCHandleType.Pinned);GCHandle handle3 = GCHa..

C# 2024.07.25

객체지향(OOP) 4대 특징

이러한 이론이 왜 필요할까?결론만 말하면 객체라는 개념을 다뤄 좋은 코드를 작성할 수 있는 특징들이다. 이러한 원칙들은 코드의 재사용성을 높이고, 유지보수, 확장, 유연성에 큰 도움을 줄 수 있다. 객체지향의 4대원칙은 캡슐화, 상속, 다형성, 추상화 라는 습성이 있다.  캡슐화 캡슐 알약을 뜯어보면 내부에는 a라는 약재, b라는 약재와 같이 많은 약재들이 들어있을 것이다.또한 이러한 여러종류의 약재를 한 공간에 묶어 캡슐이라는 껍데기로 감싸주게 된다. 객체지향의 캡슐화 또한 이 특징과 같다.데이터(속성)과 행위(메서드)를 하나의 단위로 묶어 줄 수 있으며내부에서는 어떻게 동작하는지 보이지 않고, 외부에는 이를 접근해 사용만 가능하게 하는 인터페이스를 제공한다. 외부에 보이지 않게 한다는 것은 코드의 보..

객체지향(OOP) - 객체란?

객체지향 Obejct Oriented Programming단어의 뜻을 보면 뭔가 오브젝트를 기반으로 프로그램을 작성하다 라는 의미같다. 이는 컴퓨터 프로그래밍의 패러다음의 하나로 객체라는 개념을 반영하여 설계되고 구현하는것을 의미한다. 그렇다면 객체라는게 뭘까 객체는 데이터(속성) 과 그 데이터를 조작하는 행위(메서드)를 하나로 묶은 개념을 의미한다.그렇다면 객체지향의 의미는 이러한 객체들을 다뤄 프로그램을 작성하는것을 의미하게 된다. 객체는 위 설명처럼 속성과 행동을 포함하는 프로그램의 하나의 단위가 된다.속성은 객체의 상태를 나타내고, 행동은 객체가 할 수 있는 작업을 의미한다. string name1 = "김씨";int age1 = 20;Console.WriteLine($"{age1}살 {name1..

C# 가변성,공변성, 반공변성, 불공변성

공변성과 반공변성은 제네릭 타입 시스템에 타입의 상속 관계에 따라 제네릭 타입변환을 허용하는 특성을 의미한다. string[] strArr = new string[5];object[] objArr = strArr;위의 코드처럼 형변환이 가능한 성질을 의미한다. .Net 4.0이전 버전에서 IEnumerable 인터페이스 와 그 이후의 인터페이스를 살펴보자public interface IEnumerable : IEnumerable // .Net 4.0 이전public interface IEnumerable : IEnumerable // 그 이후버전  위의 코드를 보면 4.0 이후의 버전에서 갑자기 out 키워드가 추가되었다. IEnumerable Ilist = new List();IEnumerable ob..

C# 2024.07.21

C# out , ref 키워드의 차이

ref 와 out 키워드는 매개변수 작성시 사용되는 키워드로함수호출시 전달받는 매개변수의 참조값을 전달하게 된다. 두개의 키워드는 제약의 차이점이 있다. 첫번째 차이점우선 아무것도 하지않는 메서드를 작성해보자.static void MethodRef(ref int m_value){}static void MethodOut(out int m_value) // CS0177 에러{} CS 0177현재 메서드를 벗어나기 전 out 매개변수를 할당해야한다. out 키워드는 출력전용 키워드로 전달받은 매개변수의 값을 반드시 대입하여 내보내줘야한다. static void MethodOut(out int m_value){ m_value = 5;} 에러코드가 사라진다. 두번째 차이점매개변수 입력과정을 살펴보자.int ..

C# 2024.07.17