프로그래밍 언어

    [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..

    [Java] switch문

    변경 전과 후 특징 비교변경 전)C, C++에서 사용하는 형태의 Switch 형식을 따른다.불필요한 반복코드 존재한다.다수의 case와 break가 존재한다.개발자의 실수로 break를 빼먹을 경우 다음 분기로 넘어가게 됨.변경 후)Switch 내에서 라벨이 일치하는 경우, case -> A와 같은 형식으로 표현이 가능하다.단일 수행 또는 블록 수행이 가능하다.Switch 블록 내에서 계산된 값을 반환하는 yeild라는 키워드가 생겼다.여러 조건을 쉼표로 구분하여 한 라인으로 처리할 수 있음.테스트 클래스 정의enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; }코드로 변경사항 살펴보기간단한 코드 비교를 통해 새로워진 Sw..

    [Python] None

    None값이 없음, 알 수 없음 정도의 의미를 가진다. 정수 0이나 빈 문자열 ""과는 다르다.score_100 = 100score_0 = 0score_none = Noneprint(score_none)// NoneNone과 NoneTypeNone은 NoneType 타입의 객체다print(type(None))//  int, str과 같은 일반적인 타입들과 다르게, NoneType은 빌트인에 존재하지 않는다.print(int)print(int)print(NoneType)// 결과Traceback (most recent call last): File "example.py", line 3, in print(NoneType)NameError: name 'NoneType' is not defined Py..

    [Python] 인덱싱과 슬라이싱 : 음수 인덱스

    문자열과 리스트는 Iterable (순회할 수 있는) 객체다. 문자열은 여러 개의 문자들을 모아 놓은 배열이고, 리스트는 다양한 값을 모아 놓은 배열이다. 이 두 자료형의 원소에는 위의 그림처럼 인덱스(순서)가 있다. 편의 상 왼쪽에서부터 오른쪽으로 향하는 방향을 정순(정방향), 오른쪽에서부터 왼쪽으로 향하는 방향을 역순(역방향)이라 하면 인덱스에는 대소 관계가 있는데 정순이라면 왼쪽의 인덱스일수록 작은 값입니다. 역순이라면 오른쪽의 인덱스일수록 작은 값이다. 파이썬에서 인덱싱과 슬라이싱을 잘 활용하시려면 인덱스의 대소 관계를 정확히 알아야 한다.인덱싱 (Indexing)과 슬라이싱(Slicing)인덱싱(Indexing)은 문자열이나 리스트와 같은 컬렉션 자료형에서 기준값으로 개별 원소에 접근하는 방법이..

    [C#] default와 new() 제약 조건 사용하기

    new와 defaultnew는 generic 함수의 제약 조건이다. 해당 제약 조건을 걸면 generic 함수 내에서 new T()와 같은 코드를 사용할 수 있다. 이 제약 조건을 걸었을 경우 struct와 enum은 항상 사용 가능하고, class는 구현에 따라 달라지게 된다.  default는 C#의 기본 키워드로 제약 조건이 필요하지 않고, 다른 많은 곳에서도 사용할 수 있는 기능이다. default를 각 타입에 사용할 경우 아래 표와 같은 값이 생성된다.classclass는 참조 타입(reference type)이기 때문에 null을 허용하기에 default를 사용했을 때 값은 항상 null이 된다.new의 경우 생성자를 하나도 만들지 않은 상태라면, 항상 사용이 가능하다(기본 생성자). 반대로 ..

    [C#] Attribute : Obsolete - 더 이상 사용하지 않거나 그럴 예정인 코드에 대해서

    class TestClass{    [Obsolete]    public void Function1()    {    }} 더 이상 사용하지 않거나 그럴 예정인 클래스나 함수, 변수의 앞에 [Obsolete] 어트리뷰트를 붙여주면 된다. 그렇게 하면 해당 함수를 호출할 때 초록색 밑줄과 함께 더 이상 사용하지 않는 함수라는 경고가 뜬다. 그리고 툴팁에서는 함수 앞에 [deprecated]가 붙게 된다.이 [Obsolete]는 세 가지 방식의 오버로딩을 지원한다.class TestClass{ [Obsolete] public void Function1() { } [Obsolete("Not use anymore.")] public void Function2() { }..