728x90
객체와 객체지향 프로그래밍
객체(Object)
- 의사나 행위가 미치는 대상
- 구체적, 추상적 데이터의 단위 ex) 학생, 회원, 주문, 배송
객체 지향 프로그래밍과 절차 지향 프로그래밍
- 절차 지향 프로그래밍
- 시간이나 사건의 흐름에 따른 프로그래밍
- ex) 일어난다 -> 씻는다 -> 밥을 먹는다 -> 학교를 간다
- 객체 지향 프로그래밍
- 학생, 밥, 학교, 행동을 객체로 나누어 프로그래밍
- 객체 지향 프로그램은 어떻게 구현하는가?
- 객체를 정의
- 각 객체가 제공하는 기능들 구현
- 각 객체가 제공하는 기능들 간의 소통(메시지 전달)을 통하여 객체간의 협력 구현
- 객체를 클래스로 구현해보기
public class Student {
int studentNumber; // 학번
String studentName; // 학생이름
String majorName; // 전공과목
int majorCode; // 전공학과코드
int grade; // 학년
}
- 객체 지향 프로그래밍을 할 때는
- 객체의 속성은 클래스의 멤버 변수(member variable)로 선언 한다.
- 클래스는 대문자로 시작하는 것이 좋다. (upper camel case)
- 변수는 소문자로 시작하는 것이 좋다. (lower camel case)
함수와 메서드
함수(function)
- 하나의 기능을 수행하는 일련의 코드
- 구현된(정의된)함수는 호출하여 사용하고 호출된 함수는 기능이 끝나면 제어가 반환된다.
- 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있다.
함수 정의하기
int add(int num1, int num2){ // 매개변수로 2개의 숫자를 받아 더하는 함수
int result;
result = num1 + num2;
return result;
}
함수 호출과 스택 메모리
- 스택 : 함수가 호출될 때 지역 변수들이 사용하는 메모리
- 함수의 수행이 끝나면 자동으로 반환되는 메모리

메서드(Method)
- 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
- 멤버 함수(member function)라고도 함
- 메서드를 구현함으로써 객체의 기능이 구현됨
- 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
ex) getStudentName()
인스턴스 생성과 힙 메모리
인스턴스(instance)
- 클래스는 객체의 속성을 정의하고 기능을 구현하여 만들어 놓은 코드 상태
- 실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가지게 됨
ex) 학생의 이름, 학번, 학년 - new 키워드를 사용하여 인스턴스 생성
Student stdKim = new Student(); // stdKim 인스턴스 생성
Studnet stdLee = new Student(); // stdLee 인스턴스 생성
힙 메모리(heap memory)
- 생성된 인스턴스는 동적 메모리(heap memory)에 할당됨
- C,C++에서는 사용한 동적 메모리를 프로그래머가 직접 해제해야 함 ex) malloc, free
- 자바에서는 Gabage Collector가 주기적으로 사용하지 않는 메모리를 수거함
- 하나의 클래스로 부터 여러개의 인스턴스가 생성되고 각각 다른 메모리 주소를 가지게 됨
- 용어
- 참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
- 참조 값 : 생성된 인스턴스의 메모리 주소 값
생성자
생성자(constructor)란?
- 생성자는 일반 함수처럼 기능을 호출하는 것이 아니고 객체를 생성하기 위해 new 와 함께 호출 됨
- 객체가 생성될 때 변수나 상수를 초기화 하거나 다른 초기화 기능을 수행하는 메서드를 호출 함
- 생성자는 반환 값이 없고, 클래스의 이름과 동일
- 대부분의 생성자는 외부에서 접근 가능하지만, 필요에 의해 private 으로 선언되는 경우도 있음
기본 생성자(default constructor)
- 클래스에는 반드시 적어도 하나 이상의 생성자가 존재해야 함
- 클래스에 생성자를 구현하지 않아도 new 키워드와 함께 생성자를 호출할 수 있음
- 클래스에 생성자가 하나도 없는 경우 컴파일러가 생성자 코드를 넣어 줌
- 매개 변수, 구현부가 없음
생성자 만들기
public class Student {
public int studentNumber;
public String studentName;
public int grade;
public Student(){
// 기본 생성자
}
public Student(int studentNumber, String studentName, int grade) {
this.studentNumber = studentNumber;
this.studentName = studentName;
this.grade = grade;
} // 매개변수 생성자
}
'Java' 카테고리의 다른 글
Java - 상속 (0) | 2022.11.17 |
---|---|
Java - 객체지향 프로그래밍 기초 2 (0) | 2022.11.17 |
Java - 조건문, 반복문 (0) | 2022.11.17 |
Java - 자료형, 연산자 (0) | 2022.11.17 |
Java - 프로그래밍 기초 (0) | 2022.11.17 |
댓글