1번
[원문]
using System;
//아래와 같이 일련번호가 부여된 modelNo가 출력되도록 코드를 수정하세요.
//LG SuperCar S001
//LG SuperCar S002
//LG SuperCar S003
//LG SuperCar S004
namespace Ex1
{
class Program
{
static void Main(string[] args)
{
Car c1 = new Car();
Car c2 = new Car();
Car c3 = new Car();
Car c4 = new Car();
Console.WriteLine(c1.getModelNo());
Console.WriteLine(c2.getModelNo());
Console.WriteLine(c3.getModelNo());
Console.WriteLine(c4.getModelNo());
}
}
class Car
{
private int serialNo;
private String modelNo;
//생성자는 이미 완성된 코드이므로 수정하지 마세요.
public Car()
{
serialNo++;
modelNo = $"LG SuperCar S{serialNo:000}";
}
public String getModelNo()
{
return modelNo;
}
public void setModelNo(String modelNo)
{
this.modelNo = modelNo;
}
}
}
[문제풀이]
using System;
//아래와 같이 일련번호가 부여된 modelNo가 출력되도록 코드를 수정하세요.
//LG SuperCar S001
//LG SuperCar S002
//LG SuperCar S003
//LG SuperCar S004
namespace Ex1
{
class Program
{
static void Main(string[] args)
{
Car c1 = new Car();
Car c2 = new Car();
Car c3 = new Car();
Car c4 = new Car();
Console.WriteLine(c1.getModelNo());
Console.WriteLine(c2.getModelNo());
Console.WriteLine(c3.getModelNo());
Console.WriteLine(c4.getModelNo());
}
}
class Car
{
public static int serialNo;
public String modelNo;
//생성자는 이미 완성된 코드이므로 수정하지 마세요.
public Car()
{
serialNo++;
modelNo = $"LG SuperCar S{serialNo:000}";
}
public String getModelNo()
{
return modelNo;
}
public void setModelNo(String modelNo)
{
this.modelNo = modelNo;
}
}
}

public int serialNo에 static을 붙여준다. 정적으로 만들어줘서 클래스의 변수가 초기화 되지 않게 막아준다.
처음엔 setModelNo()메소드가 쓰이지 않아서 이걸 활용하란 건가..? 결국 serialNo는 생성자에서 변화가 되는데.. 하고 헷갈렸었다.
2번
[원문]
using System;
//아래 Main() 메서드 안에 method1()과 method2()를 호출하여 리턴값을 출력하는 코드를 작성하세요.
namespace EX2
{
class Program
{
static void Main(string[] args)
{
}
//아래의 두 메서드는 수정하지 마세요.
public string method1()
{
string str = "";
for (int inx = 'A'; inx <= 'Z'; inx++)
{
str = str + (char)inx;
}
return str;
}
public static string method2()
{
string str = "";
for (int inx = 'a'; inx <= 'z'; inx++)
{
str = str + (char)inx;
}
return str;
}
}
}
[문제풀이]
using System;
using System.Runtime.CompilerServices;
//아래 Main() 메서드 안에 method1()과 method2()를 호출하여 리턴값을 출력하는 코드를 작성하세요.
namespace EX2
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine(p.method1());
Console.WriteLine(method2());
}
//아래의 두 메서드는 수정하지 마세요.
public string method1()
{
string str = "";
for (int inx = 'A'; inx <= 'Z'; inx++)
{
str = str + (char)inx;
}
return str;
}
public static string method2()
{
string str = "";
for (int inx = 'a'; inx <= 'z'; inx++)
{
str = str + (char)inx;
}
return str;
}
}
}

method2()는 메인과 같이 static이 붙었으니까 바로 호출 가능하지만, method1()은 메모리를 먹여서 따로 호출해줘야 한다.
3번
[원문]
using System;
//아래 코드를 캡슐화 하세요.
namespace Ex3
{
class Program
{
static void Main(string[] args)
{
Vehicle v = new Vehicle();
v.modelName = "보잉747";
v.maxSpeed = 1400;
v.numOfLimit = 250;
v.displayInfo();
}
}
class Vehicle
{
public string modelName;
public int maxSpeed;
public int numOfLimit;
public void displayInfo()
{
Console.WriteLine($"모델명: {modelName}");
Console.WriteLine($"최고속력: {maxSpeed}km/h");
Console.WriteLine($"탑승정원: {numOfLimit}명");
}
}
}
[문제풀이]
using System;
//아래 코드를 캡슐화 하세요.
namespace Ex3
{
class Program
{
static void Main(string[] args)
{
Vehicle v = new Vehicle();
v.ModelName = "보잉747";
v.MaxSpeed = 1400;
v.NumOfLimit = 250;
v.displayInfo();
}
}
class Vehicle
{
private string modelName;
private int maxSpeed;
private int numOfLimit;
public void displayInfo()
{
Console.WriteLine($"모델명: {modelName}");
Console.WriteLine($"최고속력: {maxSpeed}km/h");
Console.WriteLine($"탑승정원: {numOfLimit}명");
}
public string ModelName
{
get { return modelName; }
set { modelName = value; }
}
public int MaxSpeed
{
get { return maxSpeed; }
set { maxSpeed = value; }
}
public int NumOfLimit
{
get { return numOfLimit; }
set { numOfLimit = value; }
}
}
}

