반응형
1. 오늘 학습 키워드
기초 문법 톺아보기
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//------------------------------------------------------------------------------------------------------------------------//
//입력과 출력
//출력
Console.WriteLine("Hello");
//숫자 입력
int number = int.Parse(Console.ReadLine());
Console.WriteLine($"You entered: {number}");
// Parse - string형만 받음 - null값이여도 안됨
// Convert.Toint32() - object등 여러 타입으로 사용 가능하다 null값이면 0으로 값을 받음
//------------------------------------------------------------------------------------------------------------------------//
//Loop 반복문
//for, while, do-while문이 있다.
//do-while 문
//조건을 나중에 평가하므로 코드 블록이 최소 한 번 실행됩니다.
//------------------------------------------------------------------------------------------------------------------------//
//조건문
//if, else if, else가 있다.
//------------------------------------------------------------------------------------------------------------------------//
//배열
//배열 선언과 초기화
int[] numbers = new int[5]; // 크기가 5인 정수 배열 선언
numbers[0] = 10; // 첫 번째 요소에 값 10 저장
numbers[1] = 20; // 두 번째 요소에 값 20 저장
// 배열 선언과 동시에 초기화
int[] numbers2 = { 10, 20, 30, 40, 50 };
//배열 접근과 순회
int[] numbers3 = { 10, 20, 30, 40, 50 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
//------------------------------------------------------------------------------------------------------------------------//
//클래스
//클래스 정의와 객체 생성 방법
class Person
{
public string Name;
public int Age;
public void Introduce()
{
Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
}
static void Main(string[] args)
{
// 클래스 사용 예제
Person person = new Person();
person.Name = "John";
person.Age = 30;
person.Introduce();
}
}
//여태 유니티로 클래스를 사용했었지만 static void Main(string[] args)를 C#에서 직접 코드를 작성할때 써야할줄은 몰랐다.
//------------------------------------------------------------------------------------------------------------------------//
//상속
//상속 예제
class Animal
{
public void Eat()
{
Console.WriteLine("Eating...");
}
}
class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Barking...");
}
static void Main(string[] args)
{
// 상속 사용 예제
Dog dog = new Dog();
dog.Eat();
dog.Bark();
}
}
//------------------------------------------------------------------------------------------------------------------------//
//인터페이스
//인터페이스는 클래스나 구조체가 구현해야 하는 메서드와 속성의 정의를 포함합니다. C#에서는 인터페이스를 다중 상속할 수 있습니다.
//인터페이스 정의와 구현
interface IAnimal
{
void MakeSound();
}
class Dog2 : IAnimal
{
public void MakeSound()
{
Console.WriteLine("Bark");
}
static void main(string[] args)
{
// 인터페이스 사용 예제
IAnimal animal = new Dog2();
animal.MakeSound();
}
}
//클래스 상속은 구현 상속, 인터페이스는 기능 약속이다.
//------------------------------------------------------------------------------------------------------------------------//
//추상 클래스
//추상 클래스는 인스턴스화될 수 없으며, 상속을 통해서만 사용될 수 있습니다. 추상 메서드를 포함할 수 있습니다.
abstract class Animal3
{
public abstract void MakeSound();
}
class Dog3 : Animal3
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
static void main(string[] args)
{
// 추상 클래스 사용 예제
Animal3 animal = new Dog3();
animal.MakeSound();
}
}
//추상 클래스의 주요 이점
//1. 공통 로직을 재사용할 수 있다 (일반 메서드 포함 가능)
abstract class Animal
{
public void Breathe()
{
Console.WriteLine("숨 쉰다"); // 모든 동물이 숨 쉬니까!
}
public abstract void MakeSound(); // 동물마다 울음소리는 다르니까 직접 구현하도록 강제
}
//2. 상속받는 클래스에 "반드시 구현해야 하는 메서드"를 강제할 수 있다
abstract class Animal
{
public abstract void MakeSound(); // 반드시 구현
}
class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Meow");
}
}
//3. 기초 구조는 정하고, 세부는 유연하게
abstract class Character
{
public void TakeTurn()
{
Console.WriteLine("턴 시작");
Attack();
Console.WriteLine("턴 종료");
}
public abstract void Attack();
}
//4. 인터페이스와 달리 상태(필드)와 구현을 가질 수 있다
interface IThing
{
int count = 0; // ❌ 컴파일 에러!
void Do(); // ✔ 메서드 정의만 가능
}
//추상 클래스는 필드, 생성자, 메서드 모두 가질 수 있다.
abstract class Thing
{
protected int count = 0;
public void Increase() => count++;
public abstract void Do(); // 자식 클래스에서 반드시 구현
}
//------------------------------------------------------------------------------------------------------------------------//
//가상 메서드 (Virtual Methods)
//가상 메서드는 자식 클래스에서 재정의할 수 있는 부모 클래스의 메서드이다.
class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Animal sound");
}
}
class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
static void main(string[] args)
{
// 가상 메서드 사용 예제
Animal animal = new Dog();
animal.MakeSound();
}
}
//------------------------------------------------------------------------------------------------------------------------//
//랜덤 숫자 생성 (Random Number Generation)
//Random 클래스 사용
Random random = new Random();
int randomNumber = random.Next(); // 0과 int.MaxValue 사이의 난수 생성
int randomNumberInRange = random.Next(1, 101); // 1과 100 사이의 난수 생성
//랜덤 숫자 생성 예제
Random random = new Random();
int randomNumber = random.Next(1, 101);
Console.WriteLine($"Random number between 1 and 100: {randomNumber}");
//------------------------------------------------------------------------------------------------------------------------//
//문자열 처리
//문자열 생성 및 초기화
string message = "Hello, World!";
//문자열 길이 확인 - 문자열의 길이는 Length 속성을 사용하여 확인할 수 있습니다.
string message = "Hello, World!";
int length = message.Length; // 13
//문자열 비교 - == 연산자나 Equals 메서드를 사용하여 문자열을 비교할 수 있습니다.
string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2; // false
bool isEqualMethod = str1.Equals(str2); // false
//부분 문자열 추출 - Substring 메서드를 사용하여 문자열의 일부를 추출할 수 있습니다.
string message = "Hello, World!";
string hello = message.Substring(0, 5); // "Hello"
//문자열 분할 - Split 메서드를 사용하여 문자열을 특정 구분자로 나눌 수 있습니다.
string message = "Hello, World!";
string[] words = message.Split(','); // { "Hello", " World!" }
//문자열 합치기 - + 연산자나 String.Concat 메서드를 사용하여 문자열을 합칠 수 있습니다.
string str1 = "Hello";
string str2 = "World";
string message = str1 + ", " + str2 + "!"; // "Hello, World!"
//문자열 포맷팅 - String.Format 메서드를 사용하여 문자열을 포맷팅할 수 있습니다.
string name = "John";
int age = 30;
string message = String.Format("Name: {0}, Age: {1}", name, age); // "Name: John, Age: 30"
//문자 배열 변환 - 문자열을 문자 배열로 변환하거나, 그 반대 작업을 할 수 있습니다.
string message = "Hello";
char[] chars = message.ToCharArray(); // { 'H', 'e', 'l', 'l', 'o' }
string newMessage = new string(chars); // "Hello"
//------------------------------------------------------------------------------------------------------------------------//
//out과 ref
//C#에서 out과 ref 키워드는 메서드에 인수로 전달된 변수를 참조로 전달하는 데 사용됩니다. 둘 다 메서드 내부에서 값을 변경할 수 있으며,
//메서드 호출 후에도 변경된 값이 반영됩니다.
//out
//사용 예: 메서드가 여러 값을 반환해야 할 때 유용합니다.
//특징:
//메서드가 반환하기 전에 반드시 값을 할당해야 합니다.
//호출할 때 초기화되지 않아도 됩니다.
//예제
void GetValues(out int x, out int y)
{
x = 10;
y = 20;
}
int a, b;
GetValues(out a, out b);
Console.WriteLine($"a: {a}, b: {b}"); // a: 10, b: 20
//ref
//사용 예: 변수의 현재 값을 메서드 내부에서 수정해야 할 때 유용합니다.
//특징:
//메서드가 호출될 때 변수는 초기화되어 있어야 합니다.
//메서드 내부에서 값을 수정할 수 있습니다.
//예제
void Increment(ref int number)
{
number++;
}
int value = 5;
Increment(ref value);
Console.WriteLine(value); // 6
//차이점:
//out은 메서드 내부에서 값을 할당해야 하며, 초기화되지 않은 변수를 받을 수 있습니다.
//ref는 변수의 초기화가 필요하며, 메서드 호출 전에 이미 할당된 값을 전달받습니다.
//------------------------------------------------------------------------------------------------------------------------//
//is와 as
//C#에서 is와 as 키워드는 객체의 타입을 확인하고 변환하는 데 사용됩니다.
//두 키워드는 타입 검사 및 변환을 더 간단하고 안전하게 수행할 수 있도록 도와줍니다.
//is (타입 확인)
//사용 예: 객체가 특정 타입인지 확인할 때 사용합니다.
//특징:
//결과는 true 또는 false로 반환됩니다.
//타입이 일치하면 true, 그렇지 않으면 false를 반환합니다.
//예제
object obj = "Hello, World!";
if (obj is string)
{
Console.WriteLine("obj is a string");
}
else
{
Console.WriteLine("obj is not a string");
}
//as (타입 변환)
//사용 예: 객체를 특정 타입으로 안전하게 변환할 때 사용합니다.
//특징:
//타입 변환이 성공하면 변환된 객체를 반환합니다.
//실패하면 null을 반환합니다.
//예제
object obj = "Hello, World!";
string str = obj as string;
if (str != null)
{
Console.WriteLine("Conversion successful: " + str);
}
else
{
Console.WriteLine("Conversion failed");
}
//차이점:
//is는 객체가 특정 타입인지 확인하는 데 사용됩니다.
//as는 객체를 특정 타입으로 변환하는 데 사용되며, 변환에 실패하면 null을 반환합니다.
//------------------------------------------------------------------------------------------------------------------------//
3. 학습하며 겪었던 문제점 & 에러
- 새롭게 알게 된 점
- 원래는 유니티로만 C#을 사용하다보니 기본 C#의 문법에 대해서는 잘 몰랐었다 기본적으로 유니티는 Start함수나 Update등 바로 코드를 실행하는 코드가 있다보니 원래 C#에서 사용하는 static void main(string[] args)를 사용하는줄 몰랐다 JAVA 공부 경험이 있어서 어렵진 않았다.
- 상속이나 인터페이스, 추상 클래스, 가상메서드등을 잘 유니티에서는 사용하지 않았었다 그나마 상속을 사용했었는데 기본 문제들을 풀어보면서 조금더 적응해봐야겠다.
- 기초 문법을 보니 is는 잘 사용했었지만 as는 잘 몰랐었다 as에 대해서도 더 알아봐야겠다.
- out, ref도 사용할 일이 잘 없었다보니 조금 어색했다 더 알아보자.
- 나머지것들에 대한건 잘 알고있어서 부족한 부분을 다시 공부해봐야겠다.
4. 내일 학습 할 것
기초 문법 톺아보기 복습, 달리기반 Lv1, Lv2
5. 메모
https://nbcamp-unity-precamp.oopy.io/
사전캠프
- 진행 방식 :
- 강의 수강
- 퀘스트 모음집 진행
- 데일리 루틴 (TIL 제출)
- 팀스터디
- 담임 매니저와의 1:1 면담
제목 : [내일배움캠프 사전캠프] + 오늘의 학습 키워드
1. 오늘 학습 키워드
2. 오늘 학습 한 내용을 나만의 언어로 정리하기
3. 학습하며 겪었던 문제점 & 에러
- 문제&에러에 대한 정의
- 내가 한 시도
- 해결 방법
- 새롭게 알게 된 점
- 이 문제&에러를 다시 만나게 되었다면?
4. 내일 학습 할 것은 무엇인지
팀원
팀장 - 26세 이재은
오승엽 - 29세 사회복지학과 졸업, 블루아카이브 게임을 좋아함
유형준 - 24세 게임 모델링쪽 학과 졸업
이원혁 - 27세 정보통신학과 재학중, 게임의 스토리를 좋아함
조민석 - 26세 역사학과
반응형