반응형

공부 624

C#의 구조체(struct)는 가비지 컬렉터의 대상인가요?

구조체가 어떠한 형태로 선언되었는지에 따라 달라집니다. C#에서는 구조체를 포함한 모든 객체가 선언 방식에 따라 힙 또는 스택에 할당됩니다. 구조체가 지역 변수나 메서드 매개변수로 선언되면 스택에 할당됩니다. 구조체가 클래스의 필드 또는 배열의 요소로 선언되면 힙에 할당됩니다. 구조체가 힙에 할당되면 다른 객체와 마찬가지로 가비지 컬렉션의 대상이 됩니다. 가비지 콜렉터는 객체가 더 이상 사용되지 않는다고 판단되면 힙에 할당된 구조체를 포함하여 해당 객체가 사용하던 메모리를 회수합니다. 그러나 구조체가 스택에 할당된 경우 가비지 컬렉션의 대상이 되지 않습니다. 구조체를 선언한 메서드가 종료되면 구조체가 사용한 메모리는 자동으로 할당 해제됩니다. 따라서 스택 할당 구조체는 힙 할당 구조체보다 효율적이지만, ..

공부/C# 2023.03.05

AI 챗봇의 다음 단계: API에 관한 모든 것

AI 챗봇의 다음 단계: API에 관한 모든 것 ChatGPT를 통해 번역해 본 'AI Chatbot의 다음 단계: API에 관한 모든것'입니다. 불필요하다 판단된 부분은 삭제&수정을 했습니다. 원문을 이해하는데 도움은 되나 아직 제가 원하는 수준의 매끄러운 번역은 안되는 거 같습니다. 한글로 번역하는 거라서 그럴수도 있구요~^^ ... ChatGPT와 Bing의 챗봇은 결코 최종 제품이 아닌 다른 회사들이 자신들의 제품을 만들 수 있는 도구를 판매하기 위해 만들어진 데모였습니다. 그리고 그것은 성공했습니다. 이 AI 챗봇의 파동이 대중에게 도달하기 전에, 그들 뒤에 있는 회사들은 이미 개발자들을 위해 API를 준비해 두었습니다. ChatGPT가 1월에 확산되자마자, OpenAI의 Greg Brockma..

공부/자기계발 2023.03.05

가비지 컬렉션이란?

1. 가비지 컬렉션(Garbage Collecotr, GC)이란? 가비지 컬렉션은 사용하지 않는 메모리를 회수하여 시스템에서 재사용할 수 있도록 하는 C#의 자동화된 메모리 관리 메커니즘입니다. C#에서는 개발자가 C/C++에서와 같이 수동으로 메모리를 할당하고 할당 해제할 필요가 없습니다. 대신 .NET 런타임이 애플리케이션을 대신하여 메모리를 관리하므로 강력하고 안정적인 애플리케이션을 더 쉽게 작성할 수 있습니다. 2. 가비지 컬렉션의 동작 방식 가비지 컬렉션의 기본 개념은 간단합니다. 런타임은 애플리케이션에서 사용 중인 메모리를 주기적으로 검사하여 더 이상 도달할 수 없는, 즉 애플리케이션의 활성 부분에서 더 이상 참조하지 않는 개체를 식별합니다. 이러한 객체가 식별되면 런타임은 해당 메모리를 안전..

공부/C# 2023.03.05

자주 보는 개발 설계 패턴 19가지 1탄

자주 보는 개발 설계 패턴 19가지 1탄 개발자라면 꼭 알아야 할 소프트웨어 개발 설계 패턴 19가지에 관해 알아보자! 사이트에 언급된 것 중 제가 평소 자주 접해왔던 사용하는 설계 패턴부터 먼저 소개하고 2탄에서 나머지 소개할게요! 1️⃣ Factory Method 팩토리 메소드는 객체 생성과 관련된 디자인 패턴이다. 팩토리 패턴에서 인스턴스 생성 로직을 클라이언트에 노출하지 않고 인스턴스 생성 전용 클래스에서 인스턴스를 생성한다. 2️⃣ Observer Pattern 오브저버 패턴은 개체 간의 다수 종속성을 정의하여 하나의 개체가 상태를 변경하면 모든 종속성이 자동으로 다른 객체들에게 통지되고 업데이트된다. 3️⃣ Singleton Design Pattern 싱글턴 설계 패턴은 클래스의 인스턴스화를 ..

