Object Oriented Programming

연쇄코딩마·2020년 9월 9일
0

TIL

목록 보기
4/15
post-custom-banner

들어가기 전에

컴퓨터 프로그램이란 무엇인가?

  • 컴퓨터 프로그램은 알고리즘의 집합체이다.
  • 알고리즘이란 그 과정들의 과정이다.

프로그램 언어란?

  • 프로그램 언어는 소프트웨어를 개발하기 위한 언어

  • 종류 :

    • 기계 언어 : 1과 0으로 만 이루어진 언어 , 컴퓨터의 "Native" 언어이다.

    • Assembly 언어 : 기계 언어와 1 : 1 대응되는 컴퓨터 저급 언어이다. 컴퓨터 CPU 에 따라 구조는 달라 질수 있다.

    • high-Level 언어 : 프로그래밍 언어 , 영어와 유사한 고급 언어 컴퓨터를 구동시키는 소프트웨어를 작성하기 위한 형식의 언어이다. 고급 언어 일수록 사람이 사용하는 언어에 가깝다고 볼수있다.


      그림 1-1 언어 상관관계

      • 상관관계 : 고 레벨 언어로 갈수록 구현의 용이성을 가지고 유동성과 휴대성을 가진다.

        반면 기계 언어로 갈수록 실행이 빨라지며 기계친화가 된다.

  • 절차적 프로그래밍(procedural programming) : 프로그래밍 패러다임의 일종으로서, C, COBOL, Fortran, LISP, Perl, HTML, VBScript 등이 있다.

객체 지향 프로그래밍( Object-Oriented Programming, OOP )

1. 정의 : 프로그래밍 패러다임의 일종으로 절차적 프로그래밍과는 달리 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것, 각각의 객체는 메시지를 주고 받고, 데이터를 처리 할수 있다.

2. 종류 :

3. 세부 용어

그림 1-1-1 클래스와 오브젝트

  • 클래스 (class) : 청사진(의미 : 미래에 대한 희망적인 계획, 구상등을 비유한말) 그 안의 객체를 만들기 위한 아이디어나 프로도타입, 속성(attribute)과 행위(behavior)를 정의한 것

    • 예를 들자면 어떤 자동차를 만들고자 할때 어떤 형태로 만들건지 어떤 색깔로 만들건지 어떤 퍼포먼스를 낼건지.
  • 객체 (Object) : 클래스 안에 구성(인스턴스 [instance]: 실제로 메모리상에 할당된 것)되는 요소, 그 객체 안에는 그 청사진을 구성하기 위한 요소들이 들어있다.
    - 예를 들자면 클래스 예로 부터 계속하자면, 자동차의 색깔은 파란색이되면 좋겠다라는 문장으로 청사진을 꾸며 볼수 있을 텐데 이 문장에 색깔의 해당하는 것은 객체 속성 일것이고 파란색은 요소가 되겠다.~~ 객체 ~~속성 안의 요소는 유동적일 것이다.

    그림 1-2 세부행위 속성 그림

  • 행위(behavior/methods) : 메소드는 그 청사진으로 될 수 있는 물체의 기능들을 말하는 것이다. 클래스로부터 생성된 객체를 사용하는 방법

  • 속성(attribute/Properties) : 그 안에 클래스가 가지는 속성, 값을 말한다.

4. Object Oriented Programming 의 기본적인 특징

  • 캡슐화(영어: encapsulation) : 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶는 것

    • 어떤 회사에서 고용인의 임금을 구하기 위한 함수이다. 하기는 절차 지향형 코드로 표현한 것이다.

      let baseSalary = 30000;
      let overtime = 10
      let rate = 20
      
      function getWage(baseSalary, overtime, rate) {
      	return baseSalary + ( overtime * rate )
      }

      이렇게 한다면 다른 고용인의 임금을 구할때는 하나하나 다시 기본 임금이나 비율등을 다른 이름으로 재할당해 줘야 한다.

      하기는 객체 지향형 코드로 구현한 것이다.
      let employee = {
      basesalary: 30000,
      overtime: 10,
      rate: 20,
      
      getWage: function() {
        return this.basesalary + ( this.overtime * this.rate )
       }
      };
      employee.getWage()
      30200

      상기 코드 처럼 객체로 묶어 구현 할 수 있다.

      복잡도를 줄여주고 재사용성을 증대시킨다.

  • 상속(영어: Inheritance) : 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다.

    • 재 사용성을 증대 시켜 준다 왜냐면 상속을 받은 클래스는 그 연산을 상속 받았기 때문이다.
  • 추상화(영어 : Abstraction ) : 불필요한 정보는 숨기고 중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다.

  • 다형성(영어 : Polymorphism ) : 특정 기능을 선언(설계)부분과 구현(동작)부분으로 분리한 후 구현 부분을 다양한 방법으로 만들어 선택하여 사용할 수 있게 하는 기능이다.

    • String a = "a";
      
      void test(String a){}
      /*
      **일반 객체지향언어의 경우 데이터 타입을 맞추지 않으면 에러가 난다.
      
      출처: https://debugdaldal.tistory.com/152 [달달한 디버깅]
      
      이 경우에 에러가 난다고 함 나는 자바를 배우지 않아 왜 에러가 나는지는 잘 모르겠음
      
      */
      var a = "a";
      
      function test( a ) {}
      
      // 아마 자바스크립트는 선언과 할당을 같이 할수 있는 것에 반해서 다른 언어는 할수 없어서 그런가 보다. 아니라면 댓글 부탁드립니다.
profile
只要功夫深,铁杵磨成针
post-custom-banner

0개의 댓글