글의 요약 설명 부분.
목 차
확인 문제
using System;
// 사각형 클래스
public class Rectangle
{
public double Width { get; set; }
public double Height { get; set; }
public double CalculateArea()
{
return Width * Height;
}
}
// 원 클래스
public class Circle
{
public double Radius { get; set; }
public double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
// 면적 계산기 클래스
public class AreaCalculator
{
public double CalculateRectangleArea(Rectangle rectangle)
{
return rectangle.CalculateArea();
}
public double CalculateCircleArea(Circle circle)
{
return circle.CalculateArea();
}
}
class Program
{
static void Main(string[] args)
{
Rectangle rectangle = new Rectangle { Width = 5, Height = 10 };
Circle circle = new Circle { Radius = 3 };
AreaCalculator calculator = new AreaCalculator();
double rectangleArea = calculator.CalculateRectangleArea(rectangle);
double circleArea = calculator.CalculateCircleArea(circle);
Console.WriteLine($"Rectangle Area: {rectangleArea}");
Console.WriteLine($"Circle Area: {circleArea}");
}
}
1. 위 코드에서 삼각형 Triangle 클래스를 새로 작성한다고 했을 때,
AreaCalculator의 코드를 수정하지 않고 AreaCalculator가 삼각형의 넓이를 계산하도록 만들 수 있을까요?
AreaCalculator에 Triangle 관련 코드를 추가하지 않는 이상 AreaCalculator를 이용해 삼각형의 넓이를 계산할 수는 없다.
2. 1번 질문 답변을 바탕으로 위 코드가 유지보수 측면이 어려운 부분을 설명해주세요.
새로운 도형이 생길 때마다 새로운 코드를 추가해주어야 하기 때문에 이 코드는 유지보수가 어렵다.
만약 여러 도형을 아우르는 Shape라는 이름의 추상클래스가 존재한다면 AreaCalculator에서 이 Shape 클래스를 인자로 받음으로써 추가적인 코드 없이도 면적을 계산해주는 구현을 해낼 수 있을 것이다.
설명 문제
1. SOLID 원칙에 대해 설명해주세요.
S: 단일 책임의 원칙, 각 클래스는 하나의 기능만을 가진다.
O: 개방폐쇄의 원칙, 소프트웨어의 각종 구성요소 - 클래스, 메서드, 모듈 등 -는 확장에는 열려있고, 변경에는 닫혀있어야 한다.
L: 리스코프 치환의 원칙, 서브 클래스는 언제나 베이스 클래스로 변환될 수 있어야 한다. 즉, 부모 클래스의 구현부를 자식클래스에서 무시해선 안된다.
I: 인터페이스 분리의 원칙, 클래스는 자신이 필요로 하는 인터페이스만을 구현해야 한다.
D: 의존성 역전의 법칙, 상세 구현은 언제나 추상적 표현에 의존해야 한다.
2. 객체지향 프로그래밍의 속성 중 하나인 다형성과 이를 활용한 설계의 장점에 대해 설명해주세요.
다형성이란 동일한 메서드에 대해 서로 다른 객체가 각각의 방법으로 응답할 수 있도록 하는 것이다.
다형성의 장점으로는 유연한 코드 작성, 재사용성의 향상, 가독성 증가가 있다.
3. override와 overload에 대해 설명해주세요.
override란 같은 이름, 같은 인자를 가진 함수를 부모-자식 클래스 관계에서 다시 사용할 때 사용되는 방식이다.
overload란 같은 이름, 다른 인자를 가진 함수를 하나의 클래스 내에서 정의하는 것이다. 비슷한 기능을 다른 인자와 자료형으로 구현하려 할 때 주로 사용된다.
4. 확장 메서드에 대해 설명하고 어떻게 활용했는지 알려주세요.
확장 메서드는 기존의 클래스를 수정하지 않고 새로운 메서드를 추가하는 기능이다.
별도의 정적 클래스에 확장 메서드를 static으로 선언함으로써 활용할 수 있다.
실습 문제
namespace _02.객체지향_프로그래밍_실습
{
public static class ArrayExtension
{
public static double CalculateAverage(this int[] array)
{
// TODO: 확장 메서드 CalculateAverage를 구현하세요
double result = array.Sum(x => x);
//설명: 람다를 통해 array의 모든 값들의 합을 구하고, 그 값을 sumResult에 저장.
return result / array.Length;
//설명: 구하는 것은 평균이므로 array의 원소의 개수만큼 sumResult를 나누어줌.
}
}
class Program
{
static void Main(string[] args)
{
int[] numbers = { 1, 2, 3, 4, 5 };
// 확장 메서드를 사용하여 배열의 평균값을 계산하고 출력
double average = numbers.CalculateAverage();
Console.WriteLine($"The average is: {average}");
}
}
}
.
'내일배움캠프 > 꾸준CS과제' 카테고리의 다른 글
[TIL 24.07.09] 07. C# 심화 문법 (0) | 2024.07.09 |
---|---|
[TIL 24.07.08] 06. Garbage Collector (0) | 2024.07.08 |
[TIL 24.07.05] 05. 상속과 인터페이스 (0) | 2024.07.05 |
[TIL 24.07.03] 03. 콜백, delegate, event (0) | 2024.07.03 |
[TIL 24.07.01] 01. 객체와 한정자 (0) | 2024.07.01 |