IT/JAVA (17.12.18~)

8일차 JAVA(8)

만두토끼 2017. 12. 28. 10:53

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());

}

}




public class Student {
//학번, 이름, 나이, 전화번호 등 저장
  //변수로 직접 접근 불가. 메소드를 통한 접근이 가능하게. 

private int id;
private String name;
private int age;
private String mobile;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
}



< 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