공부/자기계발 2023.03.05

오브젝트 타입에 벨류 타입을 대입하게 될 경우 어떤 현상이 발생할까?

C#에서 값 유형과 개체 유형은 근본적으로 다르며, 둘 중 하나를 다른 유형으로 대체할 수 없습니다. 값 유형은 해당 데이터를 직접 포함하는 유형이고, 객체 유형은 힙에 있는 해당 유형의 인스턴스를 가리키는 참조 유형입니다. 값 유형을 객체 유형으로 대체하거나 그 반대로 대체하려고 하면 두 유형이 호환되지 않음을 나타내는 컴파일 타임 오류가 발생합니다. 예를 들어 int 값을 객체 변수에 할당하려고 하면 int는 값 유형이고 객체는 참조 유형이므로 컴파일 타임 오류가 발생합니다. 값 유형을 객체로 사용하려면 값을 객체 참조로 래핑하여 값을 박스형으로 묶을 수 있습니다. 이렇게 하면 힙에 값의 복사본이 포함된 새 객체가 생성됩니다. 그런 다음 이 객체를 값 유형의 인스턴스인 것처럼 사용할 수 있습니다. 그..

공부/C# 2023.03.05

코딩 외에 개발자에게 절대적으로 필요한 스킬

코딩 외에 개발자에게 절대적으로 필요한 스킬 코딩만큼 중요한데 생각보다 많은 개발자가 갖추지 못한 스킬 1️⃣ 학습 능력 주니어 개발자는 시니어 개발자를 따라잡기 위해 방대한 양의 지식을 습득해야 한다. 소프트웨어를 설계, 개발, 유지, 테스트 및 평가하는 데 사용되는 모든 도구와 기술과 함께 지속적으로 빠른 속도로 발전하고 있다는 사실때문에 이미 지쳐버리는데, 다 따라잡았다고 느끼는 순간 새로운 도구와 기술이 나온다. 이러한 끊임없는 변화에 대처하기 위해 소프트웨어 엔지니어는 평생 학습에 전념하고 이를 위한 학습 전략을 개발해야 한다. 소프트웨어 개발자가 앞서 나가기 위해 당장 할 수 있는 사소한 것은 질문하는 것이다. 간단해 보이는 데 많은 엔지니어들이 질문하는 것을 두려워한다. 2️⃣ 문서화하는 능..

공부/자기계발 2023.03.05

박싱과 언박싱이란?

C#에서 박싱과 언박싱은 각각 값 유형을 참조 유형으로 변환하고 참조 유형에서 변환하는 데 사용되는 연산입니다. 다음은 각각에 대한 간략한 설명입니다: 박싱: 박싱은 값 유형을 개체 또는 System.ValueType과 같은 참조 유형으로 변환하는 프로세스입니다. 값 유형이 박싱되면 힙에 새 객체가 생성되어 값 유형의 값을 저장합니다. 새 객체에는 값 유형에 대한 참조가 할당되고 이 참조는 박싱 작업의 결과로 반환됩니다. 원래 값 유형은 변경되지 않습니다. int i = 42; object o = i; // boxing operation 예를 들어, 위 예제에서 정수 변수 i의 값은 object 유형의 새 개체에 포함됩니다. 변수 o는 이제 이 개체에 대한 참조를 보유합니다. 언박싱: 언박싱은 값 유형이..

공부/C# 2023.03.04

개발자 진로에 중요한 직급별 스킬과 기대 역할

개발자 진로에 중요한 직급별 스킬과 기대 역할 1️⃣ Engineer I (주니어) 명확하게 정의된 업무를 완료하고 다른 문제로 인해 업무가 차단되었을 때 도움을 요청한다. 관련 기술 및 시스템을 학습하고 적극적으로 시스템을 유지하고 확장한다. 상대방의 의견을 존중하고 대외적으로 정중한 방식으로 의사소통할 줄 안다. 결과물을 배포하고, 코드베이스를 리펙토링하거나 시스템을 업데이트하는 방법을 통해 영향력을 행사한다. 기술 문제를 디버깅하는 것과 문제를 개선할 수 있도록 돕는다. 이전 경력이 필요하지 않는 직급이다. 📌 주니어 직급은 학습과 성장을 통해 꾸준히 결과물을 내는 것이 목표입니다. 2️⃣ Engineer II (중간 개발자 또는 미드 레벨) 개발과 설계 과정에서 기술 부채가 발생하지 않도록 주의하..

