클래스(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
📌 Note Code
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