메소드화

 

두개의 값을 더하는 중복이 있다. (수많은 로직이 있으면 복잡한 로직이 돼 버림)

public class DemoApplication {

	public static void main(String[] args) {
		System.out.println(10+20);
		System.out.println(20+30);
	}
}

 

 

두개의 값을 더하는 중복을 제거해보자

그러면 sum 메소드를 만들어서 코드양을 줄이고 문제가 생길때 원인을 찾기도 쉽다

public class DemoApplication {
	public static void sum(int a, int b) {
		System.out.println(a+b);
	}

	public static void main(String[] args) {
		sum(10,20);
	}
}

 

 

이때 평균도 구해야한다면?

avg 메소드도 생성하고 입력값을 변수화 시켜서 더 코드양을 줄일 수 있다.

public class DemoApplication {

	public static void sum(int a, int b) {
		System.out.println(a+b);
	}
	
	public static void avg(int a, int b) {
		System.out.println((a+b)/2);
	}
	
	public static void main(String[] args) {
		int a = 10;
		int b = 10;
		sum(a, b);
		avg(a, b);
		
		a = 20;
		b = 30;
		sum(a, b);
		avg(a, b);
	}
}

 

 

 

객체화

객체 지향은 연관되어있는 변수와 메소드를 하나의 그룹으로 묶어서 그룹화한 것

> 연관된 변수와 메소드

int a = 10;
int b = 10;
sum(a, b);
avg(a, b);

 

 

 

Calculator 클래스를 생성하고 안에 로직들은 변수 a,b / 메소드 sum, avg 기 연관된 로직이다.

Calculator 라는 이름으로 그룹핑을 한 것! 

클래스는 연관되어있는 변수와 메소드의 집합

class Calculator {
	int a, b;
	
	public void setOprands(int left, int right) {
		this.a = a;
		this.b = b;
	}
	
	public void sum() {
		System.out.println(this.a + this.b);
	}
	public void avg() {
		System.out.println((this.a + this.b)/2);
	}
}

public class DemoApplication {

	public static void main(String[] args) {
   	 // 인스턴스 1
        Calculator ca = new Calculator();
        ca.setOprands(10, 20);
        ca.sum();
        ca.avg();
        
        // 인스턴스 2
    	Calculator ca2 = new Calculator();
        ca2.setOprands(20, 30);
        ca2.sum();
        ca2.avg();
	}
}

System.out.println(a + b); 랑 같은 결과값이 나오는데 왜 this를 쓰는지 모르겠다

 

 

 

인스턴스

 

- 클래스 : 설계도
- 인스턴스 : 제품

 

설계도(클래스)로 구체적인 제품(객체)을 만들어야한다 

클래스에는 객체를 생성할 변수와 메서드가 정의되어 있다

그렇게 만들어진 객체를 '인스턴스'라고 하며 클래스로부터 객체를 만드는 과정은 '인스턴스화' 라고 한다

하나의 클래스로부터 여러개의 인스턴스(객체)를 만들 수 있다. (여러 제품들)

 

 

어떻게?

new 연산자를 이용해 클래스로부터 객체들을 생성한다 

class Student{
	
}

public class StudentExe {
	public static void main(String[] args) {
    		// 두 개의 인스턴스 생성
		Student s1 = new Student();
		Student s2 = new Student();
	}
}

 

 

Student s1 = new Student();
Student s2 = new Student();

new Student(); 한 만큼 객체가 메모리에 생성된다. 이러한 객체들을 Student클래스의 '인스턴스'들이다

 

StudentExe.class 가 실행되면 메모리에 변수와 객체가 생성된다.

이렇게 생성된 객체는 메모리 힙 영역에 생성되며 각 다른 객체이다.

 

 

메모리 내에서 객체의 위치를 알 수 있도록 new 연산자는 힙 영역에 객체를 생성하고

객체의 주소를 반환하여 변수에 저장하면 해당 변수가 객체를 참조하게 된다.

 

변수에 인스턴스를 담은 이유는 인스턴스를 제어하기 위해서이다

* 참조란? s1. 하면 클래스안에 있는 메소드들을 불러올 수 있다(객체 호출)

 

ex) s1.avg  가 객체호출

 

이렇게 한 클래스가 여러 인스턴스를 생성한다는 점에서 서로 다른 행동과 값을 하게 된다

이것이 객체 지향이 제공하는 가장 기본적인 재활용성이라고 할 수 있다.

 

 

 

이때 궁금한 점 ca 변수의 데이터 타입은 뭘까?? 사용자 정의 데이터 타입 이라고 하는데 데이터 타입은 그 클래스가 된다.

 

 

 

 

 

 

반응형
LIST

'공부' 카테고리의 다른 글

접근 제한자 | 지역변수, 전역변수와 static  (0) 2023.06.22
생성자  (0) 2023.06.20
메소드  (1) 2023.06.16
[백준] 4단계 | 10807, 10871, 10818, 2562, 5597, 3052, 1546  (0) 2023.03.04
[백준] 3단계 | 반복문 8~12  (0) 2023.02.17

+ Recent posts