공부/자기계발 2023.03.04

C#에서의 클래스(Class)와 구조체(Struct)의 차이점

C#에서 클래스와 구조체는 모두 데이터와 동작을 캡슐화하는 사용자 지정 데이터 유형을 정의하는 데 사용됩니다. 하지만 둘 사이에는 몇 가지 주요 차이점이 있습니다. 상속: 클래스는 다른 클래스에서 상속할 수 있지만 구조체는 상속할 수 없습니다. 즉, 클래스는 파생 클래스를 생성하기 위한 베이스 클래스로 사용할 수 있지만 구조체는 하나의 독립된 데이터 구조를 정의하는 데만 사용할 수 있습니다. 참조 유형과 값 유형: 클래스는 참조 유형으로, 클래스의 객체가 생성될 때 해당 객체에 대한 참조만 메모리에 저장됩니다. 반면 구조체는 값 유형으로, 구조체 유형의 변수가 생성되면 전체 데이터가 메모리에 저장됩니다. 이는 메모리 사용량과 성능에 영향을 미칠 수 있습니다. 기본 초기화: 클래스가 인스턴스화되면 모든 멤..

공부/C# 2023.03.04

신입, 경력직 회사 생활과 자기 계발에 필요한 것

신입, 경력직 회사 생활과 자기 계발에 필요한 것 간단한데 생각보다 사람들이 하지 않는 사소한 습관 1️⃣ 내가 맡은 공식, 비공식 업무 및 서류 기록하기 많은 사람들이 하는 큰 착각은 “다른 사람들이 내가 무슨 일 맡은지 아니까”라며 따로 개인 업무 기록를 안한다. 코드 짜기와 서류 및 보고서 작성하기 등등 결과가 확실한 업무라도 업무를 수행하는 과정 중에 세세한 코드 변경이나 작성하는 문서가 생긴다. 결과에 직접적으로 연관되는 모든 서류와 코드는 나중에 쉽게 찾을 수 있도록 한곳에 링크를 모아두자. 그리고 가능하면 모든 것을 문서화 하거나, 보여줄 수 있는 형태로 아웃풋을 내는 것이 좋다. 예를들어 팀원에게 새로운 시스템 아키텍처를 제안한다면 간단하게 회의를 통해 말로만 제안 검토를 끝내지말고, 제안..

공부/자기계발 2023.03.04

단편화(Fragmentation)란?

1. 단편화란? 단편화는 메모리가 사용할 수 없는 작은 조각으로 나뉘어져 메모리를 비효율적으로 사용할 때 발생하는 메모리 관리의 일반적인 문제입니다. 조각화는 운영 체제에서 사용하는 물리적 메모리(RAM)와 가상 메모리 모두에서 발생할 수 있습니다. 2. 단편화의 종류 단편화에는 외부 단편화와 내부 단편화의 두 가지 유형이 있습니다. 외부 단편화는 할당된 메모리 블록 사이에 사용되지 않는 메모리의 작은 간격이 있어 새 프로세스에 연속된 큰 메모리 블록을 할당하기 어려울 때 발생합니다. 외부 단편화는 압축 및 페이징과 같은 메모리 할당 기술을 사용하여 줄일 수 있습니다. 압축은 할당된 메모리 블록을 이동하여 인접한 메모리 위치를 차지하고 그 사이에 간격을 두지 않는 것입니다. 할당된 메모리 블록을 모두 이..

공부/OS 2023.03.04

자주 언급되는 로드 밸런싱 알고리즘 6가지

자주 언급되는 로드 밸런싱 알고리즘 6가지 1️⃣ Round Robin 클라이언트의 요청이 각 서버에 순차적으로 전송되는 알고리즘. 📌 추가: 라운드 로빈의 가장 큰 문제점은 요청이 전송된 서버가 모두 같은 스펙을 갖고 있다고 가정하는 것입니다. 서버의 CPU, RAM 등과 같은 스펙에 따라 요청을 분포하지 않고 순차적으로 전달합니다. 따라서 서버의 스펙이 비슷한 경우에 최적화되어 있지만, 그렇지 않은 경우 단점이 많아 아래 weighted round robin이나 hash와 같은 알고리즘이 대신 사용됩니다. 2️⃣ Sticky Round Robin 위 일반 라운드 로빈 알고리즘에서 조금 향상된 버전이다. 사람 A의 요청이 서버 A에 전달되면 다음 요청도 서버 A에 계속 전송되는 알고리즘이다. 📌 추가:..

