[c#] 클래스 상속 | 오버라이딩 3가지 방법 | sealed 이번 포스팅에서는 오버라이딩(overriding)에 대한 개념과 오버라이딩을 하는 3가지 방법에 대해서 알아보겠습니다. 1. 오버라딩 기법 3가지 (1) 오버라이딩 기본 형태 Animal이라는 클래스와 Animal을 상속받은 Monkey라는 클래스가 있습니다. 그런데 이 두 클래스의 메소드가 완전히 같은 형태이네요. 결과를 실행하면 어떤 출력이 나올까요? 정답은 아래와 같습니다. Output: 즉 부모 클래스의 메소드를 자식(파생) 클래스의 메소드가 덮어 쓴 상황이 일어났습니다. 이러한 현상을 우리는 오버라이딩이라고 합니다. (오버로딩과 이름이 비슷하여 헷갈리시는 분들이 있을텐데요, 오버로딩은 해당 포스팅 내용을 참고바랍니다.) (2) new 키워드 사용 그런데 아래 잘 보시면 정상적으로 실행되었음에도 .. c# 2022. 5. 20. [c#] null값 다루기(nullable type, ?, ??) c#에서 값형식(value types) 타입은 null값을 넣을 수 없고, 참조형식(reference types)타입은 null 값을 넣을 수 있다는것을 아시나요? (값형식, 참조형식을 모르시는 분은 해당 포스팅 참조) 1. 값형식과 참조형식에 null값 할당 정말 그런지 한번 확인해보겠습니다. 아래 예시는 참조형식 타입중 하나인 string입니다. 참조 형식이기 때문에 이상없이 null값이 할당이 됩니다. 반면 값형식 타입중 하나인 int의 경우 null 값을 할당하면 아래와 같은 에러가 발생합니다. 2. 값형식에 null값 가능하게 하기 그렇다면 값형식인 데이터타입에게 null을 넣을 수 있도록 하는 방법은 없을까요? nullable 타입으로 변경해주면 됩니다. nullable이란 한국어로 번역하자면.. c# 2022. 5. 19. [c#] 생성자 오버로딩 개념 정리( + 다른 생성자 호출) 오버로딩이란 함수명은 같지만 시그니쳐(매개변수 구성)를 달리해서 여러개의 함수를 사용할 수 있는 기법을 말합니다. 만약 이런 기능이 없다면, 매번 다른 명의 함수명을 생각해내야 하는 귀찮음이 발생하겠죠? 이 오버로딩은 생성자에서 자주 사용되는데요. 예시를 통해 한번 확인해보겠습니다. 1. 기본 생성자 오버로딩 위 예시를 보면 앞선 정의에서 말씀 드린것처럼 같은명의 함수(여기선 생성자)이지만, 하나는 인자를 받고 다른 하나는 인자를 받지 않는 형태로 시그니쳐를 달리했습니다. 그리고 객체 생성 후 필드에 접근해보겠습니다. 이번 예시는 인자로 아무것도 넣지 않은 형태입니다. output: 결과를 보시면 첫번째 생성자가 실행된걸 알 수있습니다. 이번에는 string 인자값을 한번 넣어 실행해보겠습니다. 결과를 .. c# 2022. 5. 19. [c#] visual studio 괄호 색깔이 검정으로 바뀌는 에러? 혹시 비쥬얼 스튜디오에서 다크 테마를 이용하는데 갑자기 아래와 같이 괄호등의 특수문자들이 검정색으로 바뀌어 안보이는 문제를 겪고 계신가요? 해결방법 1) 도구 -> 옵션 에 들어갑니다. 2) 환경 -> 일반 -> 색테마 아마 기본 세팅이 어둡게 되어있을텐데, 다른 색테마를 선택 후 , 다시 어둡게 테마를 클릭해주시면 정상적으로 돌아올것입니다. c# 2022. 5. 19. [c#] 박싱(boxing), 언박싱(unboxing) 개념과 사용 이유 기존에 타입을 변환하는것을 형변환(type casting)이라고 했었습니다. (형변환은 관련 포스팅 참조 바랍니다.) 박싱과, 언박싱도 형변환을 하는것이지만 조금 결이 다른데요. 1. 박싱과 언박싱이란? 박싱(boxing)은 값 형식(value types)을 참조 형식(reference types)으로 변환 해주는것을 의미하고, 언박싱(unboxing)은 박싱했던 값을 다시 원상태로 복귀 시키는 것을 의미합니다. (값형식, 참조형식에 대해 모르시는 분은 해당 포스팅을 읽고 오시길 추천드립니다.) 어떻게 이게 가능한것일까요? 바로 모두의 부모 객체인 object타입 덕분입니다. 그렇기 때문에 모든 타입이 object로 변환이 가능한것이죠. 정리하자면 object타입이 참조 형식(reference types.. c# 2022. 5. 18. [c#] 형변환(type casting) | 명시적 변환 vs 암시적 변환 이번 포스팅에서는 명시적 변환과 암시적 변환이 무엇인지, 그리고 형변환시 주의할점에 대해 알아보도록 하겠습니다. 1. 명시적 변환과 암시적 변환이란? (1) 명시적 변환 명시적 변환은 이름에서도 느낄 수 있듯이 형변환을 하는걸 "명확"하게 표현 해주는 것을 의미합니다. 위와 같이 int 타입을 long타입으로 변경하고 싶다면 (long)을 앞에 써줌으로써 "나 지금 타입 변환한다"라는걸 적어주는 것입니다. (2) 암시적 변환 암시적 변환이란 명시적 변환과는 반대로 "티나지 않게" 형 변환을 해주는 것을 의미합니다. 마찬가지로 int 타입을 long 타입으로 예시 들어보겠습니다. 앞서 명시적 변환과는 다르게 (long)이라고 명확하게 명시 하지 않았음에도 불구하고 타입이 변경 됩니다. 더 짧은 코드로 깔끔.. c# 2022. 5. 18. [c#] 값 형식 처럼 작동하는 string(참조 형식) string 타입은 참조형식(reference types)의 데이터 타입입니다. 즉 해당 포스팅에서 설명 드렸듯이 실제 데이터 값은 힙(heap)메모리에 저장이 되고, 스택(stack)메모리에는 힙 메모리의 주소가 저장이 되는 형태 입니다. 그런데 특이하게도 이 string 타입은 다른 참조형식과는 조금 다른 방식으로 활동을 하는 것처럼 보입니다. string 코드 예제 "안녕"이라는 데이터값을 Text라는 변수에 넣고, Text를 다시 Text2에 할당을 한 뒤, 최종적으로 Text2의 값을 변경한 코드입니다. (이전 포스팅에서 지겹게 다룬 내용이기 때문에 자세한 설명은 생략합니다.) output: 결과를 보시면 뭔가 이상한걸 느끼셨을겁니다. 분명 이전에 참조 형식(reference types)의 경우.. c# 2022. 5. 17. [c#] 값 형식(value types) VS 참조 형식(reference types) c# 에서는 데이터를 메모리에 어떤 방식으로 저장하느냐에 따라 크게 두개의 타입으로 나뉘게 됩니다. 바로 오늘의 주제인 값형식(value types)과 참조형식(reference types)입니다. c#의 많은 문법들이 사실 이 두 녀석의 특징과 차이로 인해 설명이 되기 때문에 이번 포스팅은 특히 잘 이해 하실 필요가 있습니다. 결론부터 간단히 설명드리자면, 값 형식(value types)은 해당 데이터를 직접적으로 스택(stack) 메모리에 저장하는 반면, 참조 형식(reference types)의 경우 힙(heap) 메모리에 데이터를 저장합니다. 스택(stack) 메모리에는 힙 메모리의 주소를 저장합니다. 무슨 말인지 조금 애매하시죠? 사실 이런 추상적인 설명보단 직접적으로 어떻게 다른지는 코드를 통.. c# 2022. 5. 17. [c#] Attribute(어트리뷰트) 란? c#에서 Attribute란 코드에 대한 부가정보를 기록하는것입니다. 부가정보? 그냥 주석으로 적으면 되지 않나? 라는 의문이 드시는 분도 있을건데요. 주석은 인간만 읽을 수 있지만, 이 Attribute는 컴퓨터도 읽을 수 있습니다. 이게 무슨말인지는 차차 설명드리겠습니다. Obsolete 어트리뷰트 사용 예시 우선 어트리뷰트의 예시로 c#의 빌트인(내장) 어트리뷰트 중 하나인 Obsolete를 소개하겠습니다. 함수 위 대괄호 내부에 Obsolete라는 것이 보이실텐데요. 생긴게 조금 낯설어 보이지만, 이것도 사실 함수입니다. 즉 "NewMethod()를 사용해주세요"가 첫번째 인자로 들어 간것입니다. Obsolete 어트리뷰트는 더이상 사용하지 않는 클래스나 함수, 필드앞에 붙히는데요, 일반적으로 사.. c# 2022. 5. 16. [c#] enum(열거형) 사용 이유/사용법 enum이란 여러개의 상수를 하나의 컨테이너에서 관리하기 위해 사용하는 자료형입니다. 그런데 왜 굳이 하나로 관리할까요? 우리가 관리해야할, 또는 기억해야 할것들이 많다면 우리 머리로 일일이 기억하기 어렵기 때문입니다. enum을 쓰면 왜 기억하기 쉬울까요? enum의 자동완성 기능 바로 자동 완성 기능 때문인데요. c#의 빌트인 enum중 하나인 ConsoleColor를 예로 들어 설명해보겠습니다. (ConsoleColor은 콘솔창에 컬러를 바꾸는 역할을 함) 보시는 것처럼 .(점)을 하나찍으면 해당 enum에 포함된 모든 컬러가 노출이 됩니다. 우리는 마치 주관식이 아닌 객관식 문제풀듯 내용물에 접근할 수 있게 되는거죠. switch 구문과 사용 이외에도 스위치 구문 인자로 enum을 넣으면 해당 모.. c# 2022. 5. 16. [c#] 델리게이트(대리자) 익명 함수로 선언 이전 포스팅에서 기본 델리게이트(대리자)사용법에 알아 보았다면, 이번 포스팅에서는 관련 추가 사항 중 하나인 익명함수로 선언 하는 방법에 대해 알아보겠습니다. delegate() 이용 class Program { public delegate void TestDelegate(); public static void Main(string[] args) { Testing Test = new Testing(); TestDelegate testDelegateFunction = delegate () { Console.WriteLine("테스트"); }; testDelegateFunction(); } } 위와 같이 delegate ()를 이용해 함수명 없이 익명함수를 델리게이트에 할당할 수 있습니다. lambda 함수.. c# 2022. 5. 13. [c#] var 키워드란? 값을 변수에 할당하기 위해서는 변수에 할당할 값에 맞는 타입을 자료형으로 미리 기입해야 합니다. 예를 들어 숫자 1을 변수에 넣고 싶다면 아래와 같이 int자료형을 미리 세팅을 해줘야 하죠. var키워드란? 하지만 var 키워드를 쓰면 값만 넣어주면 알아서 자료형 선택해줍니다. output : 실제로 타입을 확인해보면, 타입이 int32로 할당 된것을 알 수 있죠. var키워드 제약사항 하지만 너무나도 편리한 var키워드에는 몇가지 제약 사항이 있습니다. 1) 지역변수(local)는 사용가능 하나 전역변수(global)로는 사용이 불가 즉 함수안이나, for loop 내부 스코프안에서만 사용이 가능하다는 단점이 있습니다. 아래 코드를 보시면 함수 바깥에서 var키워드로 정의한 부분이 오류가 나죠. 2) .. c# 2022. 5. 13. 이전 1 ··· 3 4 5 6 7 8 다음