프로그래밍/자바(java)

[자바/java] 클래스(class) 필드, 생성자, 메소드,오버로딩

Rhinoceros 2020. 4. 11. 13:43

제 기준으로 인텔리제이 라는 개발툴을 사용하여 자를 만들어 보겠습니다.

 

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 결과값을 나타낸다.

클래스의 내용은 내용이 많기 때문에 다음 시간에 이어서 설명하도록 하겠습니다.