메소드 예제

[Java] 메소드 예제, 가비지 컬렉션, 싱글톤 패턴
Dec 22, 2023
메소드 예제

피자 크기 비교하기

피자 객체 2개를 받아서 더 큰 피자 객체를 반환하는 메소드 Pizza whosLargest(Pizza p1, Pizza p2)를 작성하고 테스트
package ex05; class Pizza{ int radius; Pizza(int radius){ // 생성자 this.radius = radius; } Pizza whosLargest(Pizza p1, Pizza p2){ // 큰피자 반환 메소드 if(p1.radius > p2.radius){ return p1; }else{ return p2; } } } public class PizzaTest { public static void main(String[] args) { Pizza obj1 = new Pizza(14); // 객체 생성 Pizza obj2 = new Pizza(18); Pizza largest = obj1.whosLargest(obj1, obj2); System.out.println(largest.radius + "인치 피자가 더 큼."); } }
notion image
 

배열을 받는 메소드 작성하기

배열을 받아서 최소값을 계산하여 반환하는 메소드 minArray(double[] list)를 작성하고 테스트해보자.
package ex05; public class ArrayArgumentTest { public static double minArray(double[] list) { // 정적 메모리 영역 double min = list[0]; for (int i = 1; i < list.length; i++) { if(list[i]<min){ min = list[i]; } } return min; } public static void main(String[] args) { double[] a = {1.1, 2.2, 3.3, 4.4, 0.1, 0.2}; double[] b = {-2.0, 3.0, -9.0, 2.9, 1.5}; double min; min = minArray(a); // new 하지 않아도 됨 static System.out.println("첫 번째 배열의 최소값="+min); min = minArray(b); System.out.println("두 번째 배열의 최소값="+min); } }
notion image
 

정적 변수 사용하기

어떤 가게에서 하루에 판매되는 피자의 개수를 알고 싶다. 피자의 개수를 알기 위해서는 지금까지 피자가 얼마나 생성되었는지 알아야 한다. 이러한 경우에 정적 변수를 선언하고 생성자에서 개수를 증가 시킨다.
package ex05; public class Pizza01 { private String toppings; private int radius; static final double PI = 3.141592; static int count = 0; // 정적 변수 선언 public Pizza01(String toppings) { this.toppings = toppings; count++; } }
package ex05; public class PizzaTest01 { public static void main(String[] args) { Pizza01 p1 =new Pizza01("Super Supreme"); Pizza01 p2 =new Pizza01("Cheese"); Pizza01 p3 =new Pizza01("Pepperoni"); int n = Pizza01.count; System.out.println("지금까지 판매된 피자 개수 = "+n); } }
notion image
 

정적 메소드 사용하기

간단한 연산을 제공하는 MyMath 클래스 작성 n의 k승 값을 계산하는 power 메소드와 절대값 메소드를 제공한다. 모두 정적 메소드
package ex05; public class MyMath { public static int abs(int x) { return x>0?x:-x; } public static int power(int base, int exponent){ int result = 1; for (int i = 1; i <= exponent; i++) { result *= base; // result = result*base; } return result; } }
package ex05; public class MyMathTest { public static void main(String[] args) { System.out.println("10의 3승은 "+MyMath.power(10,3)); } }

가비지 컬렉션

자바에는 객체를 생성하는 연산자 new는 있지만, 객체를 삭제하는 연산자는 없다.
Java에서는 삭제 연산자가 없는 대신 자동 메모리 삭제 시스템을 사용하는데 이것을 가비지 컬렉션(garbage collection)이라고 한다.
이것의 장점은 개발자가 동적 메모리를 기억하고 있다가 사용이 끝나면 반환하는 것은 매우 번거롭고 귀찮은데 가비지 컬렉션은 자동으로 삭제 해준다. 단점은 자바의 속도가 느려진다.
C++과 같은 다른 언어들은 객체를 직접 삭제하는 언매니지드 언어이고, Java와 같은 언어는 객체를 자동으로 삭제해주는 매니지드 언어이다.

싱글톤 패턴

객체를 단 한번만 메모리에 올릴 수 있는 패턴
package ex05; class President { static President instance = new President(); private President(){} // 생성자 접근 불가 new가 안됨. } public class SingleTonEx01 { public static void main(String[] args) { President p1 = President.instance; // instance를 통해 접근 System.out.println(p1.hashCode()); // p1,p2가 같음 President p2 = President.instance; System.out.println(p2.hashCode()); // 해쉬코드 알려주는 코드 } }
 
Share article
RSSPowered by inblog