전체 글
-
객체 지향 설계는 컴퓨터 프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고 데이터를 처리하며, 객체 지향 설계는 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있게 해준다. 이러한 유연함은 다형성을 통해 구현된다. 결론적으로 다형성의 본질은 유연한 변경이다. 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경 가능, 즉 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다. 또한 인터페이스를 안정적으로 잘 설계하는 것도 중요하다.좋은 객체 지향 설계를 위한 SOLID라는 5가지 원칙이 존재한다.1. SRP 단일 책임 원칙Single responsibility principle"한 클래스는 하나의 ..
SOLID객체 지향 설계는 컴퓨터 프로그램을 여러개의 독립된 단위(객체)들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고 데이터를 처리하며, 객체 지향 설계는 부품을 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있게 해준다. 이러한 유연함은 다형성을 통해 구현된다. 결론적으로 다형성의 본질은 유연한 변경이다. 인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경 가능, 즉 클라이언트를 변경하지 않고 서버의 구현 기능을 유연하게 변경할 수 있다. 또한 인터페이스를 안정적으로 잘 설계하는 것도 중요하다.좋은 객체 지향 설계를 위한 SOLID라는 5가지 원칙이 존재한다.1. SRP 단일 책임 원칙Single responsibility principle"한 클래스는 하나의 ..
2024.10.27 -
우선 절차적 프로그래밍과 객체지향 프로그래밍은 서로 대조되는 개념이 아니다. 서로 상반되는 개념이 아니며 절차적 프로그래밍의 한계점들과 문제를 해결하기 위해 객체지향 프로그래밍 방식이 개발되었다.절차적 프로그래밍절차적 프로그래밍은 순차적인 처리를 바탕으로 프로그램 전체가 유기적으로 실행되도록 한 프로그래밍 방식이다. 절차적 프로그래밍은 procedure를 이용하여 작성되는데, procedure에는 루틴, 서브루틴, 함수 등이 존재한다.루틴프로그램에서 반복적이거나 독립적으로 실행할 수 있는 코드 블럭을 뜻하며 main문 외에도 서브루틴이나 함수 역시 루틴으로 간주됨서브루틴main문 밖에서 정의된 코드 블럭이며 반환값이 없는 작업을 수행함void printMessage() {...}함수main문 밖에서 정의..
절차적 프로그래밍 vs 객체지향 프로그래밍우선 절차적 프로그래밍과 객체지향 프로그래밍은 서로 대조되는 개념이 아니다. 서로 상반되는 개념이 아니며 절차적 프로그래밍의 한계점들과 문제를 해결하기 위해 객체지향 프로그래밍 방식이 개발되었다.절차적 프로그래밍절차적 프로그래밍은 순차적인 처리를 바탕으로 프로그램 전체가 유기적으로 실행되도록 한 프로그래밍 방식이다. 절차적 프로그래밍은 procedure를 이용하여 작성되는데, procedure에는 루틴, 서브루틴, 함수 등이 존재한다.루틴프로그램에서 반복적이거나 독립적으로 실행할 수 있는 코드 블럭을 뜻하며 main문 외에도 서브루틴이나 함수 역시 루틴으로 간주됨서브루틴main문 밖에서 정의된 코드 블럭이며 반환값이 없는 작업을 수행함void printMessage() {...}함수main문 밖에서 정의..
2024.10.27 -
is-a 관계와 has-a 관계는 클래스들의 관계를 표현할 때 사용된다.is-ais-a 관계는 말그대로 A는 B이다(A is B) 관계를 나타낸다.예를 들어보자. "사과는 과일이다" 라는 문장은 맞는 말이다. 그렇다면 "과일은 사과이다" 라는 문장은 맞는 말일까? 물론 아니다. 과일에는 사과 외에 다른 과일들도 들어갈 수 있기 때문이다.이러한 관계는 클래스들 사이에서 상속 관계로 나타낼 수 있다. "사과는 과일이다" 라는 문장에서 과일은 사과의 부모 클래스가 되고 다음과 같이 나타낼 수 있다.public class Fruit { int price; String color;}public class Apple extends Fruit { int sweetness_level;}has-ahas-..
is-a 관계와 has-a 관계is-a 관계와 has-a 관계는 클래스들의 관계를 표현할 때 사용된다.is-ais-a 관계는 말그대로 A는 B이다(A is B) 관계를 나타낸다.예를 들어보자. "사과는 과일이다" 라는 문장은 맞는 말이다. 그렇다면 "과일은 사과이다" 라는 문장은 맞는 말일까? 물론 아니다. 과일에는 사과 외에 다른 과일들도 들어갈 수 있기 때문이다.이러한 관계는 클래스들 사이에서 상속 관계로 나타낼 수 있다. "사과는 과일이다" 라는 문장에서 과일은 사과의 부모 클래스가 되고 다음과 같이 나타낼 수 있다.public class Fruit { int price; String color;}public class Apple extends Fruit { int sweetness_level;}has-ahas-..
2024.10.27 -
1. Self - describingdb 시스템은 db 구, 엔티티 타입, constraint에 대해 완전한 definition을 포함하고 있다. 즉 자기 자신에 대한 묘사가 포함되어 있다.2. Insulation between programs and data프로그램과 데이터는 독립적으로 동작한다. 예를 들어 데이터 구조나 저장 방식이 바뀌어도 응용 프로그램은 수정되지 않는다.3. Data abstractionstorage에 대한 detail들은 숨기고 유저에게는 db의 conceptual view만 보여줄 수 있다.4. Support of multiple view of the data각 유저는 DB를 원하는 만큼만 볼 수 있다.5. Sharing of data and multiuser transacti..
DB의 특징1. Self - describingdb 시스템은 db 구, 엔티티 타입, constraint에 대해 완전한 definition을 포함하고 있다. 즉 자기 자신에 대한 묘사가 포함되어 있다.2. Insulation between programs and data프로그램과 데이터는 독립적으로 동작한다. 예를 들어 데이터 구조나 저장 방식이 바뀌어도 응용 프로그램은 수정되지 않는다.3. Data abstractionstorage에 대한 detail들은 숨기고 유저에게는 db의 conceptual view만 보여줄 수 있다.4. Support of multiple view of the data각 유저는 DB를 원하는 만큼만 볼 수 있다.5. Sharing of data and multiuser transacti..
2024.10.27 -
1. Queries데이터와 데이터 스키마를 분명히 분리해주는 강력하고 정교한 query language가 필요2. Integrity일관되고 유효한 데이터만을 저장하기 위해 제약 사항(constraint)을 강제(enforce)하는 것이 필요3. Update데이터를 일관되게 조작하기 위한 방법이 필요4. Multiple users다중 reader, writer를 지원해야 함5. Crashes시스템 충돌이나 오류 발생 시 commit과 rollback 같은 기능을 통해 데이터 일관성을 유지할 수 있어야 함6. Data physically separate데이터의 물리적 분리를 통해 각 유저나 데이터 항목이 고유하게 존재하고, 참조 무결성(referential integrity)을 유지할 수 있어야 함7. Se..
DB를 사용하는 이유는?1. Queries데이터와 데이터 스키마를 분명히 분리해주는 강력하고 정교한 query language가 필요2. Integrity일관되고 유효한 데이터만을 저장하기 위해 제약 사항(constraint)을 강제(enforce)하는 것이 필요3. Update데이터를 일관되게 조작하기 위한 방법이 필요4. Multiple users다중 reader, writer를 지원해야 함5. Crashes시스템 충돌이나 오류 발생 시 commit과 rollback 같은 기능을 통해 데이터 일관성을 유지할 수 있어야 함6. Data physically separate데이터의 물리적 분리를 통해 각 유저나 데이터 항목이 고유하게 존재하고, 참조 무결성(referential integrity)을 유지할 수 있어야 함7. Se..
2024.10.27 -
Data Model데이터 모델은 데이터 추상화를 위해 structure, operation, constraints를 제공한다.structure (구조)데이터베이스의 구조operation (동작)데이터베이스의 구조를 조작하는 동작constraints (제약)데이터베이스가 따라야만 하는 제약데이터가 유효한지에 대해 확인 Categories of Data ModelsConceptual data modelshigh-level(사람이 이해하기 쉽고)이고, semantic, 즉 데이터 모델이 데이터의 의미(entity, attribute, relationship)를 제공한다는 뜻이다.주로 데이터의 의미와 논리적인 구조에 초점을 맞추고 사용자가 데이터를 이해하고 상호작용할 수 있도록 돕는 구조를 제공한다.Physic..
Data Models, Schemas, InstancesData Model데이터 모델은 데이터 추상화를 위해 structure, operation, constraints를 제공한다.structure (구조)데이터베이스의 구조operation (동작)데이터베이스의 구조를 조작하는 동작constraints (제약)데이터베이스가 따라야만 하는 제약데이터가 유효한지에 대해 확인 Categories of Data ModelsConceptual data modelshigh-level(사람이 이해하기 쉽고)이고, semantic, 즉 데이터 모델이 데이터의 의미(entity, attribute, relationship)를 제공한다는 뜻이다.주로 데이터의 의미와 논리적인 구조에 초점을 맞추고 사용자가 데이터를 이해하고 상호작용할 수 있도록 돕는 구조를 제공한다.Physic..
2024.10.27 -
루프 불변성이란?루프 불변성(loop invariant)은 어떤 알고리즘이 잘 동작하는지 증명하기 위해 사용된다.루프 불변성의 단계루프 불변성은 세가지 단계로 이루어진다.1. 초기조건(Initialization)첫 번째 루프가 시작하기 전 루프 불변성이 참이어야 한다.2. 유지조건(Maintenance)루프의 시작 전 루프 불변성이 참이었다면, 그다음 반복에서도 참이 유지되어야 한다.3. 종료조건(Termination)루프가 종료되면 불변량은 알고리즘이 옳다는 것을 보여주는 데 도움이 되는 유용한 속성을 제공해야 한다.한번 예시로 알아보자삽입 정렬_list = [4, 7, 1, 5, 2, 8, 3, 6]def INSERTION_SORT(A): for j in range(1, len(A)): ..
루프 불변성루프 불변성이란?루프 불변성(loop invariant)은 어떤 알고리즘이 잘 동작하는지 증명하기 위해 사용된다.루프 불변성의 단계루프 불변성은 세가지 단계로 이루어진다.1. 초기조건(Initialization)첫 번째 루프가 시작하기 전 루프 불변성이 참이어야 한다.2. 유지조건(Maintenance)루프의 시작 전 루프 불변성이 참이었다면, 그다음 반복에서도 참이 유지되어야 한다.3. 종료조건(Termination)루프가 종료되면 불변량은 알고리즘이 옳다는 것을 보여주는 데 도움이 되는 유용한 속성을 제공해야 한다.한번 예시로 알아보자삽입 정렬_list = [4, 7, 1, 5, 2, 8, 3, 6]def INSERTION_SORT(A): for j in range(1, len(A)): ..
2024.10.27