공부/자기계발 2023.03.04

세그멘테이션(Segmentation)이란?

1. 세그멘테이션이란? 세그멘테이션은 UNIX 및 그 파생 제품을 포함한 일부 운영 체제에서 사용하는 또 다른 메모리 관리 기법입니다. 세그멘테이션에서 메모리는 가변 크기의 세그먼트로 나뉘며, 각 세그먼트는 프로그램 또는 데이터의 논리적 단위를 나타냅니다. 각 세그먼트에는 프로그램 코드, 스택, 힙 또는 데이터와 같은 특정 유형의 데이터 또는 코드가 포함됩니다. 메모리가 고정된 크기의 페이지로 분할되는 페이징과 달리 세그멘테이션의 세그먼트 크기는 프로그램의 필요에 따라 달라질 수 있습니다. 세그멘테이션은 다양한 메모리 요구 사항을 가진 프로그램을 보다 효율적으로 처리할 수 있으므로 페이징보다 더 유연한 기술입니다. 운영 체제는 세그먼트 테이블을 유지 관리하여 사용 가능한 메모리 세그먼트와 현재 사용 중인..

공부/OS 2023.03.04

성장이 이념이 될 때

성장이 이념이 될 때 스타트업계에선 성장이 귀걸이같다. 이것도 성장 저것도 성장 그것도 성장. 커리어와 삶에 욕심이 많은 사람들은 어김없이 성장이란 단어를 입에 담는다. 적에도 적은 적이 있지만 나는 행복이나 성공은 삶의 목표가 될 수 없다고 생각하고 있다. 행복은 지나가는 감정 덩어리일 뿐이므로 목표로 삼기 어렵고, 성공은 지나치게 사회가 채권적으로 정의해버렸기 때문에 그들만의 좁은 문이며, 솔직히 무너지는 성이라고 본다. 그렇다면 성장이란 도대체 무엇인가. 양적 성장, 질적 성장 같은 개념을 들이기 전에, 성장이란 오직 비전이 있어야 성립하는 개념이라고 생각해볼 수도 있다. 예를 들어보자. 나무는 어떻게 성장하는가? 성장한 나무와 성장하지 않은 나무는 어떻게 구분하는가? 매우 단순하다. 성장은 사이즈..

공부/자기계발 2023.03.04

페이징(Paging)이란?

