C#

카테고리 없음

[Unity] 새로운 유니티 Input System 활용

새로운 유니티 인풋시스템 활용하는방법 window -> Package Manager -> 위쪽 선택바에Unity Registry 선택 -> Input System 임포트 -> 경고창(재시작해야한다의 내용) 확인하고 유니티 재시작 -> 플레이어 오브젝트에 Player Input 컴포넌트 추가 -> 컴포넌트의 Create Actions 클릭 -> 대충 프로젝트 하위폴더에 이름붙이고 저장 (예시는 이름을 Player) -> Input Actions라는 새로운 창 확인 -> Actions창에서 Move선택 -> Action Type: Value : 직접 값을 받겠다 Control Type : 값의 형식을 결정 (Vector2 로 설정) Interactions : ex ) Press(찰나순간. OnButtonDo..

백준/C#

백준 - 1차원 배열 (+ System.Array, + System.Array.ConvertAll)

https://www.acmicpc.net/problem/10807 10807번: 개수 세기 첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거 www.acmicpc.net 1. 내가 푼 코드 문제점 : 굳이 int로 형변환해서 string[]배열을 int[] 로 만드는과정추가됨 System.Array라이브러리 함수몰라서 foreach문으로 타겟갚과 맞는지 판별 참고로 만약 배열을 형변환 할거면 여기서 for문으로 배열 형변환하면서 복사했는데 이렇게 말고 Array.ConvortAll( 변환할 배열, 변환할 형식 ) 사용! string[] stringNu..

C#/기본기

[C#] 일반화 프로그래밍 (=제네릭)

일반화 프로그래밍 - 특수한 개념으로부터 공통된 개념을 찾아 묶는 것을 "일반화"라고 한다 - 그 일반화하는 대상이 특이하게 데이터 형식이다 void CopyArray( int[] source, int[] target) { for(int i = 0; i< source.Length; i++) target[i] = source[i]; } CopyArray()메소드를 다음과 같이 오버로딩 void CopyArray( string[] source, string[] target) { for(int i = 0; i< source.Length; i++) target[i] = source[i]; } 만약 이러한 매개변수에 입력되는 배열의 형식만 다르고 내부논리는 똑같은 31가지 버전이 필요하다면? 31가지를 모두 오버..

C#/기본기

[C#] 배열

foreach - 배열과 함께 사용되는 반복문 - 한번 반복을 수행할 때 마다 배열/컬렉션 요소를( scores 의) 차례대로 순회하며 in앞의 변수 score에 담는다 foreach (int score int scores) { Console.WrieLine(score); } 마지막 요소에 접근하고 싶을 때 원래는 배열의 길이 =5, 마지막 요소 = 4이기 때문에 scores[scores.Length-1] (5-1 = 4) => scores[4] 를 해줬는데 C# 8.0부터는 이런 불편을 없앤 System.Index형식과 ^연산자가 생김 ^연산자 : 컬렉션의 마지막부터 역순으로 인덱스를 지정하는 기능 ^1 : 컬렉션의 마지막 요소 (score.Length - 1 이라고 생각) ^2 : 마지막에서 두번째 ..

C#/기본기

[C#] 레코드와 객체비교

레코드 형식으로 만드는 불변 객체 불변객체는 내부 상태(데이터)를 변경할 수 없는 객체 (앞에서도 많이 했던 readonly) 상태를 변경할 수 없다는 특성 때문에 불변 객체에서는 데이터 복사와 비교가 많이 이루어짐 새로운 상태를 복사한 뒤 이 중 일부를 수정해서 새로운 객체를 만들고 , 상태를 확인하기 위해 객체 내용을 자주 비교한다 레코드는 불변 객체에서 이뤄지는 이 두 가지 연산을 편리하게 수행할 수 있도록 C# 9.0에 도입된 형식 앞에서 불변 객체를 만드는 방법이 참조 형식 : 클래스의 모든 필드를 readonly로 선언 값 형식 : readonly struct로 구조체를 선언 값 형식 객체는 다른 객체에 할당할 때 깊은 복사를 수행 (모든 필드를 새 객체가 가진 필드에 1:1로 복사) 필드가 ..

C#/기본기

[C#] 자동구현 프로퍼티(get; set;)

자동구현 프로퍼티 프로퍼티는 데이터의 오염에 대해선 메소드처럼 안전하고, 데이터를 다룰 때는 필드처럼 간결하다 하지만 그것 또한 중복작업의 느낌이 든다 ★ 프로퍼티는 또한 Set이나 Get접근자에 논리를 추가해 접근단계에서 제어가 가능하다 하지만 아무논리도 섞여있지 않은 단순히 필드를 읽고 쓰기만 한다면? C#은 3.0부터 이런경우에 사용해서 코드를 더 단순하게 만드는 자동 구현 프로퍼티를 지원한다 방법은 그저 get; set;만 쓰면된다 필드를 선언할 필요도 없고 set의 value도 없는 등 많은 것을 생략하게 해줌 자동구현 프로퍼티 using System; using static System.Console; namespace Sample { class BirthdayInfo { public stri..

C#/기본기

[C#] 프로퍼티

public 필드의 유혹과 Get/Set메소드 필드는 public으로 선언하면 안된다 99프로의 필드는 private 필드의 값을 접근 및 변경할때 필드를 public으로 선언해놓고 Get/Set메소드 대신, 외부에서 cat.height = 100; 을 사용하는 것 처럼 " = " 연산자로 필드를 읽거나 할당하고 싶어진다 이렇게 되면 외부에서 클래스 내부의 필드에 쉽게 접근할 수 있기 때문에 객체 지향의 은닉성이 위반되고 자칫 데이터가 오염되기 쉽다 그렇기 때문에 통상적으로 은닉성을 지키고 접근 및 변경을 프로그래머가 원하는 대로 (조건문을 추가하거나 등) 할 수 있게 하기 위해 Get/Set메소드를 일일이 구현해주는 것이고, 한단계 발전하여 이를 간단하게 해주는게 프로퍼티다 Get/Set메소드? Get..

C#/기본기

[C#] 추상클래스 (abstact)

추상클래스 abstact class 클래스이름 { //클래스와 동일하게 구현 //추상메소드를 가질 수 있음 } - 인터페이스와 클래스 사이 - 추상 클래스는 "구현"을 가질 수 있다 - 하지만 클래스와 달리 "인스턴스"를 가질 수 없다 - 기본접근성(한정자를 명시하지 않을 때)을 private와 public 두가지를 가진다 (-> 추상메소드 설명에 같이 설명) - 추상메소드를 가질 수 있다 추상메소드 : 추상클래스가 한편으로 인터페이스의 역할도 할 수 있게 해주는 장치이다. 구현을 갖지는 못하지만 파생클래스에서 이 메소드를 반드시 구현하도록 강제한다. 이 때 파생클래스에선 override수식어를 사용하여 구현한다 (이것 또한 인터페이스-약속의 개념) 부가설명: 추상클래스에서 다른 일반 메소드 프로퍼티 등..

파워지훈
'C#' 태그의 글 목록