Object-Oriented Programming Concepts

man soup·2020년 6월 10일
0

자바 문법

목록 보기
6/15

What Is an Object?

  • 객체란 객체지향 기술을 이해하기 위한 키이다.
  • 주위를 돌아보면 실제 세계의 객체(사물)을 볼 수 있다.
    • 개, 고양이, 자전거 등
  • 실제 세상의 객체들은 2가지 특징을 가진다.
    • 상태와 행동
      • 상태 - 이름,색,종 등
      • 행동 - 짖기,달리기 등
  • 실제 세상의 객체들의 상태와 행동을 구분짓는것은 객체지향 프로그래밍 사고의 좋은 시작이다.
  • 실제 세상의 객체들을 관찰해보자
  • 각각의 객체들을 보고 2가지 질문을 해보자
    • 이 객체가 가질 수 있는 상태는 무엇인가?
    • 이 객체가 행동할 수 있는 것은 몇가지인가?
  • 실제 세상의 객체들은 복잡하게 다양하다.
  • 몇몇의 객체들은 다른 객체들을 포함하고 있기까지 한다.
  • 소프트웨어 객체들은 개념적으로 실제 세상의 객체들과 비슷하다.
    • 상태와 상태와 관련된 행동을 가진다.
  • 객체는 필드라는 공간에 상태를 저장하고 메소드들을 통해 행동을 표출한다.
  • 메소드는 객체의 내부 상태를 조종하고 객체와 객체 대화에 필요한 기본 메커니즘을 제공한다.
  • 내부 상태를 숨기는 것과 모든 객체의 메소드를 통해 모든 상호 작용하는 것을 정보 캡슐화라고 말한다.
    • 객체 지향 프로그래밍의 기초 법칙이다.
  • 코드를 각각의 소프트웨어 객체로 묶는 것은 몇 가지 장점이 존재한다.
    • Modularity
      • 객체의 소스 코드는 다른 객체들의 코드와 독립적으로 적히거나 유지될 수 있다.
      • 생성되면 객체는 쉽게 시스템으로 들어갈 수 있다.
    • Information-hiding
      • 객체의 메소드로만 상호작용함으로써 내부의 구현은 외부로부터 숨겨진다
    • Code re-use
      • 객체가 이미 존재한다면 ( 다른 개발자가 이미 만든) 프로그램에 그 객체를 사용할 수 있다.
      • 그렇게 함으로 스페셜리스트들이 객체를 구현/테스트/디버깅하게 해주고 당신은 믿고 당신의 코드에서 실행할 수 있다.
    • Pluggability and debugging ease
      • 특정한 객체가 문제있다고 판별되면 어플리케이션에서 간단하게 그 객체를 제거하고 다른 객체를 대체로 넣을 수 있다.
      • 실제 세상의 문제해결 메커니즘과 비슷하다 - 볼트가 고장나면 기계를 교체하는게 아닌 볼트만 교체해라.

What Is a Class?

  • 실제 세상에서 온갖 종류의 많은 객체들을 볼 수 있다.
  • 같은 모델로 생산된 수 천개의 자전거를 예로 들어보자.
  • 각각의 자전거는 같은 설계도로부터 제작됐으므로 같은 구성품을 가진다.
  • 객체지향 관점에서 그 자전거는 객체의 클래스의 인스턴스라고 말한다.
  • 클래스는 각각의 객체들을 생성한 설계도이다.

What Is Inheritance?

  • 여러 종류의 객체들은 종종 공통분모를 가진다.
  • 산악 자전거, 로드자전거, 묘기용자전거들은 모두 자전거의 특성을 가진다( 현재 스피드, 현재 기어, 등)
  • 그러나 각자 추가적인 특성을 통해 다름을 나타낸다.
  • 객체지향 프로그래밍은 클래스들이 공통적으로 사용되는 상태와 행동을 다른 클래스로부터 상속받을 수 있다.

What Is an Interface?

  • 객체들은 바깥세계와의 상호작용을 노출된 메소드를 통해 한다.

  • 메소드는 바깥세계와의 객체의 인터페이스를 구성한다.

    • 예를 들어, 텔레비전 앞면의 단추는 플라스틱 케이스의 다른쪽에있는 전기 배선과 사용자 사이의 인터페이스이다.
  • 가장 평범한 형태로 인터페이스는 관련있는 body없는 메소드들의 묶음이다.

  • interface Bicycle {
    
        //  wheel revolutions per minute
        void changeCadence(int newValue);
    
        void changeGear(int newValue);
    
        void speedUp(int increment);
    
        void applyBrakes(int decrement);
    }
  • class ACMEBicycle implements Bicycle {
    
        int cadence = 0;
        int speed = 0;
        int gear = 1;
    
       // The compiler will now require that methods
       // changeCadence, changeGear, speedUp, and applyBrakes
       // all be implemented. Compilation will fail if those
       // methods are missing from this class.
    
        void changeCadence(int newValue) {
             cadence = newValue;
        }
    
        void changeGear(int newValue) {
             gear = newValue;
        }
    
        void speedUp(int increment) {
             speed = speed + increment;   
        }
    
        void applyBrakes(int decrement) {
             speed = speed - decrement;
        }
    
        void printStates() {
             System.out.println("cadence:" +
                 cadence + " speed:" + 
                 speed + " gear:" + gear);
        }
    }
  • 인터페이스를 구현하면 클래스가 제공하기로 약속 한 동작에 대해 클래스가 더 공식적으로 될 수 있다.

  • 인터페이스는 바깥세계와 클래스 사이의 계약서를 형성한다.

    • 이 계약서는 컴파일러에 의해 빌드 타임에 강제된다.
    • 클래스가 인터페이스를 구현한다고하면 인터페이스가 정의한 모든 메소드들이 클래스가 성공적으로 컴파일되기 전에 나타나야한다.

What Is a Package?

  • 패키지는 관련있는 클래스들과 인터페이스들을 구성하는 네임스페이스이다.
  • 개념적으로 패키지를 폴더라고 생각할 수 있다.
    • 한 폴더엔 HTML 페이지들을, 이미지는 다른 폴더에 ...
  • 자바 언어로 작성된 소프트웨어는 수백 수천개의 클래스들로 이루어질 수 있으므로 패키지로 묶는 것이 이해된다.
  • 자바 플랫폼은 당신의 어플리케이션에 알맞은 방대한 클래스 라이브러리(패키지 묶음)을 제공한다.
  • 이 라이브러리들은 API라고도 불린다.
  • 이 패키지들은 범용 프로그래밍과 관련있다.
    • String 객체는 문자열의 상태와 행동을 포함한다.
    • File 객체는 프로그래머가 파일시스템에서 파일을 쉽게 생성,삭제,비교하게 해준다.
    • Socket 객체는 네트워크 소켓의 생성과 사용을 하게해준다.
    • 수천개의 클래스들이 존재한다.
    • 이를 통해 프로그래머는 응용 프로그램 작동에 필요한 인프라가 아닌 특정 응용 프로그램의 디자인에 집중할 수 있습니다.
profile
안녕하세요

0개의 댓글