Skip to content

Latest commit

 

History

History
59 lines (52 loc) · 2.68 KB

chap11.md

File metadata and controls

59 lines (52 loc) · 2.68 KB

CHAP 11

  • 프로그램 = 객체들의 집합 = 클래스들의 집합
  • 객체-지향 프로그래밍(OOP) 언어: 프로그램은 실세계 객체들을 표현하고 시뮬레이션 하는 것

java

  • 실체 변수(instance varaible): 클래스 내에서 정의된 변수
  • 객체 참조 변수(object reference varaible): 객체를 가리키기 위한 변수, 객체가 생성된 것은 아님!
  • 객체는 new로 생성 (생성하면 각 객체를 위한 기억 공간이 힙 영역에 할당됨)

캡슐화

  • 추상자료형(abstract data type): 데이터와 관련된 연산을 묶어 캡슐화하여 정의한 자료형
    • 클래스는 추상자료형의 발전된 형태
  • 캡슐화: 일반적으로 연관 있는 필드변수와 메소드를 클래스로 묶고 내부 구현내용을 외부에 감추는 것
    • 필요한 이유: 보호. 외부의 잘못된 사용으로 객체가 손상되지 않게 하기 위해서
  • 객체의 외부적 관점: 객체는 하나의 캡슐로 서비스(객체에 대한 창구)를 제공
  • 객체의 필드 변수는 공용으로 선언하면 안됨
  • 공용 메소드(=서비스 메소드): 객체의 서비스를 제공하는 메소드
  • 지원 메소드: 서비스 메소드를 지원하는 메소드. 공용이 아님(private, protected)

정적 변수와 메소드

  • 정적 변수(=클래스 변수)
    • static으로 선언됨
    • 객체가 아니라 클래스 내에 변수를 위한 기억공간이 생성됨
    • 한 클래스의 모든 객체들이 공유하여 사용
  • 정적 메소드(=클래스 메소드)
    • static으로 선언됨
    • 객체를 생성하지 않고도 클래스 이름을 이용하여 호출 가능 -> 그래서 실체 변수는 사용 못함. 정적 변수만 사용 가능

제네릭

  • 제네릭 프로그래밍: 타입 매개변수 이용해서 여러 타입에 적용 가능한 포괄적 토드
  • 제네릭 클래스
  • 제네릭 메소드
public static <T> Box<T> boxing(T t){
    Box<T> box= new Box<T>();
    box.set(t);
    return box; 
}

python

  • python은 실체 변수(=객체 변수)를 선언하지 않고 초기화
  • 객체 변수
  • 클래스 변수 (클래스 변수는 초기화함! 클래스 내에 초기화한 변수가 클래스 변수임)
  • 접근 지정자 별도로 없음
    • 밑줄 두개로 시작한 이름: private
    • 한 개의 밑줄로 시작한 이름: protected
    • 밑줄로 시작안하는 이름: public

C++

  • C++에서는 java와 달리 클래스 타입으로 변수를 선언해도 객체가 생성됨. new로 해도 생성됨!
  • 템플릿(template): C++의 제네릭 프로그래밍
template <typename T>
T sum(T a, T b){
    return a+b; 
}