메소드화
두개의 값을 더하는 중복이 있다. (수많은 로직이 있으면 복잡한 로직이 돼 버림)
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 변수의 데이터 타입은 뭘까?? 사용자 정의 데이터 타입 이라고 하는데 데이터 타입은 그 클래스가 된다.
'공부' 카테고리의 다른 글
접근 제한자 | 지역변수, 전역변수와 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 |