캡슐화란, 프라이빗을 이용해 클래스의 은닉성을 사용하란 것이다.
변수를 프라이빗으로 지정해 밖에서 수정되지 않게 해주고, 프로퍼티를 사용해서 프라이빗 변수의 값을 바꿔주면 끝!
4번
[원문]
using System;
//아래 코드는 컴파일 오류가 발생합니다.
//오류가 발생하는 이유를 생각해 보고,
//컴파일과 프로그램의 실행이 정상적으로 되도록 코드를 수정하세요.
//단, Main() 메서드는 수정하지 마세요.
namespace Ex4
{
class Program
{
//Main() 메서드는 수정하지 마세요.
static void Main(string[] args)
{
BBB b = new BBB("BBB");
}
}
class AAA
{
public AAA(String str)
{
Console.WriteLine("{str} : 생성자 호출");
}
}
class BBB : AAA
{
public BBB(String str)
{
Console.WriteLine("{str} : 생성자 호출");
}
}
}
[문제풀이]
using System;
//아래 코드는 컴파일 오류가 발생합니다.
//오류가 발생하는 이유를 생각해 보고,
//컴파일과 프로그램의 실행이 정상적으로 되도록 코드를 수정하세요.
//단, Main() 메서드는 수정하지 마세요.
namespace Ex4
{
class Program
{
//Main() 메서드는 수정하지 마세요.
static void Main(string[] args)
{
BBB b = new BBB("BBB");
}
}
class AAA
{
public AAA(String str)
{
Console.WriteLine($"{str} : 생성자 호출");
}
}
class BBB : AAA
{
public BBB(String str) : base(str)
{
Console.WriteLine($"{str} : 생성자 호출");
}
}
}

우선 $을 추가해서 문자열 리터럴을 보간식으로 바꿔준다.
그러면 이제 AAA에서 str이 뭐냐고 하는데 base를 이용해 AAA에도 전달해준다.
base는 파생 클래스에서 기본 클래스 멤버에 접근할 때 사용되는 키워드이다.
AAA에도 접근했기 때문에 출력문이 2개가 나온다.
5번
[원문]
using System;
//아래 코드에는 오버로딩된 두 개의 ControlDeviceVolumn() 메서드가 있습니다.
//이 두 개의 메서드를 하나로 통합하기 위해서 아래의 코드를 수정하세요.
namespace Ex5
{
class Program
{
//아래의 Main() 메서드는 수정하지 마세요.
static void Main(string[] args)
{
SmartPhone phone = new SmartPhone();
Computer computer = new Computer();
ControlDeviceVolumn(phone, 10);
ControlDeviceVolumn(computer, -20);
}
//아래 두개의 메서드를 하나의 메서드로 통합하시오.
static void ControlDeviceVolumn(SmartPhone i, int d)
{
i.ControlVolumn(d);
i.DisplayCurrentVolumn();
}
static void ControlDeviceVolumn(Computer c, int d)
{
c.ControlVolumn(d);
c.DisplayCurrentVolumn();
}
}
//두 개의 클래스가 다형성을 갖도록 하세요.
class SmartPhone
{
private int volumn = 50;
public void ControlVolumn(int d)
{
volumn += d;
}
public void DisplayCurrentVolumn()
{
Console.WriteLine("스마트폰의 현재 음량: " + volumn);
}
}
class Computer
{
private int volumn = 50;
public void ControlVolumn(int d)
{
volumn += d;
}
public void DisplayCurrentVolumn()
{
Console.WriteLine("컴퓨터의 현재 음량: " + volumn);
}
}
}
[문제풀이]
using System;
//아래 코드에는 오버로딩된 두 개의 ControlDeviceVolumn() 메서드가 있습니다.
//이 두 개의 메서드를 하나로 통합하기 위해서 아래의 코드를 수정하세요.
namespace Ex5
{
class Program
{
//아래의 Main() 메서드는 수정하지 마세요.
static void Main(string[] args)
{
SmartPhone phone = new SmartPhone();
Computer computer = new Computer();
ControlDeviceVolumn(phone, 10);
ControlDeviceVolumn(computer, -20);
}
//아래 두개의 메서드를 하나의 메서드로 통합하시오.
static void ControlDeviceVolumn<T>(T device, int d) where T : SmartPhone
{
device.ControlVolumn(d);
device.DisplayCurrentVolumn();
}
}
//두 개의 클래스가 다형성을 갖도록 하세요.
class SmartPhone
{
private int volumn = 50;
public virtual void ControlVolumn(int d)
{
volumn += d;
}
public virtual void DisplayCurrentVolumn()
{
Console.WriteLine("스마트폰의 현재 음량: " + volumn);
}
}
class Computer : SmartPhone
{
private int volumn = 50;
public override void ControlVolumn(int d)
{
volumn += d;
}
public override void DisplayCurrentVolumn()
{
Console.WriteLine("컴퓨터의 현재 음량: " + volumn);
}
}
}

