본문 바로가기

소프트웨어공학/OOP9

[OOP] 제네릭 명명 관례 일반적으로 대문자를 사용하고 용도에 맞는 단어의 첫 글자를 사용하는 관례를 따른다  E - Element K - KeyN - NumberT - TypeV - ValueS, U, V etc. - 2nd, 3rd, 4th types      참고 및 출처: 김영한의 실전 자바 - 중급 2편https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2 2024. 9. 16.
[OOP] 실무 예외처리 수칙 트렌드 2가지 1. 처리할 수 없는 예외(시스템 오류)는 오류 메시지를 보여준다DB 접속 실패, 애플리케이션 연결 오류 같은 경우는, 고객에게 "현재 시스템에 문제가 있습니다." 라는 오류 메시지를 보여주고, 만약 웹이라면 오류 페이지를 보여주면 된다. 그리고 내부 개발자가 문제 상황을 빠르게 인지할 수 있도록, 오류에 대한 로그를 남겨둔다.    2. 현대의 애플리케이션 개발에서는 체크 예외를 거의 사용하지 않는다(= 언체크 예외만을 사용한다)현대에서는 점점 처리할 수 없는 예외가 많아지고, 또 프로그램이 복잡해지면서 체크 예외를 사용하는 것이 많이 부담스러워졌다. 따라서 언체크 예외만을 사용하며 한꺼번에 "공통 예외처리"를 한다. 해결할 수 있는 것들은 해결하고, 해결할 수 없는 것들은 공통으로 일관성있게 처리한다.. 2024. 9. 11.
[OOP] 리플렉션(reflection) ㅇ리플렉션(reflection): OOP에서 런타임에 프로그램의 구조를 검사하고 조작할 수 있는 메커니즘프로그램이 실행 중에 자신에 대한 정보를 탐색하거나, 구조를 동적으로 변경할 수 있다. 예를 들어, 클래스의 메타 정보를 기반으로 클래스에 정의된 메서드, 필드, 생성자 등을 조회하고, 이들을 통해 객체 인스턴스를 생성하거나 메서드를 호출하는 작업을 할 수 있다. 이런 작업을 리플렉션이라 한다. 또 추가로 애노테이션 정보를 읽어서 특별한 기능을 수행할 수도 있다. 최신 프레임워크들은 이런 기능을 적극 활용한다. ※ reflection은 자아성찰이라는 뜻을 갖고 있다 리플렉션의 기본 개념메타데이터 접근: 리플렉션을 사용하면 클래스, 인터페이스, 메서드, 필드 등의 메타데이터(데이터에 대한 데이터)에 접근.. 2024. 8. 23.
[OOP] 메서드 체이닝(Method Chaining) ㅇ메서드 체이닝(Method Chaining): 각 메서드가 객체 자신(또는 다른 객체)의 참조값을 반환함으로써 다음 메서드를 이어서 계속 호출하는 패턴 한 객체의 메서드를 연속적으로 호출할 수 있도록 설계된 구조이다. 메서드 체이닝은 코드의 가독성을 높이고, 코드를 간결하게 유지하는 데에 도움을 준다.  예시1) 단순히 값을 누적해서 더하는 기능을 제공하는 ValueAdder 클래스package lang.string.chaining;public class ValueAdder { private int value; public ValueAdder add(int addValue) { value += addValue; return this; // 자신의 참조값을 반환해서 메.. 2024. 8. 22.
[OOP] 불변 객체와 메서드명 관례 - withXxx() 불변 객체(Immutable Object)는 한 번 생성되면 그 상태를 변경할 수 없는 객체를 의미한다주요 특징상태 불변성: 객체가 생성된 이후에는 객체의 상태(필드 값)를 변경할 수 없다. 모든 필드는 초기화된 후에 변하지 않으며, 수정이 불가능하다.단순성: 불변 객체는 상태 관리가 단순하다. 상태가 변하지 않으므로, 복잡한 상태 변경 로직을 고려할 필요가 없다.불변 객체의 예Java의 String 클래스: String 객체는 불변 객체의 대표적인 예이다. String 객체가 생성된 후에는 해당 문자열의 내용을 변경할 수 없다. 문자열을 조작하는 메서드(예: concat, replace)는 항상 새로운 String 객체를 반환하며, 기존 객체는 변하지 않는다.래퍼 클래스 (Integer, Double,.. 2024. 8. 20.
[OOP] 정적 의존관계 vs 동적 의존관계 ㅇ정적 의존관계(Static Dependency): 컴파일 시간에 결정되며, 주로 클래스 간의 관계를 의미쉽게 이야기해서 프로그램을 실행하지 않고, 클래스 내에서 사용하는 타입들만 보면 쉽게 의존관계를 파악할 수 있다.특징:컴파일 타임: 정적 의존관계는 코드가 컴파일될 때 결정된다. 즉, 소스 코드에서 어떤 클래스가 다른 클래스를 참조하거나 사용하는 경우, 이 의존관계가 컴파일러에 의해 확인된다.명시적 선언: 클래스가 다른 클래스를 사용하는 경우, 그 클래스의 인스턴스를 생성하거나 메서드를 호출하는 코드가 명시적으로 작성된다.파일 참조: Java에서는 import 문을 통해 다른 클래스를 참조하거나 사용하는 것을 확인할 수 있다.   ㅇ동적 의존관계(Dynamic Dependency): 프로그램이 실행되.. 2024. 8. 20.
[OOP] OCP(개방 폐쇄 원칙)과 디자인 패턴 ㅇ개방 폐쇄 원칙(OCP, Open-Closed Principle): 아주 좋은 객체 지향 설계 원칙 중 하나이다 - 확장에는 열려 있어야 한다(Open for extension) 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 새로운 기능을 추가하거나 확장할 수 있어야 한다이 확장은 기존 코드를 변경하지 않고, 새로운 코드 추가를 통해 이루어져야 한다 - 변경에는 닫혀 있어야 한다(Closed for modification) 기존의 소프트웨어 엔티티는 변경되지 않아야 한다즉, 새로운 요구 사항이나 기능이 추가되더라도 기존의 코드를 수정하지 않고 기능을 확장할 수 있어야 한다 쉽게 이야기해서 "기존의 코드 수정 없이 새로운 기능을 추가"할 수 있다는 의미다. OCP는 소프트웨어를 보다 유연하게 만들어, 변.. 2024. 8. 12.
[OOP] UML 표기법 UML 표기법이란 "Unified Modeling Language"의 약자로, 소프트웨어 시스템을 설계하고 시각화하기 위해 사용하는 표준화된 모델링 언어이다. UML은 객체 지향 프로그래밍의 개념을 기반으로 하며, 복잡한 시스템을 구조화하고 이해하기 쉽게 도와주는 다양한 다이어그램을 제공한다.  [접근 제어자에 대한 UML 표기법]+: public (모든 외부 호출을 허용한다)#: protected (같은 패키지안에서의 호출 허용 + 패키지가 달라도 상속 관계의 호출은 허용)~: default (같은 패키지안에서의 호출을 허용한다)-: private (모든 외부 호출을 막는다)    (참고) [UML 표기법 주요 다이어그램]클래스 다이어그램 (Class Diagram): 시스템의 클래스와 그들 간의 관계.. 2024. 8. 9.
[OOP] 객체 vs 인스턴스 객체는 인스턴트스를 포함하는 개념이다 ㅇ객체(object)객체는 클래스에서 정의한 속성과 기능을 가진 실체이다. 객체는 서로 독립적인 상태를 가진다.예를 들어 위 코드에서 student1은 학생 1의 속성을 가지는 객체이고, student2는 학생 2의 속성을 가지는 객체이다. student1과 student2는 같은 클래스에서 만들어졌지만, 서로 다른 객체이다.   ㅇ인스턴스(instance)인스턴스는 특정 클래스로부터 생성된 객체를 의미한다. 그래서 객체와 인스턴스라는 용어는 자주 혼용된다. 인스턴스는 주로 객체가 어떤 클래스에 속해 있는지 강조할 때 사용한다. 예를 들어서 "student1 객체는 Student 클래스의 인스턴스다"라고  표현한다.  [객체 vs 인스턴스]둘 다 클래스에서 나온 실체.. 2024. 8. 5.