현실 세계의 유무형의 모든 것
명사적인 특징 : 이름, 전공, 나이 . . .
동사적인 특징 : 공부를 한다 . . .
객체의 속성
클래스의 멤버 변수(member variable)로 선언
객체 지향 프로그래밍
객체 정의 → 각 객체의 속성을 멤버 변수로 역할을 메서드로 구현 → 객체간 협력구현
객체 대한 소스
현실 세계의 객체 → 컴퓨터 메모리에 넣기 위한 소스코드 형태
객체의 명사적 특징 → 멤버변수
객체의 동사적 특징 → 메서드
대문자로 시작
public
클래스는 하나public
클래스와 .java
파일의 이름은 동일함❗ 목적과 관점에따라 클래스 구성요소는 언제든지 달라질 수 있다 ❗
하나의 기능을 수행하는 일련의 코드
함수의 이름 / 매개 변수 / 반환 값 / 함수 몸체(body)
int add(매개변수) { 기능 코드 . . . return 타입 }
⇒ int는 함수의 반환타입
만약, 반환값과 매개변수 없다면? ⇒ void add( )
객체가 제공하는 기능
= 멤버 함수 (member function)
메서드를 구현함으로써 객체의 기능이 구현 됨
객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수
클래스 마지막에 선언된 것
메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는것이 좋음
예) getStudentName()
Int sum(int x, int y) { // 2개의 정수를 매개변수로 받아오는 sum 메소드
Return x +y;
}
메서드안에 선언된 로컬변수
메소드가 기능 수행에 필요한 데이터를 받아들이는 것 = 매개변수
멤버변수만으로 기능을 처리 가능하면?
매개변수를 선언하지 안함
로컬 변수에 해당
⇒ 메소드가 종료되는 순간 삭제 됨 ❗ 메모리에서 삭제 ❗
매개변수 개수는 적을수록 좋음
→ 회사마다 3개/5개 이내 규칙이 있음
// 매개변수O 반환값O
public static int addNum(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
// 매개변수O 반환값X
public static void sayHello(String greeting) {
System.out.println(greeting);
}
// 매개변수X 반환값O
public static int calcSum() {
int sum = 0;
int i;
for(i = 0; i<=100; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
int n1 = 10;
int n2 = 20;
int total = addNum(n1, n2); // 반환 값 있는 메서드 사용
System.out.println(total);
sayHello("안녕하세요"); // 반환 값 없는 메서드 사용
total = calcSum(); // 반환 값 있는 메서드 사용
System.out.println(total);
}
출력결과
30
안녕하세요
5050
new Student()
할 때메모리상의 객체, 개발자의 객체
모두 인스턴스
= 현실 세계에 존재하는 객체
= 클래스로 컴퓨터 메모리에 생성된 객체
실제 클래스 기반으로 생성된 객체(인스턴스)는 각각 다른 멤버 변수 값을 가짐
ex. 학생의 클래스에서 생성된 각각의 인스턴스는 각각 다른 이름, 학번, 학년등의 값을 가짐
new
키워드 : 인스턴스 생성
C나 C++ 언어에서는 사용한 동적 메모리를 프로그래머가 해제 시켜야 함
ex. free() 나 delete 이용
생성된 인스턴스는 동적 메모리(heap memory) 에 할당
각 인스턴스는 다른 메모리를 가지게 됨 ⇒ 힙(동적메모리)
자바의 Gabage Collector
가 주기적으로 사용하지 않는 메모리를 수거
하나의 클래스로 부터 여러개의 인스턴스가 생성되고, 각각 다른 메모리 주소를 가지게 됨
필요할 때 할당을 받고, 해제할 때 delete로 해제
studentLee → 참조변수
주소값, 참조값, 가상 어드레스(아래 사진) 를 가짐
void
추가 시 메소드로 인식해버림new
와 함께 호출/생성해야 함 ❗new Student();
클래스이름 ([argument_list]) {
[statements]
}
기본적으로 자동 생성
기본 생성자
매개변수를 가질 수 없기 때문에 멤버변수를 기본 값으로 초기화
클래스에 생성자가 하나도 없을 때 기본으로 제공
클래스에 생성자가 하나도 없는 경우?
컴파일러가 생성자 코드를 넣어 줌
ex. public Student(){}
String
→ nullint
→ 0public class Studnet {
// 멤버변수1, 2, 3...;
// 디폴트 생성자
Student() {
}
}
컴파일러가 제공해 주는 기본 생성자 외, 필요에 의해 생성자를 직접 구현 할 수 있음
객체 필수 요소가 필요하다면 디폴트 생성자는 만들지 않음
public class Student {
String name;
int score;
Student() {
System.out.println("---> Student 디폴트 생성자 실행!");
}
void printInfo() {
System.out.println(name + "의 점수는? " + score);
}
}
public static void main(String[] args) {
// Student 객체 생성 및 초기화
Student kim = new Student();
System.out.println("이름: " + kim.name);
System.out.println("점수: " + kim.score);
System.out.println("");
// 원하는 값 넣기
kim.name = "yeppi";
kim.score = 99;
System.out.println("이름: " + kim.name);
System.out.println("점수: " + kim.score);
kim.printInfo();
}
출력결과
---> Student 디폴트 생성자 실행!
이름: null
점수: 0
이름: yeppi
점수: 99
yeppi의 점수는? 99
Student
생성자 : new Studnet()
생성자 하나에 여러개의 인스턴스(studentLee
, studnetKim
) 생성 가능
인스턴스마다 각기 다른 멤버변수(studnetID
, studentName
, address
) 가짐
Student studentLee = new Student();
studentLee.studentID = 00001;
studentLee.studentName = "Lee";
studentLee.address = "서울시 관악구";
studentLee.showStudentInfo();
Student studentKim = new Student();
studentLee.studentID = 00002;
studentKim.studentName = "Kim";
studentKim.address = "대구광역시";
studentKim.showStudentInfo();
System.out.println(studentLee);
System.out.println(studentKim);
출력결과
Lee,서울시 관악구
Kim,대구광역시
ch03.Student@5e91993f
ch03.Student@1c4af82c
객체
👉 객체 지향 프로그램의 대상
👉 생성된 인스턴스클래스
👉 객체를 프로그래밍 하기위해 코드로 정의해 놓은 상태
인스턴스(객체)
👉
new
키워드를 사용하여 클래스를 메모리에 생성한 상태메서드
👉 멤버 변수를 이용하여 클래스의 기능을 구현한 함수
멤버 변수
👉 멤버변수 = 글로별변수 = 전역변수
👉 클래스의 속성, 특성로컬 변수
👉 메소드 안에 선언된 변수
참조 변수
👉 메모리에 생성된 인스턴스를 가리키는 변수(ex. 스택안에 있는 studentLee)
참조 값
👉 생성된 인스턴스의 메모리 주소 값
자바의 기초라고 할 수 있는 개념에 대해 정리해보았는데,
아직 공부하면서 필기해둔 내용 + 실습한 코드들이 아주 많다...
복습하면서 부지런히 더 정리해보자..!