개발 TIL

7/19 부트캠프 개발 TIL (기술 모의 면접 2)

HJTL 2024. 8. 3. 20:06

5. SOLID의 원칙을 설명하세요

SOLID기법은 객체지향 프로그래밍에서 유지보수, 확장을 향상시키는 기법입니다. 이를 활용하면 메모리 최적화 가독성 용이, 개발자들간 이해 향상에 장점이 됩니다. SOLID기법의 종류는 5가지를 설명하자면

  • 단일책임원칙(SRP) : 각 클래스 하나의 역할에 대해서 책임을 져야하는 원칙. 예를 들어 공격 클래스와 스탯 클래스가 있을 때 공격 클래스는 공격에 대한 역할에 충실해야 하고 스탯 클래스는 플레이어의 정보를 담는 역할에 충실해야 한다. 스탯 클래스에 공격하는 메서드를 추가한다면 역할에 어긋나고 공격할때 스탯 클래스를 사용해야 하는 말도 안되는 의문이 일어날 것이기 때문에 단일책임 원칙이 있어야 한다. 만약에 클래스가 두개 이상의 역할이 있다면 두개 클래스로 나뉘는 것이 좋다. (공격 클래스 안에 일반공격과 스킬공격이 있을 경우 스킬 클래스를 따로 만들어 분리하는 예가 있다.)
  • 개방폐쇄원칙(OCP) : 수정할때 닫아야하고 확장할때 열려있어야 한다. 열려있는 상태에서 추가 구현할때 기존 작업 결과들을 수정하며 작업하는 상황은 여러 문제가 발생할 수 있기 때문에 수정해야 하는 상황에는 폐쇄하고 확장할 때는 열려 있어야 한다.
  • 리스코프치환원칙(LSP) : 상속을 관련해서 하위클래스의 타입이 변경되어도 상위 클래스 타입에서 사용할 수 있어야 하는 원칙이다. 예를 들어 어떤 메서드의 매개변수를 클래스 형태로 전달할때 자식클래스로 전달되어도 부모클래스처럼 사용할수 있게 하는 원칙이다.
  • 인터페이스분리원칙(ISP) : 한 클래스가 특정 기능을 사용하고자 할 때 사용하는 원칙이다. 예시를 보면 Device에 상속받은 Phone과 Monitor가 있다고 하면 Phone은 전화하는 기능이 있고 Monitor는 화면을 보여주는 기능이 있을 것이다. 따라서 Phone이라는 클래스는 Call이라는 interface를 만들어 거기에 상속을 받아 Call에 들어간 메서드들을 가져다가 사용을 하는 것이다. (같은 디바이스라고 해도 사용하는 성격은 다르기 때문에 인터페이스에는 특정기능이 필요할 때 제공하는 역할을 한다)
  • 의존성역선원칙(DIP) : 계층구조에서 부모클래스가 자식클래스를 물려주어 자식클래스가 부모클래스 또는 인터페이스를 호출하는것보다 높은 추상화를 사용하는 목적이다.

6. 객체지향 프로그래밍에서 속성중 하나인 다형성의 정의와 이를 활용한 장점을 설명하세요

다형성은 기존코드의 재사용성과 유연성을 활용하여 다른 객체들을 생성가능한 의미이며 장점은 기존코드의 수정과 반복을 최소화하며 새 클래스나 메서드를 추가할 수 있으며, 의존성을 줄이고 가독성을 높일 수 있습니다.

7. 오버로드와 오버라이딩이란 무엇인가요?

오버로드란 한 클래스 안에서 같은 이름의 매서드가 두개 이상이지만 각 받는 매개변수의 변수타입 또는 개수가 다른 형태를 의미합니다.

class A
{
	public Method(int x)
	{
		Console.WriteLine("정수 하나의 메서드");
	}
	public Method(float y)
	{
		Console.WriteLine("실수 하나의 메서드");
	}
	public Method(int x, int y)
	{
		Console.WriteLine("정수 두개의 매서드");
	}
}

//메인함수
A a = new A();
a.Method(1);	//정수 하나의 메서드
a.Method(2.0f);	//실수 하나의 메서드
a.Method(3,5);	//정수 두개의 메서드

 

오버라이딩은 부모클래스에서 abstract나 virtual로 정의한 매서드를 자식클래스가 받아서 override키워드를 이용해 재정의 하는 기법입니다. 다시말해 메서드를 덮어사용한다는 뜻입니다.

class Bird
{
	public virtual void Fly()
	{
	}
}

class Falcon : Bird
{
	public override void Fly()
	{
		Console.WriteLine("날다.");
	}
}

8. 확장 메서드의 정의 와 활용을 설명하세요

기존 클래스(A)에서 정의되어 있지는 않지만 외부 클래스(B)에서 정의하여 A클래스의 메서드처럼 사용할 수 있는 기법입니다. 특징은 static으로 클래스 접근이 다분하기에 자주 사용되지 않습니다.

 

여기서 잘못된 부분이 있는 경우에는 댓글로 알려주길 바랍니다.

 

by 스파르타 코딩클럽