Skip to content

Latest commit

 

History

History

Common

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Common

프레임워크 vs 라이브러리

  • 프레임워크 → 각각의 목적을 가지고 있는 레고세트
    • 개발자는 이미 짜여진 룰(프레임워크)에 따라 작업을 한다.
    • xcode로 어플리케이션을 만드는 것은 애플이 만들어놓은 프레임워크에 따라 어플을 만든다고 할 수 있다.
  • 라이브러리 → 미리 남들이 만들어 놓은 필요부분을 사용하는 것
    • 어플을 만들때 남이 만든 이쁜 커스텀 버튼을 쓰는 느낌이다.

객체 지향 프로그래밍

객체 지향 프로그래밍은 왜 필요할까?

도서 관리 프로그램이나 회원 관리 프로그램 등을 생각해보자. 각각의 프로그램에서 사용해야하는 데이터가 있을 것이다.

Member Data

이름: 성별: 나이: 주소:

Book Data

제목: 가격: 출판사: 저자:

클래스나 구조체를 사용하여 이러한 멤버나 책의 모델들을 잘 설계한다면 하나하나 따로 만들필요없이 공장에서 빵찍어내듯이 사용하면된다. 이렇게 하면 데이터를 만들기에도 좋지만 데이터를 처리하기에도 유용하다.


객체지향의 4대 특징

  1. 추상화(Abstraction)

    모델링이라는 말과 비슷하다. 실생활에서의 추상화란 관찰자가 관심있는 부분만 가지고 재조합하는 것이다. 객체지향적 관점에서, 실체들의 공통적 특성을 뽑아내서 클래스로 정의하는 것 자체가 추상화의 개념이다. (도서관리 프로그램 → 제목, 저자, 출판사, 가격 등..)

  2. 캡슐화(Encapsulagtion)

    캡슐화는 연관이 있는 상태(속성)이나 기능(메서드)를 하나의 클래스로 묶어서 활용한다는 개념이다. 캡슐화에서는 은닉화라는 개념이 있는데 이를 사용하면 접근제어자를 이용해 객체 외부에서 내부데이터의 접근 통제가 가능해진다.

  3. 상속성(Ingeritance)

    부모 클래스의 속성과 메서드를 자식 클래스에서 그대로 물려받는 개념이다. 상속을 통해, 코드가 재활용될 수 있기 때문에 생산성이 높아진다.

  4. 다형성(Polymorphism)

    다형성은 하나의 객체가 여러가지 타입의 형태로 저장 될 수 있고, 다양한 메서드의 현태로 동작이 가능함을 의미한다. 따라서 하나의객체는 다양한 방식으로 동작이 가능하다.


코데힙스

  1. 코드(프로그램) → 프로그램의 모든 코드
  2. 데이터 → 전역 변수 및 타입 변수, 공통으로 공유하기 위한 데이터
  3. 힙 → 동적할당, 크기가 크고 관리할 필요가 있는 데이터
  4. 스택 → 함수 실행을 위한 임시적 공간

동시성 프로그래밍의 문제점

  1. 경쟁상황/경쟁조건(Race Condition)

멀티 쓰레드의 환경에서, 같은 시점에 여러개의 쓰레드에서 하나의 메모리에 동시접근하는 문제이다. 다른 표현으로는 Thread-Safe하지 않다고도 하는데, 이러한 문제점을 해결하려면 메모리를 다른 쓰레드가 쓰고있는 동안에는 다른 여러 쓰레드에서 접근하지 못하도록 Thread-Safe 처리를 하면된다.


  1. 교착상태(Dead Lock)

멀티 쓰레드의 환경에서, 베타적인 메모리 사용으로 일이 진행이 안되는 문제이다. 교착상태가 발생하는 상황은 Thread-Safe를 처리했지만 잘못된 설계로 서로 접근못하게 하거나 점유하려고 하면서 메서드가 종료를 못시키는 상황이다.