: 객체는 현실세계에 존재하는 모든 사물이 될 수 있다.
객체지향 프로그래밍 (OOP, Object Oriented Programming)
객체의 속성과 기능을 코드로 구현한 것.
'객체를 만들어내기 위한 틀' 이라고 생각하면 됨
예) 자동차 클래스 만들기
변수
로 정의 메서드
로 정의class Car{
// 속성(필드) : 멤버 변수(member variable)
String name;
String maker;
int year;
double price;
// 기능 : 메서드(method)
void start() {
System.out.println("출발");
}
void stop() {
System.out.println("멈춤");
}
: 클래스 내부에 선언되어 객체의 속성을 나타내는 변수
: 클래스 내부에서 멤버변수를 사용하여 클래스의 기능을 구현한 것
메서드 정의하기
: 반환형
메소드이름 (매개변수)
{ }
return값이 없는 메소드의 경우 반환형은 void
이다.
: 메서드의 내부 {}
/ 메서드의 매개변수로 ()
/ 생성자의 매개변수로 ()
내부에 선언되는 변수
실제로 사용할 수 있도록 생성된 클래스.
클래스를 이용해서 생성한 객체 = 인스턴스
자료형(클래스형)
변수이름
= new
생성자
;public class Student { // 클래스 정의
// 멤버변수
int studentID;
String studentName;
int grade;
String address;
// 메서드
public String getStudentName() {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
// main함수 : Java Virtual Machine이 프로그램을 시작하기 위해 호출하는 함수.
// 클래스 내부에 만들긴 하지만 클래스의 메서드는 아님
public static void main(String[] args) {
// 객체 생성
Student student1 = new Student();
Student student2 = new Student();
// 클래스를 참조하는 참조변수를 통해 멤버변수와 메서드 호출
student1.studentName = "김철수";
student2.studentName = "홍길동";
System.out.println(student1.getStudentName()); // 김철수 출력
}
}
객체를 생성할 때 사용하는 일종의 함수.
public class Student {
// 멤버변수
int studentID;
String studentName;
int grade;
String address;
// 기본 생성자
Student(){};
// 직접 구현한 생성자 (멤버변수 studentID의 값을 초기화)
Student(int id){
studentID = id;
}
// 메서드
public String getStudentName() {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
public static void main(String[] args) {
// 클래스 생성 - 기본생성자 사용
Student student1 = new Student();
// 클래스 생성 - 직접 구현한 생성자 사용
Student student2 = new Student(123);
System.out.println(student2.studentID); // 123 호출
}
}
생성자 오버로드를 이해하기 위한 개념
💡 메소드 오버로드 (method overload)
- 같은 클래스 안에 여러 메소드 존재
- 메소드들의 이름은 다 같음 (반환 타입/접근제한자는 상관없음)
- 메소드 매개변수의 갯수나 타입이 다름 (갯수와 타입이 둘다 같으면 안됨)
public class Test { static void testMethod(int i) { System.out.println("int call"); } static void testMethod(float f) { System.out.println("float call"); } public static void main(String[] args) { int a = 1; float b = 1.1; testMethod(a); // "int call" testMethod(b); // "float call" }
- 매개변수에 따라 필요한 메소드를 골라서 사용 가능하다
앞서 만든 학생 클래스에 '수강하는 과목'이라는 변수를 추가하고 싶다.
과목들에 대한 속성을 각각 변수로 추가하면 비효율적이니, Subject라는 클래스를 만들어서 Subject형 변수
를 선언해보자.
<Subject.java>
// Subject 클래스 만들기
public class Subject {
String subjectName;
int subjectScore;
}
<Student.java>
public class Student {
int studentID;
String studentName;
// Subject형 변수 선언
Subject subject;
void setSubject(String name, int score) {
this.subject = new Subject(); // Subject 객체를 생성해야 사용할 수 있음
subject.subjectName = name;
subject.subjectScore = score;
}
public static void main(String[] args) {
Student student1 = new Student();
student1.setSubject("math", 90);
System.out.println(student1.subject.subjectName); // math 출력
}
}
String
은 java.lang 패키지 내에 있는 클래스이다.