1. 복습
Class
=> 자주 사용하는 코드(메소드)와 변수의 집합
=> 정적: 처음 호출 되면 영구적인 메모리 영역에 저장
=> 사용자의 정의 자율형 : 바로 사용할 수 없음
Instance(객체)
=> 클래스를 이용해서 메모리 할당을 한 사용 가능한 객체
=> 생성
=> 메인 클래스에서 객체 생성
=> 동적: 실행, 변경 등이 가능
Test t = new T(); 라고 할때 Test 는 Class 이므로 변경이 불가능하고 t 는 변수라 변경이 가능.
Data
1) 변경 가능 여부의 따른 분류
- 상수
- 변수
2) 상수 분류
- 정수 상수
- 실수 상수
- Boolean 상수
- 문자 상수
- 문자열상수
- 참조형 : null (가리키는게 없음)
변수의 종류
1) 저장되는 데이터 종류에 따른 분류
- value(값, 기본형)
boolean, byte, short, char, int, long, float, double
데이터 1개 저장
- reference (참조형)
배열, instance, enum, annotation
실제 데이터의 시작 주소를 저장
2) 선언되는 위치(유효 범위)에 따른 분류
- 지역변수(local)
메소드, 제어문, 예외처리 구분에서 생성된 변수로 생성한 범위에서만 유효
자동 초기화가 안됩니다.
- static 변수(클래스 변수)
클래스 안에서 static 과 함께 선언
클래스와 인스턴스가 공유
1번 만들어지면 소멸이 되지 않습니다.
3) 인스턴스 변수 (멤버변수)
=> 클래스 안에 static 없이 선언
=> 인스턴스가 생성될 때 인스턴스 별로 각각 생성
=> 인스턴스가 생성될때 만들어내고 인스턴스를 가리키는 데이터가 없으면 자동소멸
=> 자동 초기화
public class Main1 {
public static void main(String[] args) {
Test1 t = new Test1();
Test1.i=1; //클래스와 인스턴스가 공유하는 변수라 class 이름을 써서 바로 사용 가능
System.out.println(Test1.i);
t.j=2; //클래스 내의 변수 이므로 인스턴스(객체)를 생성하고 사용해야함
System.out.println(t.j);
}
}
2. method (메소드)
=> 자주 사용하는 코드 블럭을 하나의 이름으로 묶어둔 것
=> 코드의 중복을 제거하고 코드를 분활할 목적으로 사용
1) 메소드 생성
접근지정자 [특성] 리턴타입 메소드이름(매개변수나열) {
(생략가능)
}
2) 메소드 호출(실행)
클래스 이름
인스턴스이름 . 메소드이름(매개변수)
3. 매개변수 (argument)
=> 메소드를 호출할 때 넘겨주는 데이터
=> 없을 수도 있고 있을 수도 있다
=> java에서는 매개변수가 있는 메소드를 호출 할때, 반드시 매개변수를 대입해줘야 한다.
=> 매개변수는 메소드의 지역변수
4. return
=> 메소드가 수행을 종료
1) return type
=>메소드가 수행을 완료하고 남겨주는 데이터의 자료형
2) return 되는 데이터가 없으면 return type 은 void
public class Main1 {
public static void main(String[] args) {
Test1 t = new Test1();
Test1.i=1; //클래스와 인스턴스가 공유하는 변수라 class 이름을 써서 바로 사용 가능
System.out.println(Test1.i);
t.j=2; //클래스 내의 변수 이므로 인스턴스(객체)를 생성하고 사용해야함
System.out.println(t.j);
//아래도 같은 Test
VarTest ob1 = new VarTest();
VarTest ob2 = new VarTest();
System.out.println();
VarTest.n1=100;
System.out.println(ob1.n1);
System.out.println(ob2.n1);
//static 을 붙이지 않은 변수는 클래스가 사용할 수 없습니다.
//VarTest.n2=200; 에러 뜸
ob1.n2=200;
ob2.n2=10000000;
System.out.println(ob1.n2);
System.out.println(ob2.n2);
//final 변수라 에러 발생 ob1.balance=6000;
System.out.println(ob1.balance);
//private 변수라 에러 발생 ob1.n3;
//method 사용
System.out.println("--------------------------");
MethodTest t1 = new MethodTest();
t1.methodtest1(1,"hihihihihihi");
int result=t1.methodtest2(10);
System.out.println(result);
result = t1.add(result, 7);
System.out.println(result);
System.out.println("--------------------------");
System.out.println(" Hello World ");
System.out.println(" Hello World ".trim()); //좌우 공백 제거
System.out.println((" Hello World ".toUpperCase()).trim()); //대문자 만들기
}
}
public class MethodTest {
public void methodtest1(int n, String msg) {
for(int i=0; i<n; i=i+1) {
System.out.println(msg);
}
}
public int methodtest2(int n) {
int result=0;
for(int i=1; i<n+1; i=i+1) {
result = result+i;
}
return result;
}
public int add(int a, int b) {
return a+b;
}
}
5. 접근자 메소드 (getter&setter)
=> 인스턴스 변수를 사용하기 위한 메소드
=> 인스턴스 변수는 객체가 각각 소유하는데 접근 지정자를 private으로 하는 것을 원칙으로 한다.
=> 인스턴스 변수를 객체가 사용할 수 있도록 접근자 메소드를 만들어서 인스턴스 변수를 사용
1) getter
=> 인스턴스 변수의 값을 리턴하는 메소드
ex) 변수이름이 name 이고 자료형이 string 이면
public String getName() {
return name;
}
2) setter
=> 인스턴스 변수의 값을 설정하는 메소드
public void setName(String a){
name = a;
}
=> 메뉴에서 Source -> Generate Getters and Setters 를 입력하면 알아서 생성
public class Main2 {
public static void main(String[] args) {
Student s1 = new Student();
s1.setId(20123595);
s1.setAge(26);
s1.setMobile("010w1sdq0300");
s1.setName("김수현");
Student s2 = new Student();
s2.setId(2004123);
s2.setAge(31);
s2.setMobile("010662sdwe");
s2.setName("김우영");
System.out.println(s1.getId());
System.out.println(s1.getAge());
System.out.println(s1.getMobile());
System.out.println(s1.getName());
System.out.println("----------------");
System.out.println(s2.getId());
System.out.println(s2.getAge());
System.out.println(s2.getMobile());
System.out.println(s2.getName());
}
}
< Main 2에 다음 코드 추가 >
System.out.println("----------------");
System.out.println("<<배열로 묶어서 출력하기>>");
System.out.print("학번\t");
System.out.print(" 나이\t");
System.out.print("번호\t");
System.out.println(" 이름\t");
//동일한 자료형의 데이터가 여러 개 있는 경우 하나로 묶어 주어야 합니다.
Student [] st = {s1,s2};
for(int i=0; i<st.length; i=i+1) {
System.out.print(st[i].getId()+"\t");
System.out.print(st[i].getAge()+"\t");
System.out.print(st[i].getMobile()+"\t");
System.out.println(st[i].getName()+"\t");
}
6. static 메소드
=> 메소드 자료형 앞에 static 을 추가한 메소드
=> 클래스 이름을 가지고 호출할 수 있는 메소드가 됩니다.
=> 인스턴스 변수 사용을 할 수 없습니다.
=> static 메소드는 인스턴스 생성하지 않고도 사용할 수 있기 때문에 메모리도 절약할 수 있고 호출하는 속도도 빠릅니다.
< Main 2>
//static 메소드는 인스턴스 생성없이 클래스 이름만 가지고 호출이 가능
//기울어진 글씨체로 확인
Student.disp();
<Student>
public static void disp() {
//인스턴스 변수 사용을 못합니다.
//id = 1;
System.out.println("학생 정보를 저장하는 클래스");
}
7. random 함수 사용하기
public class Main3 {
public static void main(String[] args) {
System.out.println("\n<랜덤 실수를 0-5까지의 정수만 나오도록 변경>");
double ran = Math.random();
System.out.println(ran);
//위의 변수를 0-5까지의 정수만 나오도록 변경
while(ran>0&&ran<5) {
ran = ran*10.0;
}
System.out.println(ran);
System.out.println((int)ran%6);
System.out.println("\n<누가 더 이기나>");
int [] ar1= {1,2,3,4,5,6};
int [] ar2= {1,2,3,4,5,6,6,6,6,6};
ran = Math.random();
ran = ran*100;
int r1 = (int)ran%ar1.length;
int user1 = ar1[r1];
ran = Math.random();
ran = ran*100;
System.out.println(ran);
int r2 = (int)ran%ar2.length;
int user2 = ar2[r2];
System.out.println(user1+":"+user2);
System.out.println("\n<슬롯 머신 돌리기>");
//나와야할 무늬 배열
String [] slot = {"*","$","%","&","@"};
//결과를 저장할 변수
String result ="";
for(int i=0; i<3; i++) {
double data = Math.random();
int r = (int)(data*100)%slot.length;
result=result+slot[r];
}
System.out.println(result);
}
}
8. 일반 변수와 참조형 변수의 차이
int a = 10;
int b= a;
b= 20;
System.out.println(a);
-> 결과 10
int [ ] ar = {10,20};
int [ ] br = ar;
br[0] = 20;
System.out.println(ar[0]);
-> 결과 20
// br에 ar 배열의 주소가 저장된다. 고로 br[0]라고 하면 ar[0] 가 된다.
// br[0]에 20을 넣는건 ar[0]에 20을 넣는 것이된다.
'IT > JAVA (17.12.18~)' 카테고리의 다른 글
10일차 JAVA(10) (0) | 2018.01.02 |
---|---|
9일차 JAVA(9) (0) | 2017.12.29 |
7일차 JAVA(7) (0) | 2017.12.27 |
6일차 JAVA(6) (0) | 2017.12.26 |
5일차 JAVA(5) (0) | 2017.12.22 |