서론
C로 언어를 입문하고 나서 자바를 배울 때 객체, 인스턴스, 메소드 용어가 나오면서 혼동 되었다.
나중에 혼동되어도 개념을 빨리 잡기 위해 글을 정리하려고 한다.
짧은 글이지만 잘못된 글이 있으면 알려주시기 바랍니다. (어쩌피 볼사람도 없겠지만)
클래스
"객체를 만들기 위한 설계도 또는 틀" 이라고 생각하면 되겠다.
예를들어 겨울철에 팥, 바닐라, 초코 붕어빵을 만든다고 하자.
밀가루와 팥 또는 바닐라, 초코 등 재료가 각기 다른 것으로 만들겠지만 붕어빵이라는 객체를 만들기 위해서 붕어빵 틀이 있어야 하고 붕어빵 틀은 클래스라 할 수 있다.
클래스는 객체를 생성하는데 사용된다.
클래스는 메소드(함수) 와 변수 가 포함되어 있다.
객체
클래스로 선언된 변수, 실세계에 존재하는 것 으로 정의할 수 있다.
또는 "소프트웨어 세계에 구현할 대상" 이다.
위에서 예로든 붕어빵 틀에서 찍어 나온 붕어빵을 객체라고 생각하면 된다.
초코 붕어빵, 팥 붕어빵, 바닐라 붕어빵 등을 객체라고 이해하자.
본인은 처음 자바 수업에서 객체지향이라는 개념을 배우면서 클래스와 객체를 붕어빵 틀 과 붕어빵의 관계로 배웠다.
그러나 이는 클래스와 객체의 관계를 설명하기 뭔가 애매하다...
아래에 클래스와 객체에 대한 관계에 고찰한 블로거의 내용이 있다. 참고하면 좋을 듯 하다.
https://devheat.tistory.com/14
인스턴스
"소프트웨어에 구현된 실체" 를 인스턴스 라고 한다.
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 한다.
굳이 표현하자면
(객체와 인스턴스와 혼용되어 개념이 사용되는 것 같은데 이 둘의 차이점이 아직도 이해가 가지 않는다...)
객체는 콘셉 즉, 클래스의 의한 생성된 concept 이며,
인스턴스는 객체를 소프트웨어 세계에 구체적으로 실체화 한 것 이라고 이해하면 되겠다.
인스턴스는 객체에 포함된다고 볼 수 있다.
공부하는 입장에서 객체와 인스턴스의 개념은 혼용되는 것 같다..
아래의 블로거 분께서 이러한 개념을 구체적으로 고찰한 내용이 있다. 참고하면 좋겠다.
https://cerulean85.tistory.com/149
메소드
다른언어에서는 함수 라는 것으로 불리겠지만, 자바에서는 클래스 안에서 모든 것이 선언되고 동작하므로 함수 라는 용어는 사용되지 않는다.
자바에서 클래스 내의 함수를 메소드라 정의한다.
메소드를 사용하는 이유는 중복되는 코드의 반복을 피하고 유지보수를 쉽게하며 생산성 증대 목적이 있다.
아래 예제처럼 덧셈 프로그램을 여러번 수행하고 싶을 때가 있다.
SumClass.java
public class SumClass {
public int sum(int a, int b) {
return a+b;
}
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = 3;
int d = 4;
SumClass mySum = new SumClass();
int result1 = mySum.sum(a, b);
int result2 = mySum.sum(c, d);
System.out.println(result1);
System.out.println(result2);
}
}
a+b 계산식을 두 번 사용할 수 있겠지만,
만약 10개, 100개, 수 만개의 덧셈을 계산한다는 코드를 작성한다면 저 덧셈 문장을 전부 반복해야 할 것이다...
또는 덧셈이 아닌 뺄셈, 곱셈, 나눗셈으로 기능을 변경하고자 한다면? 모든 문장을 다 바꿔야 할 것이다.
이처럼 코드의 중복을 줄여주고 유지 보수성을 향상시킨다.
메소드에는 4가지 종류가 있다.
- 입력과 출력이 모두 있는 메소드
- 입력과 출력이 모두 없는 메소드
- 입력은 없고 출력은 있는 메소드
- 입력은 있고 출력은 없는 메소드
이에 대해 예제를 붙여 설명하면 내용이 길어지므로 자세한 내용은 아래 오픈 사이트 참고하자.
'Language > Java' 카테고리의 다른 글
[Java] 익명 클래스, 익명 이너 클래스 (0) | 2022.04.03 |
---|---|
[Java] Interface(인터페이스) VS Abstract Class(추상 클래스) 차이점, 정리 (0) | 2022.04.03 |
[Java] 업캐스팅, 다운캐스팅 (0) | 2022.04.02 |
[Java] 메소드 오버라이딩 / 메소드 오버로딩 (0) | 2021.07.15 |
[Java] 상속(Inheritance) (0) | 2021.07.14 |