-
자바 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