1. 함수

    : 특정한 기능을 수행하는 프로그램의 독립적인 단위(모듈)

    → 특정한 작업을 별도의 블록으로 따로 구성해 호출

    프로그램 A

    ….

    함수 B() ——————————>

    …. <——————————-

    end

    함수 B()

    ….

    return

    end

    [함수의 구성]

    함수의 자료형 함수 이름(매개변수 리스트)

    → 매개 변수 리스트에서 변수의 타입이 중요

    [함수를 사용하는 이유]

    1. 코드의 중복을 제거하여 간결

    2. 코드의 재사용성 증가

    3. 프로그램이 모듈화되어 유지, 보수가 쉽다.

    (프로젝트는 무조건 유지, 보수가 쉬운 쪽으로 간다)

  2. 클래스

    [클래스의 발생 배경]

    1. 지역 변수 { 선언 }

    2. 함수 변수 { 함수 내부 선언 }, 지역 변수의 하나

    3. 매개 변수 : 함수가 호출될 때 생성되고 리턴 시 사라진다. ←함수 변수보다 더 빨리 생성

    4. 전역 변수 : 프로그램 시작 시 생성, 종료 시 삭제되어 프로그램 전체에 영향

    5. 멤버 변수 : 변수들과 함수들을 묶어 놓은 것, 지정한 함수들만 해당 변수 사용

    TIP) 지역 변수와 매개 변수를 사용하여 프로그램 작성하는 것이 좋다

    → 전역 변수를 사용하면 유지, 보수가 어려우므로 최대한 자제

    → 해결) 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것

    [클래스]

    : 객체 모양을 선언한 툴 (캡슐화)

    → 메소드(멤버 함수)와 필드(멤버 변수)는 모두 클래스 내에 정의

    클래스는 실체 X (실체화 시킨 것을 메모리에 할당 → 객체(instance) )

    [클래스 구성]

    자바는 main 함수 내에 클래스 넣어야 한다.

    접근 권한 클래스 선언 클래스 이름

    [객체]

    : 클래스의 모양대로 생성된 실체(instance)

    주의) 클래스에서 가능하다고 객체에서 가능한 것이 아니다. 엄연히 다르다.

    [상속]

    : 부모의 것을 그대로 물려 받는 것 → 기능을 계속해 추가 가능

    ( 클래스 간에서 발생하는 게 상속, 객체 간에서 발생 X )

    자바는 클래스 다중 상속 없음

    (부모 클래스가 여러 개 X, 예외_인터페이스는 다중 상속 허용)

  3. 객체 지향 프로그래밍의 특징

    1. 캡슐화 : 관련 있는 함수끼리 묶음 → 오류 수정 편리

    2. 다형성 : 이름은 같은데 다른 기능을 수행

    → 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현

    c언어에서는 add(3+4), add(3.0+4.0) 둘다 사용 불가능

    사례 1. 메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드

    함수 이름은 같은데 매개변수의 개수나 타입이 달라야 다른 함수

    → 타입이 다르면 2개의 생성자 있어도 된다.

    (리턴 타입은 달라도 됨, 리턴 타입이 다르면 오버로딩 아니다)

    사례 2. 메소드 오버라이딩 : 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현

    1. 상속 → 재사용 가능해 생산성 높음
  4. 객체의 생성/접근

  5. 생성자

  6. 객체의 치환

  7. 객체 배열

  8. 메소드