프로그래밍 언어

    C# 클래스 할당시 메모리 구성 디버깅

    디스어셈블링 및 실제 메모리를 디버깅하면서 데이터와 객체를 할당시 어떤 구조로 메모리에 올라가는지와 C#에서 클래스를 할당하면, 힙이 어떻게 동작하는지를 보자 쉽게 보기 위해서 예제는 x86(32bit)로 컴파일되었고 이를 기준으로 설명한다 예제로 사용할 모습은 이와 같다. 아무 클래스나 하나 만들고 그 안에 문자열 하나와 int 하나를 선언, 구조체 역시 메모리를 살펴보기 쉽게 int형 두개로 선언했다 먼저 Case1 메소드를 디버깅해보자 Watch창에서 살펴보면 현재 testObject의 상태를 알 수 있고, '&testObject'로 testObject의 실제 메모리 주소를 볼 수 있다. C# 문법에서는 직접적인 포인터를 사용하려면 unsafe 옵션을 이용해서 사용 할수 있으나, 이는 그리 권장하는..

    [C#] Nullable type, int? 널러블 타입에 대해서

    1. Nullable Type 이란? C# Nullable Type 이란 Null 을 가질 수 없는 데이터 타입을 Null을 가질 수 있는 타입으로 만든 새로운 타입이다. 대표적으로 값 타입(value type)들이 Null을 가질 수 없는데요. int, 구조체, double, bool 등의 데이터 타입은 값이 없는 상태(NULL)이 불가능한 데이터 타입들이다. (클래스와 같은 reference type(=참조 타입)은 이미 Null 체크가 가능하기 때문에 따로 Nullable Type으로 만들지 않아도 된다.) int와 같은 값 타입에 대해서 "값이 없다"를 표현하기 위해 Nullable Type이 개발 되었다. 우리는 int를 nullable int type으로 변경함으로서 값이 할당 되었는지 아닌지..

    C# 공변성(Covariance)과 반공변성(Contravariance)

    사실 공변성과 반공변성을 통칭 가변성이라고 한다. 그리고 이와 반대되는 의미로는 불변성이 있다. 가변성(Variance) : 특정 타입의 객체를 다른 타입의 객체로 변환할 수 있는 성격을 말한다. 공변성(Covariant) : X -> Y가 가능할 때 C가 C -> C로 가능하다면 이는 공변이다. 반공변성(Contravariant) : X -> Y가 가능할 때 C가 C -> C로 사용 가능하다면 이는 반공변이다. 불변성(Invariant) : X -> Y가 가능하더라도 C는 C로만 사용할 수 있다. 기본적으로 제네릭은 불변이다. 좀 더 상세히 설명하기 위해서 아래와 같은 다형성을 가진 환경이 있다고 가정해보자. class Base : ICompareable { public int Id { get; set..

    C# 포인터 사용

    C#에서는 포인터를 안전하지 않은(unsafe) 형식으로 지정하여 표면적으로는 지원하지 않고 있지만 기존의 C++의 라이브러리 등의 외부 라이브러리를 사용한다던가 프로그램의 비약적인 성능향상의 목적을 위해 사용할 필요성을 가지게 된다. 이러한 포인터를 사용하기 위해서는 다음과 같은 절차를 거쳐야 사용할 수 있다. 1. 솔루션설정변경 생성한 솔루션에서 설정메뉴를 통해 들어간 뒤 빌드를 확인하면 위와 같이 안전하지 않은 코드를 사용할 수 있는 체크박스를 확인할 수 있다. 이 항목을 체크하면 솔루션 내에서 포인터를 사용할 수 있는 조건을 만들어 주게 된다. 2. unsafe 블럭 생성 class Program { static void Main(string[] args) { int number = 10; uns..

    .NET 환경의 컴파일 과정 - CLR, CIL, JIT, AOT

    예전의 C, C++의 경우 개별 환경이 프로그램의 실행 시간에 영향을 미치는 문제가 있었지만 Java가 나오면서 컴파일된 바이트코드는 윈도우, 리눅스, 그 어떤 실행환경이든 JVM만 실행 가능하다면 실행할 수 있다는 장점을 통해 인기를 끌었고, 마이크로소프트는 이를 이용해 기존 문제를 해결할 수 있도록 .NET 환경에 가상 머신을 만들어서 .NET 환경의 언어로 개발된 IL(Intermediate Language, 중간 언어) 코드들은 .NET Framework가 설치된 어떠한 환경에서도 실행할 수 있도록 하였다. 대표적인 예시로 VB .NET, C#이 있다. CLR(Common Language Runtime, 공통 언어 런타임)은 이 가상머신의 구성요소 중 하나이며, CIL(Common Intermid..

    [React] 리스트 List

    const numbers = [1, 2, 3, 4]; const exponentialNumbers = numbers.map(function (number) { return number * number; }); console.log(exponentialNumbers); // [1, 4, 9, 16] src/App.jsx import * as React from 'react'; const list = [ { title: 'React', url: 'https://reactjs.org/', author: 'Jordan Walke', num_comments: 3, points: 4, objectID: 0, }, { title: 'Redux', url: 'https://redux.js.org/', author: '..

    [React] 리액트 .js vs .jsx 차이점

    정의 jsx는 JavaScript 확장 문법 JavaScript안에서 HTML 사용 가능 jsx 사용이 필수는 아니지만 추천 (리액트 공식 홈페이지 - 문서 - JSX 소개 탭) 기능적인 차이는 없으나 팀 내 협의의 문제 .jsx란? JSX는 JavaScript XML의 약자로 자바스크립트에서 XML을 추가한 확장형 문법이다. 큰 특징은 자바스크립트에서 HTML 문법을 사용할 수 있다는 점이고 주로 리액트나 다른 프론트엔드 프레임워크에서도 사용이 가능하다. // jsx const element = Hello, world!; .js vs .jsx // JS class Hello extends React.Component { render() { return React.createElement("div", n..

    [React] 다양한 방법으로 Hello World 띄우기

    App.jsx 파일 내 수정 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} ); } export default App; 검색창 띄우기 import * as React from 'react'; const title = 'World'; function App() { return ( Hello {title} // 여긴 검색창 띄우기 용도 Search: ); } export default App; 리액트 구조) 코드 > 내부 작업 > 브라우저에 띄 아래는 구조체 사용 import * as React from 'react'; const welcome = { greeting: 'Hey', ti..

    [React] Hello React 띄우기

    App.jsx 전 코드 import { useState } from 'react' import reactLogo from './assets/react.svg' import viteLogo from '/vite.svg' import './App.css' function App() { const [count, setCount] = useState(0) return ( Vite + React setCount((count) => count + 1)}> count is {count} Edit src/App.jsx and save to test HMR Click on the Vite and React logos to learn more ) } export default App 아래와 같이 변경 import * as..

    [React] 설치 방법

    우선 Node.js를 설치해준다 다운로드 | Node.js (nodejs.org) 다운로드 | Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org cmd에서 다음과 같이 기입, 사용자 권한 x // 여기서 first-project은 폴더명임, \C:/Users/사용자 명칭/ < 이 경로로 들어감 npm create vite@latest first-project -- --template react 그 뒤 다음과 같이 순차적으로 기입 cd hacker-stories npm install npm run dev 결과