반갑습니다 자바의 기본이 되는 클래스와 인스턴스에 대해서 알아보도록 하죠
먼저 클래스 입니다
저번에도 제가 언급 했던것 처럼 클래스란 틀이라고 생각하시면 됩니다
우리가 붕어빵을 만드려면 붕어빵 틀이 있잖아요?ㅎㅎ
근데 그 틀은 변하지 않아요 구워주면 그대로 같은 형태의 붕어빵이 나옵니다
하지만 그 안의 내용물은 바꿀수가 있죠?
팥을 넣으면 그냥 일반적인 붕어빵이고 슈크림을 넣으면 슈크림 붕어빵
뭐 다른 소스를 넣으면 그 소스에 대한 붕어빵이겠죠?
이처럼 클래스란 인스턴스를 생성하기 위한 틀이라고 생각하시면 되겠습니다
인스턴스는 무엇이냐 그 내용물이죠 ㅎㅎ 실제 사용하는 건 인스턴스입니다
자 소스를 보며 확인 해봅시다 일단 왜 클래스를 사용하느냐 알아봅시다
package hwTest;
public class Calculator {
public static void main(String[] args){
//계산 작업을 합니다
int i = 0;
int j = 2;
//더하기 출력
System.out.println(i + j);
//빼기 출력
System.out.println(i - j);
//곱하기 출력
System.out.println(i * j);
//나누기 출력
System.out.println(i / j);
}
}
자 간단한 연산을 합니다 음 소스가 지저분하죠
저번에도 말했듯 메인은 간단 명료 해야합니다
그리고 아셔야할것이 값이 바뀐다면 저 소스를 항상 바꿔야겠죠
아무 값이나 집어넣고 연산이 필요한 것만 하고 싶다라고 한다면
클래스를 생성하고 그 클래스에 필요한 메서드를 생성 해줍니다
package hwTest;
public class Calculator {
public static void main(String[] args) {
CalculatorMain ca = new CalculatorMain();
ca.setCalculatorData(3, 2);
int addData = ca.add();
System.out.println(addData);
ca.calPrint();
}
}
class CalculatorMain {
static int i = 0;
static int j = 0;
public void setCalculatorData(int i, int j){
this.i = i;
this.j = j;
}
public static int add(){
return i + j;
}
public static void calPrint(){
System.out.println("i의 값은" + i);
System.out.println("j의 값은" + j);
}
}
자 우리는 메인부터 한번 살펴봅시다 메인 메서드에서 하는 동작을 하나하나 보면 이해가 쉬울 겁니다
우선은 CalculatorMain 클래스를 인스턴스화 합니다 new 키워드를 통해서 말이죠
일단은 생성했는데 비어있겠죠? 왜냐하면 값을 넣어주지 않았기 때문이죠
더하기 동작을 시키고 그 값을 프린트해봐야 하는데 값은 없는 상태입니다
이런 방식은 어떠한 값이 들어가도 같은 연산을 하게 하기 위함이기도 한 것이죠
인스턴스를 생성하면 그 클래스 안에 있는 메서드들을 사용할 수 있게 됩니다
인스턴스 생성하지 않아도 사용하려면 static를 선언해줘야 합니다 ㅎㅎ
자 생성 후엔 set 하는 메서드를 이용해서 인스턴스 변수에 값을 삽입합니다
3과 2를 입력받아서 this 키워드로 인스턴스 변수에 값이 들어가는 겁니다 일부러
헷갈리게 해 놓은 부분은 구분하기 위해서입니다 ㅎㅎ 헷갈리지 마세요 받아서 대입하는
부분은 확실히 서로 다른 변수입니다
그리곤 우리가 하고 싶던 add 메서드를 이용해서 값을 연산합니다
근데 add 메서드를 보시면 return을 해주죠?
두 값을 더한 것을 바로 리턴합니다 그러면 우리는 받아줘야 합니다 물론 타입도 같아야 하죠
int 형 변수 addData를 받아줍니다 이제 우리가 원하는 값을 보내서 연산한 값을 제대로 받았군요
그다음으로 한번 출력해봅시다 정상적인 값이 나오는지 항상 확인해야 합니다
다행히 5가 출력됩니다 그리고 우리가 보낸 값이 제대로 들어갔는지 확인도 해봅시다
i의 값은 3
j의 값은 2
정상적이네요 ㅎㅎ
이처럼 우리는 프로그램을 작성하고 내가 보낸 값이 정상적인지 확인하는 습관을 들입시다
되겠지 잘될걸?이라는 안일한 생각으로 코드를 짜면 내가 미처 생각지 못한 부분에서 실수가
나오게 됩니다 그래서 연차가 오래된 개발자들을 무시할 수 없는 것이 이런 실수들을 이미 다 겪어봐서
다시 그런 실수를 하는 것이 적습니다 그래서 개발 속도가 확연히 빠른 것이지요
미리 다 생각을 하고 있습니다 이런 코드는 이렇게 짜야 오류가 나지 않고 안전하다 라는 게
자연스럽게 박혀있는 겁니다
저도 그렇게 되길 원하는 중이고요 ㅎㅎ
그리고 오늘 알아본 클래스와 그 클래스를 인스턴스화 해서 사용하는 것을 배워봤습니다
그런데 왜 이렇게 하는 것일까요?
이건 코드 재사용성을 높이기 위해서입니다
나만 쓰는 코드는 그냥 나만 쓰면 됩니다 그렇지만 이것도 어느 정도 틀린 말인 게 뭐냐면
내가 연산을 이 소스코드 하나에서만 쓰는 게 아닙니다
웹으로 예를 들어보면 A페이지에서 연산하는 게 필요했습니다 그래서 만들었죠
내 생각으론 여기 말고는 연산처리할 곳은 없습니다
근대 B페이지에서 예상치 못하게 연산이 필요합니다
아 ~ 또 만들어야 하나 거지 같다 후 그냥 복사 붙여 넣기 해야지 ~
아주 위험한 발상이고 자바를 하는 이유가 없습니다
이미 만들어 놓은 클래스를 import 해서 다른 소스코드에서 가져와 사용할 수 있습니다
동일한 기능을 말이죠
굳이 만들 필요가 없습니다 이미 있으니까요 ㅎㅎ
이러한 이유로 클래스가 유용한 것입니다 그리고 클래스는 인스턴스화 하기 전엔 사용할 수 없고요
마지막으로 가장 중요한 건 클래스를 생성하고 변수에다가 담았을 때
CalculatorMain ca = new CalculatorMain();
이 ca 변수에는 인스턴스 전체가 들어가 있는 것이 아닙니다
절대적으로 개념을 확인하고 지나가야 합니다
저 ca 변수에는 뭐가 들어있는지 한번 프린트해봅시다
hwTest.CalculatorMain@15 db9742 뭔지 모를 데이터가 하나 나오네요
저걸 분석할 수 있는 능력까지는 필요 없습니다
저건 주소예요 메모리 주소 말이죠
메모리 하는 건 우리가 생각하는 램이 맞습니다
인스턴스화 하면 메모리 어딘가에 인스턴스가 딱! 올라갑니다
그게 어디 있는지 주소를 알려주는 거예요 ㅎㅎ 그것만 딱 기억하고 넘어가도록 합시다