1. 페이징이란? 페이징은 운영 체제에서 컴퓨터 시스템의 메모리를 관리하고 구성하는 데 사용하는 메모리 관리 기법입니다. 페이징은 이전 메모리 관리 기법에서 사용된 가변 크기 파티션으로 인한 메모리 조각화 문제를 해결하는 데 사용됩니다. 페이징에서 메모리는 일반적으로 4KB에서 64KB 범위의 특정 크기의 "페이지"라고 하는 고정 크기 청크로 나뉩니다. 그런 다음 페이지는 시스템에 데이터와 프로그램을 저장하는 데 사용됩니다. 운영 체제는 페이지 테이블을 유지 관리하여 사용 가능한 메모리 페이지와 현재 사용 중인 페이지를 추적합니다. 페이지 테이블은 프로세스에서 사용하는 가상 주소를 메모리에 있는 페이지의 실제 주소에 매핑하는 데이터 구조입니다. 페이지 테이블의 각 항목에는 페이지의 물리적 주소, 상태(예..

공부/OS 2023.03.04

주니어 개발자가 성장하기 좋은환경

주니어 개발자가 성장하기 좋은환경 F-Lab에서 작성한 “주니어 개발자가 성장하기 좋은 환경” 이라는 글을 공유 드립니다. 취업이나 이직을 고민하는 분들께 도움이 됐으면 좋겠습니다. 가장 인상깊은 부분은 결국은 사람이 중요하다는 생각이 듭니다. 성장하기 좋은 회사인지 판단하기 위한 질문들도 같이 제공해주시니 참고하시면 좋을 것 같습니다 출처 : 커리어리 '강병진'님 https://careerly.co.kr/comments/77753?utm_campaign=user-share 강병진 / 주니어 개발자가 성장하기 좋은환경 | 커리어리 F-Lab에서 작성한 “주니어 개발자가 성장하기 좋은 환경” 이라는 글을 공유 드립니다. 취업이나 이직을 고... careerly.co.kr 원 출처 : https://f-la..

공부/자기계발 2023.03.04

Friend 키워드란?

1. Friend 키워드란? C++에서 friend 키워드는 클래스의 멤버 함수나 변수에 대한 접근 권한을 다른 클래스나 함수에 부여할 때 사용됩니다. 즉, friend 키워드를 사용하면 해당 클래스의 private 멤버에 접근할 수 있는 권한을 부여할 수 있습니다. 2. Friend 키워드의 사용법 friend 키워드는 함수 및 클래스 두 가지 방법으로 사용할 수 있습니다. 1. Friend functions : Friend functions은 클래스의 개인 및 보호 멤버에 대한 액세스 권한이 부여된 비회원 기능입니다. 함수를 클래스의 친구로 선언하려면 클래스 정의에서 함수 선언 전에 friend 키워드를 사용해야 합니다. class MyClass { private: int x; public: frie..

공부/C++ 2023.03.04

518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다.

518일동안 단 하루도 빠지지 않고 알고리즘을 풀었다. 💡 글을 읽고... 개발자라면 알고리즘과 영원히 떨어질 수 없는 사이입니다. 누군가는 개발할때 알고리즘이 전혀 필요없다고 하지만 알고리즘을 이해하고 개발을 하는것과 그렇지 않은건 천지차이라고 생각합니다. 글쓴이는 개발이 "논리적 사고를 기반으로 가설을 세우고 증명하는 일련의 과정이"라고 생각하고 이것들을 훈련시키면 생산성을 높일 수 있다는 생각으로 2년이 넘는 시간동안 알고리즘을 풀었다고 합니다. 상위 0.5%에 진입 했음에도 "배움에는 끝이없다."라고 하는 글쓴이를 보면서 진짜 꾸준함과 실행력에 감탄과 박수가 절로 나왔습니다. 👏 이 글을 추천하는 이유는 이렇습니다. ✔️ 어떤 단계로 알고리즘을 공부해야 하는지, 알고리즘 사이트 추천 ✔️ Code..

공부/자기계발 2023.03.04

나는 협업을 잘 하고 있는가에 대한 고찰

나는 협업을 잘 하고 있는가에 대한 고찰 회사에서 기획자분이 저에게 선을 넘은 말을 하는 발생했습니다. 당시에는 참고 넘겼지만 되새길수록 화가 나 기획자의 입장과 나의 입장을 글로 써 정리했다 지웠다 하며 감정을 삭혔는데 갑작스러운 궁금증이 생기더군요🤔 분명 기획자가 저에게 감정이 상했던 부분이 있으니 저런 태도를 보이는 걸텐데, 저는 정말 기억이 나지 않았거든요. 즉, 제가 무심코 행동하고 말했던 부분이 상대에겐 불쾌했을 수 있다는 생각을 하게 됐습니다. 그래서, 커리어리에서 투표를 진행했습니다! 아직 진행중인 투표지만, 어느 정도 1위는 확정이 된 것 같습니다. 그 1위가 제 예상과 달라 참 놀랐습니다. 투표 내용은 아래와 같습니다. 💬 기획자 입장에서 가장 같이 일하기 싫은 개발자 1. 논리적으로 ..

공부/자기계발 2023.03.04

서비스 기업에서 필요한 설계 능력 키우기

서비스 기업에서 필요한 설계 능력 키우기 좋은 설계는 개발 기간을 단축 시켜 줄 뿐만 아니라, 향후 유지 보수 이슈를 줄이기 때문에 매우 중요합니다. 하지만 실제로 개발 프로젝트를 하다 보면 수많은 이유로(?) 설계 문서화가 잘 이루어지지 않는 경우가 많은데요. 그러면서 개인이 설계 역량을 키우는 것에도 한계가 있는 것 같습니다. 그러면 어떻게 설계 능력을 기를 수 있을까요? 설계 능력을 기르는 방법 다음 4가지를 알아봤습니다. 🚀 개발자 스스로 설계 능력을 키우는 방법 1. 설계 문서 작성해보기 - 이미 개발한 프로젝트나 포트폴리오 용 개발 예정 프로젝트의 설계 문서 작성해보기 2. Flow Chart 그리기 - 실제 프로그램을 논리적으로 그려보는 과정 3. PoC(Proof of Concept) 많이..

공부/자기계발 2023.03.04
반응형