본문 바로가기
반응형

I LEARNED/자료구조13

[자료 구조] 교착상태 상호배제, 점유대기, 비선점, 환형대기 많이 들었지만, 흐릿한 기억에 선명함을 더하려고 한다. 💡데드락(Deadlock) 교착상태라고도 불리는 이것은 시스템 자원에 대한 요구가 서로 엉켜 무한 대기를 발생시키는 상황을 일컫는다. : 둘 이상의 프로세스가 다른 프로세스가 점유한 자원을 서로 기다릴 때 무한 대기에 빠지는 상황 프로그램 상에서 교착 상태는 동기화 과정에서 일어나며, 동기화를 해주는 코드에 문제가 생기면 프로세스는 멈추게 된다. 세마포어, 뮤텍스 등의 동기화를 위한 코드가 프로그래머의 실수를 통해 동기화가 제대로 안된다면, 프로세스가 멈추게 되는 것이다. 💡데드락(Deadlock)의 발생 조건 데드락은 한 시스템 내에 네 가지 조건이 동시에 성립 할 때 발생한다. 따라서 4가지 조건 중 하나라.. 2023. 1. 24.
[자료 구조] TDD? 글을 읽기에 앞서, 혹시나 수정이 필요한 부분이 있다면 지적해주시면 감사하겠습니다. TDD? Test Driven Development의 약자로 '테스트 주도 개발' 이라고 한다. TDD가 테스트 주도 개발이라는 것은 알았으니, TDD의 본격적인 내용에 앞서 테스트의 종류와 단위 테스트의 중요성에 대해 알아보자. 1. 테스트의 종류? 1️⃣단위 테스트(Unit Test) : 하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트 여기서 말하는 모듈은 애플리케이션 내에 하나의 기능이나 메소드로 이해하면 된다 예시로 웹에서 로그인에 대한 독립 테스트가 하나의 단위 테스트로 볼 수 있는 것이다. 단위 테스트에서 테스트 대상의 크기는 엄격하게 정해져 있지는 않다. 일반적으로는 클래스나 메소드 수준으.. 2023. 1. 20.
[자료구조] 객체 지향적 설계 원칙 이제는 너무나 익숙해진 OOP(Object-Orientied Programming, 객체지향 프로그래밍)이다. 객체지향적 설계가 Spring을 사용하며 중요한 것은 알았으니 좀더 공부해보자. 객체지향 설계를 해야 하는 이유 객체지향의 핵심이 의존성을 줄이고 결합도를 낮추는 것이다. 이를 잘해주려면 핵심화인 캡슐화가 잘 활용되어야한다는 의미이다. 캡슐화를 잘 활용해 객체의 자율성을 높이고, 응집도를 높여 객체지향을 더 완벽하게 구현 가능하다. 캡슐화를 통해 의존성을 줄이고 결합도를 낮추는 것 객체지향 코딩을 해봤다면 객체의 자율성을 높임과 동시에 다른 객체에 대한 의존성이 높아지는 것을 경험해봤을 것이다. 위와 같이 객체의 자율성이 상승함과 동시에 결합도가 같이 높아지는 모순을 트레이드 오프라고 한다. 객.. 2023. 1. 19.
[자료구조] 객체지향? 객체지향 프로그래밍? 제일 많이 질문 들어오는 것 중에 하나, 바로 객체지향이다. 오늘은 객체지향이란 무엇인지와 객체 지향 프로그래밍의 특징에 대해 알아보려한다. 💡프로그래밍 패러다임 1. 명령형 프로그래밍 : 무엇을 하는지보다 어떻게 할것인지 - 절차지향 프로그래밍 - 객체지향 프로그래밍 2. 선언형 프로그래밍 : 어떻게하는지보단 무엇을 할것인지 - 함수형 프로그래밍 ✔ 절차 지향 기능이 중심이 되어, 무엇을 어떤 절차로 할 것인가? 이 점이 중점이 된다. 어떤 기능을 어떤 순서로 처리하는가?즉, 실행에 초점이 맞춰진다. ✔ 객체 지향 객체가 중심이 되어, 누가 어떤 일을 할 것인가가 중점이 된다. 객체를 도출하고 각각의 역할을 정의해 나가는 것. 즉,객체간의 관계/조직에 초점이 맞춰진다. >> 절차 지향과 객체 지향 - .. 2023. 1. 17.
[자료 구조] 정규화(Normalization) 코드에 대해서 피드백을 받다가 DB의 연관관계에 관해서 말을 듣다보니 정규화에 대해 개념정리가 필요할 것 같다는 생각을 다시하게 되어 정리하게 되었다 데이터베이스 정규화? 데이터의 중복을 줄이고 무결성을 향상시키는 등 여러 목적을 달성하기 위해 재 디자인 하는 것이다. => 릴레이션 내에서 중복을 제거하는 과정 데이터베이스 정규화의 목적 1. 불필요한 데이터를 제거,데이터의 중복을 최소화 ( 저장 공간 최소화) 2. 각종 이상 현상을 방지하기 위해,테이블의 구성을 논리적이고 직관적으로 3. 데이터 테이블 구성이 논리적,직관적으로 하기 위해(자료 구조의 안정성 최대화) 4. 다양한 관점에서 query를 지원하기 위해 (효과적인 검색 알고리즘) 5. 무결성 제약조건의 시행을 간단하게 하기 위해( 데이터 무결.. 2022. 8. 18.
[자료 구조] 느슨한결합?강한결합? 모두가 좋아하는 사람이 될수없다한들, 좋은 사람이 될수없다는 것은 아니다 공부과정 중에 AllinOneController를 통해 모든 컨트롤 기능을 한곳에 모아두었다가 푸는 작업을 통해 하나의 컨트롤러에 모든 역할을 몰아주었을 때 생기는 문제점에 대해 배웠다. 그러다 "강한 결합" 에 대한 궁금증이 생겨서 "느슨한 결합"과 함께 찾아보게 되었다. 그리고 의존성 주입과 IoC 컨테이너는 Spring의 기본이자 핵심 기능 중 하나라는 것을 알게 되었다. 우선 짧게 보고 넘어가고 싶은 사람들을 위해 강한 결합(Tight Coupling)은 클래스와 객체가 서로 의존하고 있는 것 느슨한 결합(Loose Coupling)은 다른 클래스를 직접적으로 사용하는 클래스의 의존성을 줄이는 것 이라고 할수있는데, 일반적으.. 2022. 8. 5.
반응형