- 프레임워크 → 각각의 목적을 가지고 있는 레고세트
- 개발자는 이미 짜여진 룰(프레임워크)에 따라 작업을 한다.
- xcode로 어플리케이션을 만드는 것은 애플이 만들어놓은 프레임워크에 따라 어플을 만든다고 할 수 있다.
- 라이브러리 → 미리 남들이 만들어 놓은 필요부분을 사용하는 것
- 어플을 만들때 남이 만든 이쁜 커스텀 버튼을 쓰는 느낌이다.
객체 지향 프로그래밍은 왜 필요할까?
도서 관리 프로그램이나 회원 관리 프로그램 등을 생각해보자. 각각의 프로그램에서 사용해야하는 데이터가 있을 것이다.
Member Data
이름: 성별: 나이: 주소:
Book Data
제목: 가격: 출판사: 저자:
클래스나 구조체를 사용하여 이러한 멤버나 책의 모델들을 잘 설계한다면 하나하나 따로 만들필요없이 공장에서 빵찍어내듯이 사용하면된다. 이렇게 하면 데이터를 만들기에도 좋지만 데이터를 처리하기에도 유용하다.
-
추상화(Abstraction)
모델링이라는 말과 비슷하다. 실생활에서의 추상화란 관찰자가 관심있는 부분만 가지고 재조합하는 것이다. 객체지향적 관점에서, 실체들의 공통적 특성을 뽑아내서 클래스로 정의하는 것 자체가 추상화의 개념이다. (도서관리 프로그램 → 제목, 저자, 출판사, 가격 등..)
-
캡슐화(Encapsulagtion)
캡슐화는 연관이 있는 상태(속성)이나 기능(메서드)를 하나의 클래스로 묶어서 활용한다는 개념이다. 캡슐화에서는 은닉화라는 개념이 있는데 이를 사용하면 접근제어자를 이용해 객체 외부에서 내부데이터의 접근 통제가 가능해진다.
-
상속성(Ingeritance)
부모 클래스의 속성과 메서드를 자식 클래스에서 그대로 물려받는 개념이다. 상속을 통해, 코드가 재활용될 수 있기 때문에 생산성이 높아진다.
-
다형성(Polymorphism)
다형성은 하나의 객체가 여러가지 타입의 형태로 저장 될 수 있고, 다양한 메서드의 현태로 동작이 가능함을 의미한다. 따라서 하나의객체는 다양한 방식으로 동작이 가능하다.
- 코드(프로그램) → 프로그램의 모든 코드
- 데이터 → 전역 변수 및 타입 변수, 공통으로 공유하기 위한 데이터
- 힙 → 동적할당, 크기가 크고 관리할 필요가 있는 데이터
- 스택 → 함수 실행을 위한 임시적 공간
- 경쟁상황/경쟁조건(Race Condition)
멀티 쓰레드의 환경에서, 같은 시점에 여러개의 쓰레드에서 하나의 메모리에 동시접근하는 문제이다. 다른 표현으로는 Thread-Safe하지 않다고도 하는데, 이러한 문제점을 해결하려면 메모리를 다른 쓰레드가 쓰고있는 동안에는 다른 여러 쓰레드에서 접근하지 못하도록 Thread-Safe 처리를 하면된다.
- 교착상태(Dead Lock)
멀티 쓰레드의 환경에서, 베타적인 메모리 사용으로 일이 진행이 안되는 문제이다. 교착상태가 발생하는 상황은 Thread-Safe를 처리했지만 잘못된 설계로 서로 접근못하게 하거나 점유하려고 하면서 메서드가 종료를 못시키는 상황이다.