일반화 프로그래밍을 활용하는 문제이다.
어떤 자료형이 들어오건 유동적으로 값을 받아들이는 기능인데, <T>로 선언하고 T로 임시 자료형 이름 만들고 where T : OOO 로 이 T가 어디서 가져온 건지 지정해준다.
상속 클래스의 경우, 상속하는 부모 클래스의 이름을 적어주면 된다.
6번
[원문]
using System;
//실행결과 "자동차가 서울(으)로 이동합니다." 가 출력되도록 프로그램을 수정하세요.
namespace Ex6
{
class Program
{
//Main() 메서드는 수정하지 마시오.
static void Main(string[] args)
{
Vehicle v1 = new Car();
v1.move("서울");
}
}
//Vehicle 클래스는 수정하지 마시오.
class Vehicle
{
public virtual void move(String destination)
{
Console.WriteLine($"운송수단이 {destination}(으)로 이동합니다.");
}
}
class Car : Vehicle
{
}
}
[문제풀이]
using System;
//실행결과 "자동차가 서울(으)로 이동합니다." 가 출력되도록 프로그램을 수정하세요.
namespace Ex6
{
class Program
{
//Main() 메서드는 수정하지 마시오.
static void Main(string[] args)
{
Vehicle v1 = new Car();
v1.move("서울");
}
}
//Vehicle 클래스는 수정하지 마시오.
class Vehicle
{
public virtual void move(String destination)
{
Console.WriteLine($"운송수단이 {destination}(으)로 이동합니다.");
}
}
class Car : Vehicle
{
public override void move(String destination)
{
Console.WriteLine($"자동차가 {destination}(으)로 이동합니다.");
}
}
}

오버라이딩을 써주면 되는 간단한 문제이다.
7번
[원문]
using System;
//아래 코드는 실행 중에 예외사항(Exception)이 발생할 가능성이 있습니다.
//0으로 나누는 예외사항이 발생하면, "10을 0으로 나누는 중 문제가 발생하였습니다."라고 화면에 출력하고
//프로그램을 종료하도록 예외사항을 처리하세요.
namespace Ex7
{
class Program
{
static void Main(string[] args)
{
int num = new Random().Next(3);
int result = 10 / num;
//아래 코드를 변경하지 마시오.
Console.WriteLine($"10을 {num}으로 나눈 결과는 {result} 입니다.");
}
}
}
[문제풀이]
using System;
//아래 코드는 실행 중에 예외사항(Exception)이 발생할 가능성이 있습니다.
//0으로 나누는 예외사항이 발생하면, "10을 0으로 나누는 중 문제가 발생하였습니다."라고 화면에 출력하고
//프로그램을 종료하도록 예외사항을 처리하세요.
namespace Ex7
{
class Program
{
static void Main(string[] args)
{
int num = new Random().Next(3);
try
{
int result = 10 / num;
//아래 코드를 변경하지 마시오.
Console.WriteLine($"10을 {num}으로 나눈 결과는 {result} 입니다.");
}
catch (Exception)
{
Console.WriteLine($"10을 {num}으로 나누는 중 문제가 발생하였습니다.");
}
}
}
}


