본문 바로가기

Java/본격 Java 클래스

[Java] 클래스 메소드

※복습

클래스 변수와 클래스 메소드
  - 멤버변수와 멤버메소드를 선언할 때 static을 붙이면 클래스 멤버로 선언된다.
  - 일반적으로 멤버라 하면 인스턴스 멤버를 의미하는 경우가 많습니다.
   클래스멤버와 인스턴스멤버를 합하여 멤버라 지칭합니다.
  - 클래스멤버는 인스턴스와 관계없이 동작됩니다.
  - 클래스멤버는 모든 인스턴스에서 공유할 수 있습니다.
  - 단, 클래스멤버에서는 인스턴스 멤버에 접근 할 수 없습니다.

.

.

예제1

class NumberPrinter
{
	public static void showInt(int n){ System.out.println(n); }
	public static void showDouble(double n){ System.out.println(n); }
}

class ClassMethod
{
	public static void main(String[] args) 
	{
		NumberPrinter.showInt(20);
		NumberPrinter np = new NumberPrinter();
		np.showDouble(3.14);
	}
}

.

이런 식으로 static을 붙이게 되면 따로 생성자 없이 사용이 가능합니다.

.

.

예제2

class SimpleMath
{
	public static final double PI = 3.1415;
	public double add(double n1, double n2){ return n1 + n2; }
	public double min(double n1, double n2){ return n1 - n2; }
	public double mul(double n1, double n2){ return n1 * n2; }
}

class AreaMath
{
	public double calCircleArea(double rad){
		SimpleMath sm = new SimpleMath();
		double result = sm.mul(rad, rad);
		result = sm.mul(result, SimpleMath.PI);
		return result;
	}

	public double calRectangleArea(double width, double height){
		SimpleMath sm = new SimpleMath();
		return sm.mul(width, height);
	}
}

class PerimeterMath
{
	public double calCirclePeri(double rad){
		SimpleMath sm = new SimpleMath();
		double result = sm.mul(rad, 2);
		result = sm.mul(result, SimpleMath.PI);
		return result;
	}

	public double calRectanglePeri(double width, double height){
		SimpleMath sm = new SimpleMath();
		return sm.add(sm.mul(width, 2), sm.mul(height, 2));
	}
}

class ClassMeathod2
{
	public static void main(String[] args) 
	{
		AreaMath am = new AreaMath();
		PerimeterMath pm = new PerimeterMath();

		System.out.println("원의 넓이 : " + am.calCircleArea(2.4));
		System.out.println("사각형의 넓이 : " + am.calRectangleArea(5.5, 4.5));
		System.out.println("원의 둘레 : " + pm.calCirclePeri(5.4));
		System.out.println("사각형의 둘레 : " + pm.calRectanglePeri(5.0, 3.5));
	}
}

.

.

클래스와 변수와 클래스 메소드를 이용하여 원과 사각형의 넓이, 둘레를 구하는 프로그램을 만들었습니다.

여기서 static을 붙일 수 있는 메소드는???

.

.

정답은 모든 메소드에 가능했습니다. 작성한 메소드들이 인스턴스랑 상관이 없기 때문입니다.

class SimpleMath
{
	public static final double PI = 3.1415;
	public static double add(double n1, double n2){ return n1 + n2; }
	public static double min(double n1, double n2){ return n1 - n2; }
	public static double mul(double n1, double n2){ return n1 * n2; }
}

class AreaMath
{
	public static double calCircleArea(double rad){
		//SimpleMath sm = new SimpleMath();
		double result = SimpleMath.mul(rad, rad);
		result = SimpleMath.mul(result, SimpleMath.PI);
		return result;
	}

	public static double calRectangleArea(double width, double height){
		//SimpleMath sm = new SimpleMath();
		return SimpleMath.mul(width, height);
	}
}

class PerimeterMath
{
	public static double calCirclePeri(double rad){
		//SimpleMath sm = new SimpleMath();
		double result = SimpleMath.mul(rad, 2);
		result = SimpleMath.mul(result, SimpleMath.PI);
		return result;
	}

	public static double calRectanglePeri(double width, double height){
		//SimpleMath sm = new SimpleMath();
		return SimpleMath.add(SimpleMath.mul(width, 2), SimpleMath.mul(height, 2));
	}
}

class ClassMeathod2Ex
{
	public static void main(String[] args) 
	{
		//AreaMath am = new AreaMath();
		//PerimeterMath pm = new PerimeterMath();

		System.out.println("원의 넓이 : " + AreaMath.calCircleArea(2.4));
		System.out.println("사각형의 넓이 : " + AreaMath.calRectangleArea(5.5, 4.5));
		System.out.println("원의 둘레 : " + PerimeterMath.calCirclePeri(5.4));
		System.out.println("사각형의 둘레 : " + PerimeterMath.calRectanglePeri(5.0, 3.5));
	}
}
728x90
반응형

'Java > 본격 Java 클래스' 카테고리의 다른 글

[Java] Nested 클래스 활용  (0) 2020.07.15
[Java] Nested 클래스  (0) 2020.07.14
[Java] 클래스 변수  (0) 2020.06.25
[Java] 정보 은닉(private)  (0) 2020.06.25
[Java] 실습 - 삼각형 넓이 구하기  (0) 2020.06.25