[JAVA]10일차(지역변수/전역변수/클래스와 인스턴스/클래스 설계/임의의 누적합,사칙연산 구하기/생성자)

정효진·2021년 7월 27일
0

Developer Study

목록 보기
12/47
post-thumbnail

7월27일(화)

Test063~, CircleTest, ~Test068

◼ 클래스라는 틀 기반의 객체 생성

▪ 변수선언 + 메소드 정의

  • 인스턴스 던전 = 포토샵으로 치면 레이어가 있는 것

    인스턴스 던전 : 온라인 게임에서 특정 유저 개인이나 집단을 위해 별도로 생성한 지역 출처-네이버 지식백과

  • 설계도 = 클래스
  • 설계도대로 뭔가 만들어서 실행하는것 = 객체생성, 인스턴스 생성

◼ 지역 변수

※ 지역 변수는 초기화 과정을 거치지 않으면 사용할 수 없다.
-> (즉, 자바가 자동으로 초기화를 수행해 주거나 하지 않는다.)

//Test064.java 와 비교~!!!

public class Test063                          //클래스
{
		
	public static void main(String[] args)    //메소드
	{
		// 지역 변수 n
		int n;
		// -- 선언 후 초기화 과정을 거치지 않은 상태.

		System.out.println("n : " + n);
		// 에러발생(컴파일 에러)
		//variable n might not have been initialized
		// 지역 변수 n 에 접근하여 그 값을 출력하고자 하는 구문

	}
}

◼ 전역 변수

  • 전역변수는 초기화하지 않으면 기본적으로 0으로 초기화됨
//Test063.java 와 비교~!!!

public class Test064
{
	// 전역 변수 a 선언
	int a;
	// 자동으로 0으로 초기화 지원
	
	// 전역 변수 b 선언
	boolean b;
	// 전역 변수 c 선언
	char c;
	// 전역 변수 d 선언
	double d;
	
	public static void main(String[] args)
	{
		// Test064 인스턴스 생성 -> 버퍼드리더처럼 a쓰려면 인스턴스 생성을 해줘야함
		Test064 ob = new Test064();
		
		System.out.println("ob.a : " +ob.a);
		//==> 0b.a : 0

		System.out.println("ob.b : " +ob.b);
		//==> ob.b : false  //자동으로 0이 들어감

		System.out.println("ob.c : "+ob.c);
		//==> ob.c :        //자동으로 공백

		System.out.println("ob.d : "+ob.d);
		//==> ob.d : 0.0    //자동으로 0.0

	}
}

◼ 클래스와 인스턴스

❔ 클래스가 여러 개이면 파일명은 뭘로 저장되나요?

하나의 자바 파일(.java)에 여러 개 이상의 클래스(class)를 만들 수 있다.
하지만 이 과정에서 『public class』가 붙는 클래스는 하나여야함!!
그리고 파일의 이름은 public이 붙어있는 클래스가 파일명의 된다.
일반적으로 하나의 파일에 하나의 클래스를 설계한다.
또한, 여러 개의 클래스가 설계된 파일을 컴파일하게 되면
내부에 설계된 클래스 수 만큼 클래스 파일(.class)이 파생된다.
실무에서는 하나의 자바파일에는 하나의 클래스 만드는 것이 일반적임

▪ 직사각형 클래스 설계

/*
직사각형의 넓이와 둘레 계산, 클래스로 표현

클래스의 정체성 -> 직사각형
클래스의 속성   -> 가로, 세로, (넓이, 둘레, 부피, 무게, 재질, 색깔, ....)
클래스의 기능   -> 넓이 계산, 둘레 계산, 가로세로 입력, 결과 출력

객체를 구성     -> 데이터(속성, 상태) + 기능(동작, 행위)
    ↓                    ↓                  ↓
클래스를 설계   ->       변수         +     메소드


class 직사각형
{
	// 데이터(속성, 상태) -> 변수
	int 가로, 세로;

	// 기능(동작, 행위)   -> 메소드
	가로세로 입력()
	{
	}

	둘레 계산()
	{
	}

	넓이 계산()
	{
	}

	결과 출력()
	{
	}

}
*/

▪ 클래스와 인스턴스 활용하여 임의의 누적합 구하기

/*
사용자로부터 임의의 정수를 입력받아
1부터 입력받은 수 까지의 합을 연산하여
결과값을 출력하는 프로그램을 구현한다.

단, 클래스와 인스턴스의 개념을 활용하여 처리할 수 있도록 한다.
또한, 입력 처리 과정에서 BufferedReader를 활용하며,
입력 데이터가 1 보다 작거나 1000 보다 큰 경우
다시 입력받을 수 있는 처리를 포함하여 프로그램을 구현할 수 있도록 한다.

실행 예)
임의의 정수 입력(1~1000) : 1022
임의의 정수 입력(1~1000) : -20
임의의 정수 입력(1~1000) : 100
>> 1 ~ 100 까지의 합 : 5050
계속하려면 아무 키나 누르세요...
*/
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

class Hap
{
	int n;  //입력받을 정수 값 (전역 변수)

	//입력기능
	void input() throws IOException
	{                       //실제 인스턴스를 생성하는 구문 new
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		do
		{
			System.out.print("임의의 정수 입력(1~1000) : ");
			n = Integer.parseInt(br.readLine());
		}
		while (n<1 || n>1000);	
		
	}

