Luver Duck 2022. 8. 4. 22:36

객체 지향 프로그래밍 (OOP, Object-Oriented Programming)

실제에 존재하는 사물이나 개념을 객체라고 하며

객체를 프로그래밍 상으로 구현한 것을 인스턴스,

인스턴스를 만들기 위한 설계도를 클래스라고 한다

 

객체 (Object)

소프트웨어로 구현 실제의 대상 (객체는 실제적 존재이며 프로그래밍에서의 어떤 존재가 아님)

- 속성(property) 

- 기능(method)

 

클래스 (Class)

객체를 만들기 위해 객체의 속성(property)와 기능(function)를 사전에 정의해 놓은 것 (객체 생성틀)

- 멤버 필드(member field) : 객체의 속성을 정의해 놓은 것       (멤버 변수(member variable)라고도 한다)

- 메소드(method) : 객체의 기능을 정의해 놓은 것

 

인스턴스 (Instance)

클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다

 

인스턴스의 생성 : 객체를 소프트웨어상에 구현한다

1) 클래스의 생성

마우스라는 객체를 소프트웨어 상에 구현하기 위해서는

마우스의 크기, 색깔, 버튼 수 등의 속성(property)와 좌클릭, 우클릭 등의 기능(function)이 필요하다

- 멤버 필드 : 마우스의 속성인 크기(size), 색깔(color), 버튼 수(button) 정의

- 메소드 : 마우스의 기능인 좌클릭(leftClick)과 우클릭(rightClick) 정의

public class Mouse {
	
	// 멤버 필드
	int size;
	String color;
	int button;
    
	// 메소드
	void leftClick() {
		System.out.println("좌클릭");
	}

	void rightClick() {
		System.out.println("우클릭");
	}
}

 

2) 인스턴스 생성 (인스턴스화)

main 메소드에서 클래스로부터 객체에 대응하는 인스턴스를 생성한다

public class realize;

public static void main(String[] args) {

	Mouse logitec = new Mouse(40, "검정", 8);

}

- 클래스를 이용하여 로지텍(logitec)이라는 이름의 인스턴스를 만들었다

- 로지텍(logitec)의 크기(size)는 40, 색깔(color)은 검정, 버튼수(button)는 8이다

 

- 인스턴스 생성 코드

클래스명 인스턴스명 = new 클래스명(멤버필드1, 멤버필드2, ...);

 

 

day09_oop.basic1 : 객체 지향 프로그래밍

day09_oop.basic2 : 객체 생성 예제 (1)

day09_oop.basic3 : 객체 생성 예제 (2)

 

 

메소드 호출 : 클래스에 정의된 메소드를 호출할 수 있다

1) 클래스 생성

클래스를 만들 때

setting()이라는 이름의 인스턴스의 멤버필드를 설정해주는 메소드와

print()라는 이름의 인스턴스의 정보를 출력해주는 메소드를 미리 정의해놓으면

메인 메소드에서 클래스를 인스턴스화 할 때 클래스의 메소드를 호출함으로써 편하게 인스턴스를 만들 수 있다

public class Mouse {
	
	// 멤버 필드
	int size;
	String color;
	int button;
    
	// 메소드
	void leftClick() {
		System.out.println("좌클릭");
	}

	void rightClick() {
		System.out.println("우클릭");
	}

	// setting 메소드 만들기
	void setting(int size, String color, int button) {
		this.size = size;
		this.color = color;
		this.button = button;
	}

	// print 메소드 만들기
	void print() {
		System.out.println("사이즈 : " + size);
		System.out.println("색상 : " + color);
		System.out.println("버튼 수 : " + button);
	}
}

- this.  생성되는 인스턴스 자기 자신을 지칭하도록 하는 참조변수이다

- setting 메소드의 this.size = size; 는 생성되는 인스턴스의 size 필드에 입력한 값을 대입하라는 의미이다

 

2) 객체 생성

logitec이라는 Mouse 클래스의 인스턴스를 생성한 후 Mouse 클래스에 정의된 setting()과 print()를 호출할 수 있다

public class realize;

public static void main(String[] args) {

	Mouse logitec = new Mouse();

	logitech.setting(40, "검정", 8);

	logitech.print();

}

 

** 클래스에 정의된 메소드를 호출하는 방법

i) 매개변수가 없는 경우 (print()와 같은)

인스턴스명.메소드명();

 

ii) 매개변수가 있는 경우 (setting()과 같은)

인스턴스명.메소드명(매개변수1, 매개변수2, ...);

 

 

day09_oop.method1 : 필드와 메소드

 

 

메소드의 활용 : 메소드 내에서 할 수 있는 것들

 1) 클래스 생성

Student 클래스에서 학생(인스턴스)의 이름(name), 국어성적(korean), 영어성적(english), 수학성적(math)을 정의하고

학생 정보 출력시 이 학생(인스턴스)의 이름(name), 국어성적(korean), 수학성적(math) 뿐만 아니라

총점(sum)과 평균(avg)도 출력

class Student {

	// 멤버 필드
	String name;
	int korean;
	int english;
	int math;

	// 정보를 입력하는 메소드
	void setting(String name, int korean, int english, int math) {
		this.name = name;
		this.korean = korean;
		this.english = english;
		this.math = math;
	}

	// 정보를 출력하는 메소드
	void print() {
		System.out.println("이름 : " + name;);
		System.out.println("국어 성적 : " + korean);
		System.out.println("영어 성적 : " + english);
		System.out.println("수학 성적 : " + math);

		int sum = this.korean + this.english + this.math;
		System.out.println("총점 : " + sum);

		double avg = (double)sum / 3;
		System.out.println("평균 : " + avg);
}

 

- 정보를 출력하는 메소드 내에서 새로운 변수인 sum과 avg를 정의할 수 있다

 

- 메소드 내에서 새로운 변수를 정의하거나(boolean도 가능) 기존에 사용하던 조건문, 반복문 등을 사용할 수 있다

 

 

day09_oop.method2 : 메소드 내 this의 의미

day09_oop.method3 : 메소드 내에서 새로운 변수 정의

day09_oop.method4 : 메소드 오버로딩(Overloading)

day09_oop.method5 : 메소드 오버로딩(Overloading)

day09_oop.method6 : 메소드 오버로딩시 주의사항

day09_oop.method7 : 메소드 과제