리스코프 교체 원칙(Liskov Substitution Principle)은 바버라 리스코프(Barbara Liskov)에 의해 제안된 원칙으로, 객체 지향 프로그래밍(OOP)의 설계 원칙 중에 하나이다. 리스코프 교체 원칙은 상속 관계에서의 서브타입(Subtype)의 관계를 정의하고 유지하는 원칙으로, S가 T의 하위타입이라면, T 타입의 객체를 S 타입으로 교체되어도 프로그램의 의미가 변경되지 않아야 한다. 이 원칙은 상속 관계에서 하위 클래스(Subclass)가 상위 클래스(Superclass)의 기능을 대체할 수 있어야 한다는 것을 강조한다. 즉, 부모 클래스로부터 파생된 자식 클래스는 부모 클래스의 행동을 유지하면서도 자신만의 특화된 동작을 추가할 수 있어야 한다. 이를 준수하면 클라이언트 코드..
코드를 실행하면 사용자로부터 두 개의 숫자와 연산자를 입력받아서 해당 연산을 수행하고 결과를 출력하며, 계산 결과가 출력될 때마다 useMemory 변수가 true로 설정되어 이전 결과를 메모리에 저장된다. 해당 소스코드에는 0으로 나누는 경우에 대한 예외 처리도 포함되어 있으며, 'M' 연산자를 사용하여 현재 결과 값을 메모리에 저장하고, 'R' 연산자를 사용하여 메모리에 저장된 값을 불러와서 계산에 활용할 수 있고, 'C' 연산자를 사용하면 메모리를 초기화 할 수 있다. 소스코드 package domain; import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner scanner ..
Java의 이해: 클래스와 객체 💡클래스 (Class) 클래스는 멤버 변수 및 메서드를 포함하는 객체를 만들기 위한 코드 양식으로서, 인스턴스(메모리에 할당된 객체)를 생성하는 설계도(틀)라고 할 수 있다. 속성을 표현하는 변수 isaac-christian.tistory.com Java의 이해: 추상화, 캡슐화, 상속, 다형성 💡추상화 (Abstraction) 추상화는 관련 없는 사항을 은닉 또는 삭제하여 핵심적인 개념 또는 기능만을 간추려 내는 작업으로, 나에게 필요한 특징만을 표현하여 본질적 문제에 집중할 수 있도록 한 isaac-christian.tistory.com 이 글은 Java의 이해: 클래스와 객체, Java의 이해: 추상화, 캡슐화, 상속, 다형성 글을 참고한다. Car 클래스 소스코드 ..
💡 테스트 소프트웨어 개발에서의 테스트는 소프트웨어의 품질을 평가하고 결함을 발견하여 실제 동작 사이의 차이를 수정하는 작업이다. 테스트는 소프트웨어의 오류를 최소화하고 사용자에게 안정적이고 신뢰할 수 있는 소프트웨어를 제공하기 위해 필수적이다. 그러나 테스트는 결함이 있음을 보여줄 뿐, 결함이 없음을 증명할 수는 없다. 소프트웨어는 복잡하고 다양한 입력 조건과 환경에서 실행되기 때문에 모든 가능성을 고려하여 완벽하게 테스트하는 것은 불가능하다. 따라서 테스트는 소프트웨어의 특정 부분을 검사하고 그 부분에 대한 오류를 찾아내고 수정함으로써 소프트웨어의 신뢰성과 안정성을 향상시키는 데에 주로 사용된다. ⚬ 파레토 법칙 파레토 법칙은 경영학자 빌포르도 파레토가 이탈리아에서 20%의 사람이 80% 부를 소유하..
💡 프로그래밍 언어 구현 단계에서는 단순히 프로그래밍 언어와 코딩 규칙에 대해 다룬다. 1. Fortran: 항공, 무기 분야 2. Cobol: 은행 시스템 3. C/C++/C#: 자율주행, 홈 오퍼레이션(Iot 사물인터넷), 임베디드 시스템(컴퓨터 시스템이 들어가 있지 않은 곳에 시스템을 넣는 것) ⚬ .NET Framework(닷넷 프레임워크) .NET은 모든 운영 체제에서 실행할 수 있는 데스크톱, 웹, 모바일 애플리케이션 빌드를 위한 오픈 소스 플랫폼이다. .NET은 CLS를 따르는 언어라면 모두 실행 및 빌드가 가능하다. 4. Java: 웹 개발, 모바일 애플리케이션, 데스크톱 애플리케이션, 게임 개발, 데이터베이스 ⚬ 자바 가상 머신(JVM: Java Virtual Machine) JVM은 J..
💡 디자인 패턴 Design pattern 디자인 패턴은 소프트웨어 설계 과정에서 자주 발생하는 문제를 패턴 형태로 일반화한 것으로, 이를 이용하면 코드 및 디자인을 재사용하여 모듈의 역할 또는 모듈 간의 인터페이스 구현 설계 등의 작업을 효율적이고 간편하게 할 수 있다. ⚬ GoF의 디자인 패턴 1995년 GoF(Gang of Four)가 처음으로 디자인 패턴을 구체화하였다. GoF의 디자인 패턴은 소프트웨어 공학에 가장 많이 사용되는 디자인 패턴이며, 목적에 따라 행위 패턴 11개, 구조 패턴 7개, 생성 패턴 5개 총 23개의 패턴으로 구성되어 있다. 💡 행위 패턴 Behavioral 행위 패턴은 클래스나 객체의 상호작용, 손실 결합을 패턴화한 것으로, 하나의 객체를 여러 객체로 분할하여 결합도를 ..
💡아키텍처 (Architecture) 아키텍처는 소프트웨어의 뼈대를 만드는 과정으로, 요구분석명세서의 기능을 제한조건에 따라 설계하는 것을 의미한다. ⚬ 컴포넌트 (Component) 컴포넌트는 역할을 가지고 있고 독립적으로 존재할 수 있는 시스템의 한 부분이다. ⚬ 아키텍처의 특징 소프트웨어의 추상화된 전체 구조를 제공하며, 소프트웨어의 구성요소(서브시스템, 컴포넌트) 등을 다룬다. 또한 세부 내용보다 중요 기능을 다루며, 비기능적 요구사항을 반영하고, 제한조건을 정의한다. 1. 시스템 아키텍처: 인프라의 물리적인 구조 2. 소프트웨어 아키텍처: 서버 중심으로 작동하는 소프트웨어의 논리 구조 ⚬ 소프트웨어 설계를 위한 작업 분류 1. 소프트웨어 아키텍처 설계 2. 인터페이스 설계 3. 자료저장소 설계 ..
💡인터페이스 (Interface) 인터페이스는 사용하는 플랫폼이 다르더라도 프로그램이 같은 목적에 따라 같은 기능을 수행하도록 하는 것이다. 객체를 생성할 수 없으므로 필드를 선언할 때 객체 생성과는 관계없이 사용할 수 있는 static으로 선언한다. 1. 상수 (Public Static Final): 인터페이스에서 정해주는 값을 바꾸지 말고 제공하는 값만 참조 2. 추상 메소드 (Public Abstract): 추상 메소드를 오버라이딩해서 재구현 3. 디폴트 메소드 (Public Default): 기본적으로 인터페이스를 제공하지만 각각 수정 가능 4. 정적 메소드 (Public Static): 제공하는 인터페이스만을 사용 ⚬ 사용자 인터페이스 사람과 사람, 사람과 사물, 사물과 사물 사이를 연결하는 매..