[자바/java] 클래스(class) 필드, 생성자, 메소드,오버로딩
제 기준으로 인텔리제이 라는 개발툴을 사용하여 자를 만들어 보겠습니다.
java 파일을 만들게 되면 class 라고 시작하고 무언가 만들어졌다. 이게 클래스 이다.
클래스에는 여러가지 데이터를 저장할 수 있게도 되고 어떤 한 값을 나타내기 위한 로직도 만들 수 있다.
클래스의 구성 요소는 크게 필드(Field), 생성자(Constructor), 메소드(Method) 가 있다.
필드
필드는 객체의 고유 데이터, 상태 정보 등을 저장하는 곳이며, 변수와 비슷하게 사용 된다.
※ 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸된다.
하지만 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재한다.
생성자
생성자는 new 연산자로 호출괴는 특별한 중괄호 {} 블록이다. 역활은 객체 생성 시 초기화를 담당한다.
필드를 초기화 하거나, 메소드를 호출해서 객체를 사용할 준비를 하고 클래스 이름과 같으며 리턴 타입이 없다.
메소드
메소드는 객체의 동작에 해당하는 중괄호 {} 블록을 말한다.
메소드를 호출하면 중괄호 블록에 있는 모든 코드들이 일괄적으로 실행된다.
외부로 부터 매개 변수도 받을 수 있고 실행 후, 어떤 값을 리턴 할 수 있다.
다른 클래스에서 필드를 어떻게 쓸까?
new 연산자를 사용하여 힙(heap) 영역의 메모리에 객체를 생성후, 객체의 주소를 리턴하도록 한 후,
필요한 값을 .필드네임 으로 불러 낼 수 있다.
생성자는 new 연산자를 사용하여 생성할때, 안에 값을 넣어 초기값을 넣을 수 있다.
넣게 되면 blog_name 에 "기억보단 기록을" 이 넣어주고
title 에는 https://jojoldu.tistory.com 을 넣어준다.
참고로 https://jojoldu.tistory.com
기억보단 기록을
Java 백엔드, AWS 기술을 익히고 공유합니다.
jojoldu.tistory.com
기억보단 기록을
Java 백엔드, AWS 기술을 익히고 공유합니다.
jojoldu.tistory.com
는 제가 자주 찾는 개발 블로그 입니다. 스프링, 스프링 부트, 스프링 배치 같은 백엔드 기술을 많이 기록도 있고 다른 개발 커뮤니티에서도
많이 얘기 나오는 블로그입니다~
본론으로 넘어가서
생성자는 어려개를 생성할 수 도 있습니다. 그때마다 매개변수에 따라 다른 실행 결과를 나타낼 수 있다.
class Scratch {
public static void main(String[] args) {
Blog blog = new Blog("기억보단 기록을", "https://jojoldu.tistory.com");
System.out.println(blog.blog_name);
System.out.println(blog.title);
System.out.println("==============");
Blog blog1 = new Blog("생성자 오버로딩 연습입니다.");
System.out.println(blog1.blog_name);
System.out.println("==============");
Blog blog2 = new Blog();
System.out.println(blog2.blog_name);
System.out.println(blog2.title);
}
}
class Blog {
String blog_name = "개발에만 집중";
String title = "java 클래스";
Blog(String blog_name, String title) {
this.blog_name = blog_name;
this.title = title;
}
Blog(String blog_name) {
this.blog_name = blog_name;
}
Blog() {
this.blog_name = "매개변수 없이 넘는 블로그 name";
this.title = "매개변수 없이 title 넣기";
}
}
이렇게 생성자를 생성해 봤습니다.
새로 new를 사용하여 클래스를 사용할때 매개변수 2개 일때와 매개변수 1개 일때, 매개변수가 없을 때 서로 다른 값을 가지고 있습니다.
이처럼 매개변수에 따라 다른 결과 같이 나오는걸 오버로딩(Overloading) 이라고 합니다.
이번에는 메소드를 사용하는 방법에 대해 알아보겠습니다.
class Scratch {
public static void main(String[] args) {
Blog blog = new Blog("기억보단 기록을", "https://jojoldu.tistory.com");
System.out.println(blog.blog_name);
System.out.println(blog.title);
System.out.println("==============");
Blog blog1 = new Blog("생성자 오버로딩 연습입니다.");
System.out.println(blog1.blog_name);
System.out.println("==============");
Blog blog2 = new Blog();
System.out.println(blog2.blog_name);
System.out.println(blog2.title);
System.out.println("===============");
System.out.println(blog2.sum1(12, 30));
}
}
class Blog {
String blog_name = "개발에만 집중";
String title = "java 클래스";
int sum1(int a, int b) { // 메소드
return a + b;
}
Blog(String blog_name, String title) {
this.blog_name = blog_name;
this.title = title;
}
Blog(String blog_name) {
this.blog_name = blog_name;
}
Blog() {
this.blog_name = "매개변수 없이 넘는 블로그 name";
this.title = "매개변수 없이 title 넣기";
}
}
Class 안에 메소드를 쓰는 법도 필드처럼 .메소드이름 처럼 사용하고 매개변수가 필요할 경우 .메소드이름(매개변수) 처럼 사용하면 메소드를 사용할수 있다.
만약에 메소드 안에 매개 변수가 몇개 인지 모르는 지 모를 때는 어떻게 써야 할까?
class Scratch {
public static void main(String[] args) {
Blog blog2 = new Blog();
System.out.println(blog2.sum2(1, 2, 3, 4, 5, 6));
}
}
class Blog {
String blog_name = "개발에만 집중";
String title = "java 클래스";
int sum2(int ... values) {
int sum = 0;
for(int i = 0 ; i < values.length ; i++) {
sum += i;
}
return sum;
}
Blog() {
this.blog_name = "매개변수 없이 넘는 블로그 name";
this.title = "매개변수 없이 title 넣기";
}
}
int ... values 를 사용하면 매개변수가 int 타입만 맞다면 몇개를 쓰든 사용할 수 있다.
그 결과 1 + 2 + 3 + 4 + 5 + 6 를 더하면 15 결과값을 나타낸다.
클래스의 내용은 내용이 많기 때문에 다음 시간에 이어서 설명하도록 하겠습니다.