[JAVA] Day 7 - class로부터 객체 생성

sue·2023년 11월 22일

📒국비학원 [JAVA]

목록 보기
4/20
post-thumbnail

클래스(class)

  • 배열의 메모리 할당 (객체 생성)
  • instance 변수 (전역변수) = int 0 / 소유주가 없어서 0값 초기화 됨 (갖다 쓸 때, 밑에서 에러나면 안되니까)
  • local 변수 (지역변수) = [class] - [method] 안에서만 쓰는 자료형(int,char...)
    • public class 복도(void,return문 제외한 곳)에 instance 변수 쓰면 전체 사용 가능
    • main 메서드인 출입구가 없는 class는 출력되지 않음.
    • main을 제외한 class는 public 안쓰고 만들기

Com ob= new Com()

  • Stack [매장] 자주 쓰이는 것 :
    - ex) int a / Com ob

    - ex) SubClass 객체 생성하게되면
    ▶ SubClass ob1 / SubClass ob1
    -> ob1에 들어가있는 그릇에 담긴 번지 수 찾아가니까 a,0 / b,0


  • heap[창고] :
    : ex) new Com( )

    new SubClass -> heap

🔎 [Eclipse] - [package] - [class] 생성


📌 Note Code


  • void = return값 X
  • return = public 자료형(int,String..) ( ) { } 메서드 + 마지막에 return하고자 하는 값 꼭 써주기

Test1. 사각형의 둘레, 면적을 구하여라

💻 입력-1 파일명 : [ Com ] - main메소드 x


import java.util.Scanner;

public class Com {

	int w, h; // clas 복도

	public void input() { // input 부서

		Scanner sc = new Scanner(System.in);

		System.out.print("가로?");
		w = sc.nextInt();

		System.out.print("세로?");
		h = sc.nextInt();

		// return; (생략가능) 

	}

	public int area() {

		int result; // result = 지역변수 (area부서안에서만 사용하는것)

		result = w * h; // 넓이

		return result;

	}

	public int length() { // 둘레

		// return 구하고자하는거;
		return (w + h) * 2; // 위랑 아래랑 같은 코딩임

	}

	// int a, int l은 마음대로 만들어도 됨
	public void print(int a, int l) { // int a,int l = 인수 = 내 맘대로 만들기 = 넓이(area)/둘레(length)라고 생각

		System.out.println("가로 : " + w);
		System.out.println("세로 : " + h);
		System.out.println("넓이 : " + a); // "넓이 : "+(w*h)
		System.out.println("둘레 : " + l);

	}

}

💡 **출력**
main 출입문이 없기때문에 출력이 나올 수 없다


📌 Note Code


  • new = 메모리에 올라감(heap 공간에 뜸) / [같은 package] - class명을 복사본을 만듦.
    ex)
    Com c = new Com(  );

  • class 파일을 따로 만들었더라도, 같은 package에 있기 때문에 import 필요없음.
    -> 1개의 파일 안에 class는 한개 = 정석 / But, 필요에 의해서 1개의 파일 안에 여러 개의 class 생성할 수 있음.

  • main메소드에서 출력값 => 따로 만든 class파일의 정보를 불러옴. 장점) 간편하게 코드 짤 수 있음.
    ex)
    - void로 받을 때,
    복사본.input( );
    복사본.su( );
    복사본.output();
    - return값을 받을 때, int 변수명 = 복사본.su( ); / 변수명 내 마음대로 설정 가능

  • 계속 끊임없이 출력값을 제시하면, 무한정으로 물어보고 답해줄 수 있음.



💻 입력-2 [Test].class


import java.util.Scanner;

public static void main(String[] args) {

		Com ob = new Com(); 

		ob.input(); // Com의 input메소드 부서 불러오기
		int a = ob.area(); // ob.area(); = 돌려주는 값 ex)10 -> 대입연산자에 의해서 그릇 int a에 넣기
		int l = ob.length();

		ob.print(a, l);

		System.out.println();
		ob.input();
		a = ob.area();
		l = ob.length();
		ob.print(a, l);
}

💡 **출력**
가로?20
세로?30
가로 : 20
세로 : 30
넓이 : 600
둘레 : 100

가로?10
세로?15
가로 : 10
세로 : 15
넓이 : 150
둘레 : 50


📌 Note Code



💻 입력 Test.2 1~사용자 값까지의 합계를 구하여라 (한 개의 파일 안에 여러 개 class 생성)


import java.util.Scanner;

class Hap {

	int su, sum; // 메소드에 만들면 쓰레기값인데, class안의 instanct 변수에 만들었으니 0

	public void input() { // input 메소드

		Scanner sc = new Scanner(System.in);

		System.out.print("[1~]정수입력? ");
		su = sc.nextInt();
	}

	/*
	public int cnt() { // return!!
		for (int i = 1; i <= su; i++) {
			sum += i; // sum=sum+i (누적)
		}
		return sum;
	}
	*/
	
	
	public void cnt() {
		for (int i = 1; i <= su; i++) {
			sum += i; // sum=sum+i (누적)
		}
	}
	
	
	
	/*
	public void print(int i) { // return!!
		System.out.println("합계 : " + i);
	}
	*/

	
	public void print() {
		System.out.println("1~"+su+"까지의 합계 : " + sum);
	}

}




public class Test4 {

	public static void main(String[] args) {
		
		Hap ob = new Hap();
		
		/*
		ob.input();
		int sum = ob.cnt(); // return!!
		ob.print(sum);
	*/
		
		ob.input();
		ob.cnt();
		ob.print();
	}

}

💡 **출력**
[1~]정수입력? 3
1~3까지의 합계 : 6

0개의 댓글