	//누적합
	int cal()
	{
		// 결과값으로 반환하게 될 변수 선언 및 초기화
		int result = 0;  //값이 없을 때 초기화해놓으면 에러가 발생안해서 초기화함!
		for (int i=1; i<=n;i++ )
		{
			result += i;

		}
		// 최종 결과 값 반환
		return result;
	}
	
	//출력기능
	void print(int cal)  //결과 출력()  -> 누적합 매개변수로 받아줘야함
	                     //메소드의 값을 반환할 수 있는 방법은 return 뿐
						 //반환 값이 없고 그냥 출력하기때문에 void
	{
		System.out.printf(">> 1 ~ %d 까지의 합 : %d\n",n,cal);
	}
}

public class Test067
{
										    //예외처리 CircleTest에서도 했지만 main에 나와도
										    // main안에 CircleTest가 있는 것이므로 여기서도 예외처리 해줘야!
	public static void main(String[] args) throws IOException
	{
		//Hap클래스 인스턴스 생성
		Hap ob = new Hap();  ////Hap 메모리를 생성해서 ob라는 참조변수를 만들었음
		//생성된 인스턴스 ob를 통해 정수 입력 메소드 호출
		
		ob.input(); //리턴자료형이 void면 = 으로 받을꺼 없음

		//생성된 인스턴스 ob를 통해 누적합 연산 메소드 호출
		int cal = ob.cal();
		
		//생성된 인스턴스 ob를 통해 출력 메소드 호출
		ob.print(cal);


	}
}
/*
임의의 정수 입력(1~1000) : 0
임의의 정수 입력(1~1000) : -20
임의의 정수 입력(1~1000) : 1005
임의의 정수 입력(1~1000) : 100
>> 1 ~ 100 까지의 합 : 5050
계속하려면 아무 키나 누르십시오 . . .
*/

▪ 클래스와 인스턴스 활용하여 입력받은 두 정수의 사칙연산

import java.io.IOException;
import java.util.Scanner;

class Calculate
{
	//주요 변수 선언
	int n1, n2;   //사용자로부터 입력받은 두 정수를 담아둘 변수
	char op;      //사용자로부터 입력받은 연산자를 담아둘 변수
	
	Calculate() //생성자(아래 생성자개념 읽고 오기)
    //컴파일하는 과정에서 사용자정의 생성자가 없다면 자동으로 삽입이 됨
	{
		
	}

	void input() throws IOException   // System.in.read때문에 사용
	{
    		//int n1, n2; 위에 선언했기 때문에 또해줄 필요없음!!!
                //-> 이거때매 계속 >> 0 + 0 = 0.00에러남 -_ㅠ
		Scanner sc = new Scanner(System.in);
		System.out.print("임의의 두 정수 입력(공백 구분) : "); //Scanner쓰면 토큰을 분할해서 받아올 수 있음
		//sc = new Scanner(sc.next()).useDelimiter("\\s*,\\s*");
		n1 = sc.nextInt();
		n2 = sc.nextInt();

		System.out.print("임의의 연산자 입력(+ - * /)    : ");
		op = (char)System.in.read();
	}

	double cal()
	{
		int res=0;

		switch(op)
		{
			case '+' : res = n1 + n2; break;
			case '-' : res = n1 - n2; break;
			case '*' : res = n1 * n2; break;
			case '/' : res = n1 / n2; break;
		}
					
		return res;
	}

	void print(double res)
	{
		System.out.printf(">> %d %c %d = %.2f\n",n1,op,n2,res);		
	}

}

public class Test068
{
	public static void main(String[] args) throws IOException
	{
		//Calculate 클래스 인스턴스 생성
		Calculate ob = new Calculate();
						   //Calculate()이걸 정의한적 없는데 데려올수 있어? -> 27번 라인 확인!!
		ob.input();

		double res = ob.cal();

		ob.print(res);
	}
}
/*
임의의 두 정수 입력(공백 구분) : 10 5
임의의 연산자 입력(+ - * /)    : /
>> 10 / 5 = 2.00
계속하려면 아무 키나 누르십시오 . . .
*/

◼ 생성자(Constructor)

  • 딱 한번만 호출되는 메소드
  • 자바는 인스턴스 생성 시 생성자는 반드시 호출된다(Scanner 인스턴스생성하는데 생성자 안만드는건 불가능!)
  • 클래스의 이름과 똑같은 이름의 메소드여야함
  • 생성자첫글자가 대문자 일수밖에없음!(클래스의 명명규칙 그대로)
  • 생성자는 반환자료형, 리턴자료형을 가질 수 없void 조차도
  • 생성자내에서는 final변수를 초기화 할 수 있다.
  • 직접정의한 생성자 : 사용자정의 생성자
  • 컴파일하는 과정에서 사용자정의 생성자가 없다면 자동으로 삽입이 됨->디폴트 생성자(default constructor)
//객체를 선언한것
Scanner sc = new Scanner();
            //인스턴스를 생성
            //new Scanner  + Scanner();
                            //얘가 생성자
                     //Scanner()이걸 정의한적 없는데 데려올수 있어?
       //컴파일하는 과정에서 사용자정의 생성자가 없다면 자동으로 삽입이 됨 아래처럼!
       /*
       Scanner()
       {
       
       }
       */
class Number
{
	int num;
    public Number() //Number()가 생성자!!
    {
    	....
    }
}
profile
개발새발

0개의 댓글

관련 채용 정보