Development/Java

Java 클래스의 구성 (필드/생성자/메소드)

양선규 2023. 10. 15. 22:15
728x90
반응형

클래스는 객체를 만들기 위한 "설계도"와 같다.

클래스라는 설계도를 이용해서 "객체"를 만들 수 있다.

클래스는 필드, 생성자, 메소드로 구성되어 있다.

 

 

Ysk 클래스

 

이것이 "Ysk" 클래스이다.

4행의 int x는 필드이다. 필드는 객체의 데이터를 저장하는 역할을 한다. 또한 반드시 클래스 레벨에서 선언되어야 한다. (생성자, 메소드 등의 실행블록 안에 들어가 있으면 안 된다)

필드는 객체 내부의 생성자, 메소드에서 호출하여 사용할 수 있고, 객체 외부에서도 사용할 수 있다.

 

필드는 일반적인 변수(로컬 변수)와 비슷하고, 그렇게 이해해도 문제는 없지만 분명한 차이가 존재한다.

로컬 변수는 실행블록 내(메소드 내, 생성자 내 등등)에서만 사용이 가능하지만, 필드는 해당 객체의 모든 생성자, 메소드, 그리고 객체 외부에서까지 사용할 수 있는것이 특징이다.

간단하게 객체 내/외부까지의 넓은 영역을 커버할 수 있는 변수나 데이터 정도로 생각하면 되겠다. 

 

 

"객체"는 클래스라는 설계도에 의해 만들어진 결과물이며, 설계도를 통해 다수의 객체를 만들어낼 수 있다.

두루뭉술해서 잘 이해가 안될 수도 있다.

 

 

y1 객체

 

이것이 객체다.

YskExample 클래스의 main 메소드에서, 위에서 보았던 Ysk 클래스(설계도)를 이용해 "y1" 객체를 만들었다.

Ysk 클래스를 통해서 y1 뿐만 아니라 y2, y3, 등등 수많은 객체를 양산할 수 있다.

이렇게 만들어진 객체(객체변수)를 이용해서, 해당 클래스에 작성되어 있던 생성자, 메소드 등을 이용할 수 있는 것이다.

 

저 한줄을 자세히 설명해 보자면,

Ysk : 클래스명

y1 : 객체변수명(자유롭게 지정하면 됨)

new : 객체를 생성할 때 사용하는 키워드

Ysk() : 생성자

 

여기서 "생성자"란, 객체를 만들 때 "초기화를 수행"하는 메소드이다.

 

 

생성자들

 

이 두개의 메소드가 생성자이다.

생성자는 반드시 "클래스명과 동일"해야 하며, 꼭 한개일 필요는 없다.

매개변수는 있어도 되고 없어도 되며, 매개변수를 다르게 하여 여러개의 생성자를 만드는 걸 "생성자 오버로딩" 이라 한다.

 

만약 생성자를 아예 선언하지 않더라도, 자바 소스코드가 컴파일되는 과정에서 자동으로 "매개변수가 없고, 실행 블록이 비어있는" 생성자를 추가한다. 

그래서 만약 생성자를 직접 선언하지 않더라도,

Ysk y1 = new Ysk(); 같은 명령어가 가능해진다.

 

반대로, 사용자가 생성자를 직접 생성했다면? 컴파일되는 과정에서 생성자를 따로 추가하지 않는다.

 

this.x = x; 부분은 생성자 매개변수로 받은 값 x를, 필드 x에 대입하겠다는 것이다.

"this"키워드는 이름이 동일한 필드와 매개변수를 구분하기 위해, "필드"앞에 붙이는 것이다.

 

필드명과 매개변수명을 애초에 다르게 선언하면 되는 것 아닌가? 라고 생각할 수도 있다. 하지만 그렇게 하면 코드의 가독성이 떨어진다.

입력받은 매개변수가 어떻게 사용되는지 한 눈에 빠르게 파악하기 위해서라고 생각하면 되겠다.

 

메소드

 

메소드는 "반환형 + 메소드명(매개변수)" 형식으로 작성된다.

매개변수는 없어도 되고, 반환형도 없어도 된다. 위의 두 메소드는 두개 다 매개변수가 존재하긴 한다.

 

반환형은 short, int, boolean같은 기본 타입 또는 배열같은 참조 타입 등 다양하게 가능하고,

반환형이 없는 경우(리턴값이 없는 경우) 반환형 자리에 "void"를 입력해야 한다.

반대로 반환형이 있는 메소드는, "return" 키워드를 통해 반드시 리턴값을 만들어야 한다.

 

 

마지막으로 이렇게 작성한 클래스 Ysk를 이용해 객체를 생성하고 이용하는 예시를 보여주겠다.

 

 

객체 사용

 

Ysk 클래스로 y1, y2 객체를 만들어, 객체의 기능이 잘 동작하는지 확인하는 코드이다.

y1은 생성자 매개변수를 입력하지 않았고, y2는 입력하여 객체를 만들었다.

 

객체변수 생성 시 입력한 매개변수 형식에 따라서, 그에 맞는 생성자를 자동으로 따라가게 된다.

 

 

실행 결과

 

코드의 실행 결과는 이렇다.

 

정리하자면,

1. "클래스" 라는 설계도를 만든다. 설계도엔 생성자, 메소드, 필드 등이 포함되어 있고 다양한 기능을 가지고 있다.

2.  설계도를 이용하여, "객체"(객체변수)를 만든다.

3. 해당 객체를 이용하여 클래스에 만들어 두었던 기능(생성자, 메소드)을 활용한다.

 

객체지향을 처음 접하면, 이 개념이 굉장히 헷갈릴 수 있다고 생각한다.

이 글이 Java를 시작하는 모두에게 조금이나마 도움이 되었으면 좋겠다.

728x90
반응형