객체와 객체 지향 프로그래밍
객체(Object)
- 의사나 행위가 미치는 대상( 사전적 의미)
- 구체적, 추상적 데이터의 단위( 학생, 회원, 생산, 주문, 배송)
객체 지향 프로그램과 절차 지향 프로그래밍
- 아침에 일어나 학교가는 과정 예
- 절차 지향 프로그래밍(대표 적인 예: C)
- 시간이나 사건의 흐름에 따른 프로그래밍
- 일어난다 -> 씻는다 -> 밥을 먹는다 -> 버스를 탄다 -> 요금을 지불한다 -> 학교에 도착
- 객체 지향 프로그래밍

예) C++,C#,Python,JavaScript등등
객체 지향 프로그래밍은 어떻게 구현?
- 객체를 정의
- 각 객체 제공하는 기능들을 구현
- 각 개체가 제공하는 기능들 간의 소통(메세지 전달)을 통하여 객체간의 협력을 구현
생활 속에서 객체를 찾아 클래스로 구현해 보기
객체 찾기
- 온라인 쇼핑몰에 회원 로그인을 하고 여러 판매자가 판매하고 있는 제품 중 하나를 골라 주문을 함
- 아침에 회사에 가는 길에 별다방 커피숍을 들려 아이스 카페라떼를 주문 함
- 성적 확인을 위해 학사 관리 시스템에 로그인 하여 수강 한 과목들의 성적을 확인
클래스는 객체의 청사진(blueprint)입니다.
어떤 클래스를 만든다? 해당 객체를 추상화해서 코딩을 하는 것이다.
- 객체의 속성은 클래스의 멤버변수(member variable)로 선언 함
public class Student {
int studentNumber;
String studentName;
int majorCode;
String majorName;
int grade;
}
public class Order {
int orderId;
String buyerId;
String sellerId;
int productId;
String orderDate;
}
public class UserInfo {
String userId;
String userPassWord;
String userName;
String userAddress;
int phoneNumber;
}
객체 지향 프로그램을 할 때는
- 객체를 정의
- 각 객체의 속성을 멤버 변수로 역할을 메서드로 구현
- 각 개체간의 협력을 구현
클래스 코딩하기
- 클래스는 대문자로 시작하는것이 좋음
- java 파일 하나에 클래스는 여러 개가 있을 수 있지만, public 클래스는 하나이고, public 클래스와 .java 파일의 이름은 동일함
- camel notation 방식으로 명명
함수와 메서드
함수란(function)
- 하나의 기능을 수행하는 일련의 코드
- 구현된(정의된)함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환됨
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있다.
함수 정의하기
함수는 이름, 매개 변수, 반환 값 ,함수 몸체(body)로 구성

함수 호출과 스택 메모리
- 스택: 함수가 호출될 때 지역 변수들이 사용하는 메모리
- 함수의 수행이 끝나면 자동으로 반환되는 메모리

메서드(method)
-
객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
함수와 메서드의 차이
함수는 어디 속해있는거 X 단독 모듈,
메서드는 클래스안에 있고 클래스내 전역변수를 이용해서 처리를한다.
-
멤버 함수 (member function)이라고도 함
-
메서드를 구현함으로써 객체의 기능이 구현 됨
-
메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
-
ex) getStudentName()
인스턴스 생성과 힙메모리(heap memory)
인스턴스(Instance)
- 클래스는 객체의 속성을 정의하고, 기능을 구현하여 만들어 놓은 코드상태
- 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
- new 키워드를 이용해 인스턴스 생성
힙 메모리
- 생성된 인스턴스는 동적 메모리(heap memory)에 할당됨
- c나 c++ 언어에서는 사용한 동적 메모리를 프로그래머가 해체 시켜야함
- 자바에서 Gabage Collector가 주기 적으로 사용하지 않는 메모리를 수거
- 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각가 다른 메모리 주소를 가지게됨
용어 정리
객체: 객체 지향 프로그램의 대상, 생성된 인스턴스
클래스: 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스 : new 키워드를 사용하여 클래스를 메모리에 생성한 상태
멤버 변수: 클래스의 속성, 특성
메서드: 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
참조 값: 생성된 인스턴스의 메모리 주소 값