IT/JAVA (17.12.18~)

7일차 JAVA(7)

만두토끼 2017. 12. 27. 13:20

1. 복습


실습) 1~100까지의 점수를 6개 받고 점수를 부여. 동일한 점수일 경우 동일 등수 주기.

import java.util.Scanner;


public class MaxTest {


public static void main(String[] args) {

int [] ar= new int [6];

int size = ar.length;

Scanner sc = new Scanner(System.in);

int [] rank = new int[size];//등수


//등수 1로 초기화

for(int i=0; i<size; i=i+1) {

rank[i]=1;

}


for(int i=0;i<size;i=i+1) {

System.out.print("정수 (0-100) 입력: ");

ar[i]=sc.nextInt();

if(ar[i]<0||ar[i]>100) {

System.out.println("잘못입력하셨습니다. 다시 입력하세요");

i=i-1;

}

}


//오름 차순 계산하기 

for(int i=0; i<size-1; i=i+1) {

for(int j=i+1;j<size;j=j+1) {

if(ar[i]>ar[j]) {

int temp=ar[j];

ar[j]=ar[i];

ar[i]=temp;

}

}

}


for(int i=0;i<size;i=i+1) {

for(int j=0; j<size; j=j+1) {

if(ar[i]<ar[j]) {

rank[i]=rank[i]+1;

}

}

}


for(int i=0; i<size; i=i+1) {

System.out.println(i+"는 "+ar[i]+"이고, 등수는 "+rank[i]);

}

sc.close();

}

}





2. Class

=> 동일한 목적을 위해 모아둔 메소드와 변수의 집합

=> 사용자 정의 자료형

=> 정적(static) 변경이 안된다.

=> 클래스 이름은 대문자로 시작

=> 하나의 파일에 하나의 클래스를 만드는 것을 권장

=> 클래스 이름은 출력이 안된다.

=> 인스턴스를 저장한 변수를 출력하면 클래스 이름과 해시 코드가 출력 



* Instance (객체 - object) : class를 가지고 메모리 할당을 한 개체, 동적(dynamic) - 변경가능

* public : 이 클래스를 모든 곳에서 사용 가능, public 이 없으면 현재 패키지에서만 사용 가능 


*클래스 이름 변경: 마우스 오른쪽 클릭 -> refactor -> rename (alt + shift + r)




3. Data

1) 변경 여부에 따른 분류

- 상수(Constant, Literal) : 변경이 불가능한 데이터

- 변수(Variable) : 메모리에 붙여둔 이름, 내용 변경이 가능

2) 변수의 종류(저장된 데이터의 종류)

- value(값)

- reference(주소) ex) 배열, instance, enum  등

3) 유효 범위에 따른 분류

- local variable(지역변수) : 메소드(함수), 제어문, 예외처리 구문 내에서 생성된 변수

      만들어진 범위 내에서만 사용 가능 

                                   variable 형은 자동 초기화가 안됩니다.

       reference 형은 null로 초기화 됩니다.

       stack 에 생성 

- class variable (static variable / 클래스 변수)

클래스 안에 선언하는 변수로 static 이라는 예약어와 함께 선언

단 하나만 생성되고 프로그램이 종료 될 때까지 소멸되지 않음

만들면 기본값으로 자동 초기화 

클래스와 인스턴스 모두 사용 가능

목적은 공유 

- member variable (멤버변수, 인스턴스)

클래스 안에 static 없이 선언되는 변수

인스턴스 별로 별도로 생성

만들면 기본 값으로 자동 초기화

인스턴스만 사용 가능 




4. 접근 지정자

=> 클래스와 클래스 내부에 선언한 변수와 메서드에 설정가능

1) 클래스의 접근 지정자

- public : 모든 곳에서 이 클래스를 사용 가능 

- 생략( default, package) : 현재 패키지 내에서만 사용 가능

2) 변수와 메소드의 접근 지정자 (위에서 아래로 갈 수록 사용 범위 넓어짐)

- private : 클래스 내부에서만 사용 가능

- 생략(default) : package 안에서는 public이 되고 외부에서는 private

