이 글에서는
클래스에 대한 간략한 이해 및 생성자, 오버로딩, 오버라이딩 등에 대해 알아보려고 한다.
클래스... 클래스가 무엇일까?
클래스는 객체지향프로그래밍의 꽃이자 열매같은 것으로써
클래스를 통해 연관있는 객체들을 생성하는 등 여러 것들을 클래스로 묶어서
모듈화 등에 기여할 수 있다.
자바에서는 클래스를 선언하고 그 클래스를 생성자로 써서 클래스에 따른 객체들을 만드는 과정을 끊임없이 하는데
이러한 과정을 이해할 수 있느냐 없느냐가 정보처리기사에서 요구하는 수준인 것 같다.
클래스로는 다양한 객체들을 만들어낼 수 있다.
예를들어 자동차라는 클래스가 있다고 가정해보자.
이 자동차 클래스를 통해 소나타, 모닝, 포터, 람보르기니 등 다양한 객체들을 찍어낼 수 있다.
이 때 클래스를 통해 찍어낸 객체들을 해당 클래스의 인스턴스 라고 한다.
클래스의 구성요소는 필드(field)와 메소드(method)인데
- 필드는 어떤 속성을 표현하는, 말 그대로 단순히 선언된 어떤 변수와 값들을 의미하며,
- 메소드는 어떠한 행위를 하는 명령 집합체라고 할 수 있다.
이때 한 클래스 내에 동일한 메소드명을 정의할 수 없다.
다만, 메서드 오버로딩을 사용하면 한개의 클래스 내에 동일한 메소드명을 정의할 수 있다.
오버로딩이 무엇이냐?
하나의 클래스에 동일한 이름의 메서드를 정의하는 방법인데,
메서드 이름이 같아도 매개변수나 타입형이 다르면 둘은 다른 메서드로써 작용한다.
이를 오버로딩이라고 한다.
그렇다면 생성자(Constructor)는 무엇일까?
http://www.tcpschool.com/java/java_methodConstructor_constructor
위 링크를 참조하면 더 이해가 빠를지도 모르겠다.
일단 내 맘대로 이해한 내용을 써보도록 하겠다.
자. 생성자를 왜 써야할까?
우리는 클래스를 선언할 수 있다.
클래스를 선언했으면 어떻게 클래스를 통해 객체(인스턴스)를 만들 것이냐를 생각해보아야 한다.
인스턴스를 만들기위해 클래스를 만들지 않았던가?
우리는 생성자를 통해 클래스로부터 인스턴스를 만들어낼 수 있다.
아래는 시나공 실기 교재에 나온 코드인데 이를 통해 설명해보도록 하겠다.
class ClassA {
int a = 10;
int funcAdd(int x, int y) {
return x + y + a;
}
}
// ClassA를 선언했다. 관례상 클래스의 첫 글자는 대문자이다.
// 이 클래스는 인스턴스(객체)에게 { 중괄호 안의 내용 }을 상속한다.
// 즉 ClassA를 통해 만들어질 객체는 { 중괄호 안의 내용 }을 사용할 수 있다.
public class Test {
public static void main(String[] args) {
int x = 3, y = 6, r;
ClassA cal = new ClassA();
r = cal.funcAdd(x, y);
System.out.print(r);
}
}
// public class Test 는 프로그램의 실행점인 main()을 품고 있다.
// 이 main 메서드는 int x = 3, y = 6, r; 이라는 변수들을 지역변수로 가지고 있으며,
// ClassA cal = new ClassA(); 로써 ClassA 클래스의 cal 객체가 생성(초기화)되었다.
// new는 객체 생성 예약어이며,
// ClassA() <- 이것이 생성자이다. 즉 cal에는 ClassA(); 클래스가 상속되었다.
실행클래스의 main 메소드에서
cal이라는 ClassA의 객체 변수가
ClassA()라는 생성자에 의해 생성(초기화)되었다.
답 해석
이 cal은 ClassA 클래스를 상속받았으며, 따라서 cal 내부에는 funcAdd라는 메서드가 존재하게 된다.
ClassA는 int a = 10 이라는 필드외에는 정해진 것이 없으나,
main() 안에 x와 y가 각각 3과 6으로 초기화되어있다.
따라서 이들 변수를 가져와 사용할 수 있다.
funcAdd(x, y)는 결국 3 + 6 + 10 이라는 연산을 하게되어
19라는 값을 출력하게 된다.
'했던것들 > 정보처리기사' 카테고리의 다른 글
(개정) 정보처리기사 실기 요약 정리 (0) | 2022.07.31 |
---|---|
정보처리기사/JAVA/클래스(오버로딩, 오버라이딩) (0) | 2022.07.19 |
정보처리기사/JAVA/제어문 (0) | 2022.07.19 |
정보처리기사/JAVA/데이터입출력 (0) | 2022.07.18 |
[요점정리] 2022년 정보처리기사 필기 4과목. 프로그래밍 언어 활용 (0) | 2022.04.21 |