ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 class, instance, method 개념 및 사용예제
    Java & Spring 2023. 12. 1. 16:40

    클래스(Class)란?

     

    • 자바에서 클래스란 객체를 정의하는 '틀' 또는 '설계도'와 같은 의미
    • 클래스는 표현하고자 하는 대상의 '공통속성'을 한 곳에 정의 해놓는 것
    • 클래스는 '객체의 속성을 정의해 놓은 것'이며 자바에서는 이런한 설계도(틀)인 클래스를 가지고 여러 객체를 생성하며 사용
    • 클래스 내부의 정보를 '멤버변수(instance)' 

    ex)

    class Apple { //설계도(클래스)
    String name; //멤버변수(인스턴스) '속성'
    int price; //멤버변수(인스턴스) '속성'
    }

    인스턴스(instance)란?

     

    • 어떠한 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고함
    • 인스턴스란 메모리에 할당된 객체를 의미
    • 자바에서는 하나의 클래스로부터 여러 개의 인스턴스를 생성할 수 있음
    • 인스턴스의 멤버변수에 접근할 때에는 [생성된 인스턴스. 멤버변수]의 형식을 사용하면 됨

    ex)

    class Phone {	//클래스 선언
    String model;	//멤버변수
    int price;	//멤버변수
    }
    
    public class Main {
        public static void main(String[] args) {
            Phone iphone = new Phone();	//인스턴스(iphone)을 생성.
            iphone.model = "iphone15";	//인스턴스의 멤버변수
            iphone.price = 1000000;
            
            Phone galaxy = new Phone();
            galaxy.model = "z flip 5";
            galaxy.price = 1500000;
            
            System.out.println(iphone.model + "을" + iphone.price + "원에 샀다");
            System.out.println(galaxy.model + "을" + galaxy.price + "원에 샀다");
            
        	}//main
        }//class

    Phone라는 클래스에는 모델, 금액에 대한 정보가 있습니다.

    이를 활용하여 model, price라는 같은 속성을 가진 galaxy, iphone으로 각기 다른 인스턴스를 만들었습니다.

    다른 예를 들어보면)

    • iphone : Phone(틀)에 의해 생산된 핸드폰
    • galaxy : Phone(틀)에 의해 생산된 핸드폰
    • 서로 다른 핸드폰(인스턴스)이지만, 모두 같은 속성(위 예시에서는 model , price)을 가지게 됩니다.
    • 즉, '핸드폰'이지만 핸드폰의 모델이나 금액은 전부 다른 것입니다.

    메서드(method)란?

    • 특정 작업을 수행하기 위한 명령문의 집합

    메서드의 사용목적

    • 재사용성이 뛰어나다
    • 중복된 코드를 제거
    • 유지보수 용이

    반환값이 없는 메서드 정의 ex)

    class Fruits {
    String name;	//과일이름
    int count;	//개수
    int price;	//금액
    
    public void bucket(int count, int price) {	//메소드 선언!
    System.out.println(name + count + "개를 개당 " + price + "원에 구매합니다");
    }
    • 위 예시에서는 bucket() 메서드를 정의하고 있습니다.
    • 이 메서드는 public '접근제어자'를 사용하여 선언되었습니다.(여기서는 접근제어자의 설명을 다루지 않습니다)
    • 반환 타입에는 어떠한 값도 반환하지 않는다는 의미를 가진 void를 명시합니다.(return 이 없다)
    • 그다음 메서드의 이름(bucket)을 명시하고, 매개변수로 String형 변수인 name과 int형 변수인 count , price를 전달받습니다.

    메서드 호출 예시 ex)

    class Fruits {
        String name;
        int count;
        int price;
    
        public void bucket(String name, int count, int price) {    //반환타입이 없는 메소드 선언!
            System.out.println(name + count + "개를 개당 " + price + "원에 구매합니다");    //구현!
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Fruits Orange = new Fruits();	//객체(Orange) 를 생성.
            Orange.bucket("딸기", 5, 3000);	//생성된 객체의 bucket()메소드를 호출!
        }//main
    }
    
    딸기 5개를 개당 3000원에 구매합니다.

     

    반환타입이 있는 메서드 정의 예시 ex)

    class Calculation {	//계산이라는 이름의 클래스 선언.
        int add(int x, int y) {	//반환타입이 int 인 메소드 선언
            int result = x + y;
            return result;	//반환되어지는 변수인 result 와 메소드의 반환타입은 일치하여야 한다.
        } //덧셈의 기능을 할 메소드 선언
    
        int subtract(int x, int y) {	//반환타입이 int 인 메소드 선언
            int result = x - y;
            return result;
        } //뺄셈의 기능을 할 메소드 선언
    }

     

    메서드 호출 예시 ex)

    class Calculation {
        int add(int x, int y) {
            int result = x + y;
            return result;
        }
    
        int subtract(int x, int y) {
            int result = x - y;
            return result;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Calculation cal = new Calculation();
            int addCal = calculation.add(10, 90);
            int subCal = calculation.subtract(80, 70);
    
            System.out.println("두 개를 더한 값은 " + addCal);
            System.out.println("두 개를 뺀 값은 " + subCal);
        }//main
    }//class
    • add 메서드와 subtract 메서드 모두 x와 y변수가 중복사용 되었습니다.
    • 하지만, 메서드 내의 변수는 지역변수로써 메서드 내부에서만 사용할 수 있는 변수입니다.
    • 즉, 서로 다른 메서드라면 같은 이름의 지역변수를 선언하여 사용해도 상관없습니다.

    메서드를 작성할 때는 되도록 하나의 메서드가 하나의 기능만을 수행하도록 하는 것이 좋습니다.

     

    자바에서는 하나의 클래스에 같은 이름의 메서드를 둘 이상 정의할 수 없습니다.

    하지만 메서드 오버로딩(overloading)을 이용하면, 같은 이름의 메서드를 중복하여 정의할 수 있습니다.

    메서드 오버로딩이란 매개변수의 개수나 타입을 다르게 하여 같은 이름의 또 다른 메서드를 작성하는 것입니다.

     

    메서드 오버로딩은 다른 포스팅에서 다룰 수 있도록 하겠습니다.

    'Java & Spring' 카테고리의 다른 글

    자바 클래스  (0) 2024.06.11
    JVM(Java Virthal Machine)  (0) 2023.12.28
    오버로딩 (Overloading) , 오버라이딩 (Overriding) 차이점  (0) 2023.12.26
    자바(java) - 상속(inheritance) / extends  (1) 2023.12.08
    자바(java) 생성자  (0) 2023.12.04
Designed by Tistory.