- protected : 패키지 내에서는 public 외부에서는 클래스 내부와 상속받은 클래스에서 사용 가능 

- public : 클래스 내부에서 사용할 수 있고 객체도 사용 가능 

=> 변수는 private, 메소드는 public 으로 사용하는게 일반적


* final 변수 

=> 변수의 값을 변경하지 못하도록 할 때, 사용하는 예약어

=> 이름은 모두 대문자로 하는 것이 관례 

=> 읽기 전용을 만들기 위한 명령어 (lock 을 걸어버리는 것) 



* 프로그래밍에서 금기시 하는 것

중복: 유지보수 문제

종속: 유지보수 문제


public class Main {


public static void main(String[] args) {

//student 클래스의 인스턴스를 생성

Student st1 = new Student();

Student st2 = new Student();

//인스턴스 출력

System.out.println(st1);

System.out.println(st2);

//클래스 변수는 인스턴스를 이용하지 않고 접근이 가능한데 인스턴스를 이용해서 접근했기 때문에 경고 

Student.schoolName="Blizzard";

System.out.println(st1.schoolName+"\n"+st2.schoolName);

st1.schoolName="Nexon";

System.out.println(st1.schoolName+"\n"+st2.schoolName);

System.out.println("----------------------------");

st1.studentName="성운";

st2.studentName="재환";

System.out.println(st1.studentName+"\n"+st2.studentName);

}


}




public class Student {

//class 변수 : 공유(인스턴스와 클래스 모두 사용 가능)

//다같이 사용 

static String schoolName;


//instance 변수: 각각 소유(인스턴스만 사용 가능)

String studentName;

}






5. method

=> 기능

=> 자주 사용하는 코드를 하나의 이름으로 묶어주고 사용하기 위한 개념 


생성(정의) - 클래스 안에서 작성

[접근지정자] [특성] 리턴타입 메소드이름(매개변수) { }

=> 접근지정자: private/public, 리턴타입: 없으면 void 


메소드 호출 

클래스이름or인스턴스이름 . 메소드이름(매개변수) 


public class Main1 {


public static void main(String[] args) {

//MethodClass의 인스턴스 만들기

MethodClass mc = new MethodClass();

//MethodClass의 disp메소드 호출 

mc.disp();

}


}



public class MethodClass {
//메소드 생성을 연습할 클래스
//Hello world를 3번 출력하는 메소드
public void disp() {
for (int i=0; i<3; i=i+1){
System.out.println("Hello World!");
}
}
}




6. 매개변수(argument)

=> 메소드를 호출 할 때 넘겨주는 데이터

=> 개수 제한 없음

=> 매개 변수가 있는 메소드를 호출할 때는 반드시 매개변수를 대입하여 호출


public class Main1 {


public static void main(String[] args) {

//MethodClass의 인스턴스 만들기

MethodClass mc = new MethodClass();

//MethodClass의 disp메소드 호출 

mc.disp();

//MethodClass의 javaDisp 메소드 호출

mc.javaDisp(5);

//MethodClass의 add 메소드 호출

mc.add(5, 3);

}


}



public class MethodClass {

//메소드 생성을 연습할 클래스

//Hello world를 3번 출력하는 메소드

public void disp(){

for (int i=0; i<3; i=i+1){

System.out.println("Hello World!");

}

}

//정수 1개를 받아서 정수 만큼 Java 라는 문자열을 출력하는 메소드

public void javaDisp(int n) {

for(int i=0; i<n; i=i+1) {

System.out.println("Java");

}

}

//정수 2개를 받아서 2개의 숫자 합을 출력하는 메소드

public void add(int a, int b) {

System.out.println("결과: "+(a+b));

}


}



'IT > JAVA (17.12.18~)' 카테고리의 다른 글

9일차 JAVA(9)  (0) 2017.12.29
8일차 JAVA(8)  (0) 2017.12.28
6일차 JAVA(6)  (0) 2017.12.26
5일차 JAVA(5)  (0) 2017.12.22
4일차 JAVA (4)  (0) 2017.12.21