프로그래밍 언어

    [C++] LNK2001, LNK1120 링크 오류 (static 관련)

    다음과 같이 클래스 내부에 static 멤버 변수를 선언하고 static 멤버 함수 내에서 사용하는데 계속 위와 같은 링크 에러가 발생하였다.// A.hclass A{public: static void Func(); ....private: static int num;};// A.cppvoid A::Func(){ num = 5;} 클래스 내에 static 변수를 선언하는 것만으로는 메모리가 할당되지 않는다고 한다. 클래스 내에 static 변수를 선언해주고 클래스 외부에서 아래와 같이 정의를 해주어야 사용할 수 있다고 한다. 헤더는 동일하다.// A.cppint A::num = 0; // 따로 정의를 해주어야 사용 가능.void A::Func(){ num = 5;} https://woo-dev...

    [C#] unsafe 키워드 소스코드

    포인터type* var-name;int *ip; double *dp; float *fp; char *ch; 예시)using System;namespace UnsafeCodeApplication { class Program { static unsafe void Main(string[] args) { int var = 20; int* p = &var; Console.WriteLine("Data is: {0} ", var); Console.WriteLine("Address is: {0}", (int)p); Console.ReadKey(); } }}// 결과Data is: ..

    [C#] 속성 (property) 정리

    속성 접근자get 접근자 (게터 : getter) : 특정 값 또는 특정 필드 값을 반환set 접근자 (세터 : setter) : value 키워드를 사용해 값을 읽어 관련 필드에 저장init 접근자 : set 접근자와 거의 같으나, 생성자나 개체 이니셜라이저에 의해서만 사용 가능using System;class PropertyPractice{ //private 필드 private string hello; //private 필드 값을 외부에 공개하는 속성 public string Hello { //get 접근자 get { return hello; } //set 접근자 : value 키워드 사용 set { hello..

    [C#] Enum에 Name List / Value List 가져오기

    Enum 정보 가져오기public enum Colors { red = 0, green = 1, blue = 2, yellow = 3 }public void Run(){ Console.WriteLine("Enum에 저장된 Name 가져오기"); //Enum에 저장된 Name List로 가져오기 var nameList = Enum.GetNames(typeof(Colors)); foreach (var name in nameList) Console.WriteLine($"{name}"); Console.WriteLine("Enum에 저장된 Value값 가져오기"); var valueList = Enum.GetValues(typeof(Colors))..

    [Java] String Empty와 Blank 체크하기

    Empty와 Blank의 차이String Empty : null 이거나 length(길이)가 없는 StringString Blank : 공백으로만 되어있는 StringEmpty StringJava6 이상부터는 String 클래스의 isEmpty 메소드로 체크하면 된다.String test = " ";if (test.isEmpty()) { log.info("isEmpty");} else { log.info("isNotEmpty"); }//결과는 isNotEmpty 가 출력된다 test라는 String이 null이 들어올 수 있기 때문에 조건을 추가해준다면 다음과 같이 Empty를 체크하면 된다String test = null;if (test == null || test.isEmpty()) { ..

    [C++] volatile 키워드

    개념const 키워드와 함께 변수의 성질을 바꾸는 역할을 하는 타입 한정자지만 그 사용 빈도가 낮아 책이나 자료들에서도 잘 다루어지지 않는 타입이다.volatile 키워드가 지정된 변수는 최적화를 수행하지 않는다.변수의 최적화최적화를 시켜주는 컴파일러의 기능인데 프로그래머는 사람이기 때문에 실수를 하기 마련이다. 물론 컴파일러가 모든걸 보완할 수는 없다. 예를 들면)int a;a = 0;a = 1;a = 3;a에는 최종적으로 3의 값이 들어가게 되며 이전의 작업인 0과 1은 의미가 없게 된다, 따라서 재정의를 하는 경우에는 컴파일러가 알아서 위의 두 작업을 삭제한다. 이를 통해 수행 시간의 이득을 가져올 수 있다. 하지만, 만약 메모리를 참조하여 하드웨어에 명령을 내리는 코드라고 가정하고 a를 메모리 쓰..

    [C++] false sharing이란? (거짓 공유)

    개념false sharing은 멀티 쓰레드 환경 + CPU의 멀티 코어에서 발생된다.cpu 내부의 코어와 코어간의 메모리 정보가 공유되어 하드웨어 적으로 병목 현상이 일어나는건다.#include #include #include long long num1 = 0;long long num2 = 0;long long num3 = 0;void fun1() { for (long long i = 0; i resultTime = endTime - beginTime; printf("%lld\n", num1 + num2); std::cout  비슷하거나 빨라야 하는데 1초 차이도 아니고 6초 차이가 나버린다.CPU의 캐시 구조L3 캐시는 메모리로부터 자료를 받아온다, 그럼 해당 데이터를 L2 > L1 ..

    [Java] Collection Framework (자료구조 종류)

    Java Collection Framework (JCF) 컬렉션은 기본 데이터형이 아닌 참조 데이터형만 저장이 가능하다 따라서 Collection에서의 데이터는 Object 타입의 객체로서 저장이 된다.기본 데이터 형은 Wrapper 클래스를 이용하여 Boxing 시켜주거나 Integer num = new Integer(5) 기본 데이터형인 5를 Wrapper 클래스의 Integer 타입 객체로 변환 autoboxing으로 저장할 수 있다 즉 오토박싱을 통해 기본 데이터형 컬렉션에 직접 대입하여 저장해도 컴파일러가 자동으로 Wrapper 클래스로 변환해준다 collection.add(11) 저장된 값을 얻어올 때에도 객체화된 데이터를 기본 데이터형으로 바로 얻어올 수 있는데 이 경우는 unboxing이다..

    [C#] 7.0 튜플 (Tuple)

    개념C# 7 이전 버전에서는 메서드에서 하나의 값만을 리턴할 수 있었지만, C# 7부터는 튜플(Tuple)을 사용하여 메서드로부터 복수 개의 값들을 리턴할 수 있게 되었다. 메서드 원형을 정의할 때 리턴타입이 복수 개이므로 튜플 리턴 타입(tuple return type) 표현식을 사용하게 되는데, 이는 괄호 ( ) 안에 여러 리턴타입을 순서대로 나열하면 된다. 예를 들어, int 2개와 double 하나를 리턴할 경우 (int, int, double)과 같이 표현할 수 있으며, 더 나아가 편의를 위해 각 리턴타입마다 이름을 지정할 수도 있다. 예를 들어 (int count, int sum, double average)와 같이 작성이 가능하다.(double, int) t1 = (4.5, 3);Consol..

    [C#] switch문에 추가된 기능 (버전 7~9)

    기본형)int flag = 3; switch (flag) {case 1: DoFunc1(); break;case 2: DoFunc2(); break;default: DoFunc3(); break; }C# 7.0, switch문의 패턴 매칭switch case 문이 패턴 매칭 식을 흡수한다, 원래 switch 문의 조건식에는 값 형식의 식들만 들어갈 수 있었지만 클래스 인스턴스도 들어갈 수 있고 case 문에는 패턴 매칭식을 넣을 수가 있다.using System; public class Program { public static void Main() { object data = 5; // object data = "STRING"; // object..