728x90
반응형
주어진 문자열에서 괄호가 올바르게 짝지어져 있는지 확인하는 문제입니다.
열린 괄호는 같은 종류의 닫힌 괄호로 닫혀야 합니다.
괄호는 올바른 순서로 닫혀야 합니다.
public class Solution {
public bool IsValid(string s) {
Stack<char> stack = new Stack<char>();
foreach(char c in s){
if(c =='(' || c == '{' || c == '['){
stack.Push(c);
}
else{
if(stack.Count() == 0) return false;
char top = stack.Pop();
if ((top == '(' && c != ')') ||
(top == '{' && c != '}') ||
(top == '[' && c != ']')) {
return false;
}
}
}
return stack.Count() == 0;
}
}
인터뷰에서 이 문제에 대해 물어봤고, OOP 관련 대답을 제대로 하지 못했습니다..
이 코드는 객체 지향 프로그래밍(OOP)의 기본 원칙을 만족합니다:
- 캡슐화 (Encapsulation):
- Solution 클래스 내부에는 멤버 변수와 메서드가 캡슐화되어 있습니다.
- IsValid 메서드는 클래스 내부에서만 접근 가능하며, 외부에서 직접 접근할 수 없습니다.
- 상속 (Inheritance):
- 현재 코드에서는 상속 관계가 없습니다. 하지만 이 코드가 다른 클래스를 상속받거나 다른 클래스에 의해 상속될 수 있습니다.
- 다형성 (Polymorphism):
- 다형성은 클래스 간의 관계에서 발생합니다. 현재 코드에서는 다형성이 명시적으로 사용되지 않았습니다. 하지만 이후에 다른 클래스와 상호 작용하면서 다형성을 활용할 수 있습니다.
- 추상화 (Abstraction):
- Stack과 List와 같은 데이터 구조를 사용하여 추상화를 달성했습니다.
- IsValid 메서드 내부에서 세부 구현을 숨기고, 균일한 인터페이스를 제공합니다.
이 코드는 SOLID 원칙 중 일부를 만족합니다.
SOLID 원칙은 객체 지향 프로그래밍에서 유지보수 가능하고 확장 가능한 소프트웨어를 작성하기 위한 지침입니다 :
- 단일 책임 원칙 (Single Responsibility Principle, SRP):
- 이 코드는 하나의 주요 책임을 가진 메서드인 IsValid를 가지고 있습니다. 이 메서드는 괄호가 균형을 이루는지 확인하는 역할을 수행합니다. 따라서 SRP를 만족합니다.
- 개방/폐쇄 원칙 (Open/Closed Principle, OCP):
- 현재 코드는 확장에는 열려 있지만 수정에는 닫혀 있습니다. 새로운 유효성 검사 규칙을 추가하려면 IsValid 메서드를 수정하지 않고도 새로운 클래스를 작성하여 확장할 수 있습니다.
- 리스코프 치환 원칙 (Liskov Substitution Principle, LSP):
- 이 코드는 상속 관계가 없으므로 LSP를 직접 적용할 필요는 없습니다.
- 인터페이스 분리 원칙 (Interface Segregation Principle, ISP):
- 현재 코드에서는 인터페이스가 사용되지 않으므로 ISP를 적용할 필요가 없습니다.
- 의존성 역전 원칙 (Dependency Inversion Principle, DIP):
- 현재 코드는 외부 의존성이 없으며 DIP를 적용할 필요가 없습니다.
728x90
반응형
'Leetcode' 카테고리의 다른 글
237. Delete Node in a Linked List (0) | 2024.05.01 |
---|---|
203. Remove Linked List Elements (0) | 2024.05.01 |
21. Merge Two Sorted Lists (0) | 2024.04.23 |
112. Path Sum (0) | 2024.04.23 |
222. Count Complete Tree Nodes (0) | 2024.04.22 |