try-catch를 사용해주면 된다.
오류 메시지에 대한 변수는 사용하지 않을 것이니 Exception만 적어준다.
8번
[원문]
using System;
using System.Collections.Generic;
//아래 주석문(comment)에 있는 지시대로 코드를 완성하세요.
namespace Ex8
{
class Program
{
static void Main(string[] args)
{
Car c1 = new Car("현대", "흰색");
Car c2 = new Car("페라리", "빨강");
Car c3 = new Car("벤츠", "검정색");
Car c4 = new Car("도요타", "파랑색");
Car c5 = new Car("리싼", "회색");
//1. 아래에 하나의 List를 생성하고, c1 부터 c5까지의 객체를 List에 추가하세요.
//2. DisplayAllInfo() 메서드를 호출하시오.
}
private static void DisplayAllInfo(List<Car> list)
{
//3. List의 모든 객체에 대해서 순차적으로 displayInfo메서드를 호출하시오.
}
}
//아래 Car 클래스는 수정하지 마세요.
class Car
{
public Car(string modelName, string color)
{
ModelName = modelName;
Color = color;
}
private String ModelName { get; set; } //모델 이름
private String Color { get; set; } //색상
public void DisplayInfo()
{
Console.WriteLine($"모델명: {ModelName}");
Console.WriteLine($"색 상: {Color}");
Console.WriteLine("----------------------------");
}
}
}
[문제풀이]
using System;
using System.Collections.Generic;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
//아래 주석문(comment)에 있는 지시대로 코드를 완성하세요.
namespace Ex8
{
class Program
{
static void Main(string[] args)
{
Car c1 = new Car("현대", "흰색");
Car c2 = new Car("페라리", "빨강");
Car c3 = new Car("벤츠", "검정색");
Car c4 = new Car("도요타", "파랑색");
Car c5 = new Car("리싼", "회색");
//1. 아래에 하나의 List를 생성하고, c1 부터 c5까지의 객체를 List에 추가하세요.
List<Car> carList = new List<Car>();
carList.Add(c1);
carList.Add(c2);
carList.Add(c3);
carList.Add(c4);
carList.Add(c5);
//2. DisplayAllInfo() 메서드를 호출하시오.
DisplayAllInfo(carList);
}
private static void DisplayAllInfo(List<Car> list)
{
//3. List의 모든 객체에 대해서 순차적으로 displayInfo메서드를 호출하시오.
for (int i = 0; i < list.Count; i++)
{
list[i].DisplayInfo();
}
}
}
//아래 Car 클래스는 수정하지 마세요.
class Car
{
public Car(string modelName, string color)
{
ModelName = modelName;
Color = color;
}
private String ModelName { get; set; } //모델 이름
private String Color { get; set; } //색상
public void DisplayInfo()
{
Console.WriteLine($"모델명: {ModelName}");
Console.WriteLine($"색 상: {Color}");
Console.WriteLine("----------------------------");
}
}
}

클래스에 대한 리스트를 만든다.
리스트는 배열과 다른 게 자료형을 정하고 지정한 자료형에 해당하는 요소만 담을 수 있다.
담아주고, 함수를 호출한다.
호출한 함수에서 리스트에 담은 클래스의 함수를 호출해주면 끝
9번
[원문]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//아래 코드를 수행하면 화면에 "안녕하세요?" 라고 출력될 수 있도록 코드를 완성하시오.
namespace Ex9
{
class Program
{
//아래 Main() 메서드를 수정하지 마세요.
static void Main(string[] args)
{
MyInterface mi = new MyClass();
mi.SayHello();
}
}
//아래 인터페이스를 완성하고, 이어서 필요한 클래스를 작성하세요.
interface MyInterface
{
}
}
[문제풀이]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//아래 코드를 수행하면 화면에 "안녕하세요?" 라고 출력될 수 있도록 코드를 완성하시오.
namespace Ex9
{
class Program
{
//아래 Main() 메서드를 수정하지 마세요.
static void Main(string[] args)
{
MyInterface mi = new MyClass();
mi.SayHello();
}
}
//아래 인터페이스를 완성하고, 이어서 필요한 클래스를 작성하세요.
interface MyInterface
{
void SayHello();
}
class MyClass : MyInterface
{
public void SayHello()
{
Console.WriteLine("안녕하세요?");
}
}
}

인터페이스를 클래스에 상속시켜주면 되는 간단한 문제이다.
'C#' 카테고리의 다른 글
LMS5_Project08 C# WPF 프로젝트 - Resource Monitoring Tool (0) | 2025.02.22 |
---|---|
C# WPF 데이터베이스 연결 (0) | 2025.02.05 |
C# 문제풀이 1 (3) | 2025.01.24 |
C# 클래스 과제 마무리 (0) | 2025.01.24 |
01.21 학습일지 및 과제 현황 (0) | 2025.01.21 |