객체지향언어(Object(객체)-oriented(지향) Programming(언어)) 란?

 

: 참조자료형이라고 불리우며, 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식 입니다.

 

객체란? : 사전상의 등록되어 있는 단어들, 머리속에 떠올릴 수 있는 모든 것들이 object 을 이야기 합니다.

 

 

객체 지향언어의 특성

 

1) 캡슐화 : 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것입니다. 캡슐화를 통해서 객체의 내용들을 보호하고, data를 효율적으로 관리하기 위해서 사용합니다. 그전까지는 data 자료형으로 나눠서 일일이 저장하고 선언해서 관리했어야 하는데 그것을 한번에 할 수 있도록 합니다. 

 

2) 다형성 : 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현합니다.

 

- 다형성 사례

- 메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드

- 메소드 오버라이딩 : 슈퍼클래스의 메소드를 서브 클래스마다 다르게 구현

 

객체 지향언어의 목적

 

1) 소프트웨어의 생산성 향상

- 소프트웨어를 빠른 속도로 생산할 필요성 증대시킵니다.

- 객체 지향 언어

- 상속, 다형성, 객체, 캡슐화 등 소프트웨어 재사용을 위한 여러 장치 내장되어있습니다.

- 소프트웨어 재사용과 부분 수정 빠름니다.

- 소프트웨어를 다시 만드는 부담 대폭 줄입니다.

- 소프트웨어 생산성 향상시킵니다.

 

2) 실세계에 대한 쉬운 모델링

- 컴퓨터 초기 시대의 프로그래밍 수학 계산/통계 처리를 하는 등 처리 과정, 계산 절차 중요했습니다.

- 현대의 프로그래밍은 컴퓨터가 산업 전반에 활용, 실세계에서 발생하는 일을 프로그래밍, 실세계에서는 절차나 과정보다 물체(객체)들의 상호 작용으로 묘사하는 것이 용이해졌습니다.

 

객체 지향 언어

: 실세계의 일을 보다 쉽게 프로그래밍하기 위한 객체 중심적 언어

 

Database와 비교를 통해서 쉽게 설명하겠습니다.

Database 자료형을 효율적으로 관리하기 위해서 table 형태로 관리하고 있습니다.

 

Database 자료형을 효율적으로 관리하기 위해서 table 형태로 관리하고 있다.

 

Empno

empname

sal deptno dept

13132

scott

2500

10

sale

테이블(관계형)을 이용하여 record단위로 하나의 값을 저장하고 있기 때문에 data를 관리하기 쉬웠습니다.

이와 같은 개념을 java에서도 수행할 수 있는데 이를, 객체지향언어로 사용합니다.

 

기본 자료형 -> 객체지향 (테이블의 형태) + 우리가 정의 하는 자료형(참조자료형)

: java가 지원해주는 자료형 만 아니라 내가 만드는 참조자료형을 통해서 사용합니다.

 

 

Java의 객체지향과 databasetable의 공통점!

: 틀을 만들어서 데이터를 관리합니다. Java 에서는 class를 통해서 table를 정의하는 것과 같습니다.

 

Java의 객체지향과 databasetable의 차이점!

: database는 정형화 되어있는 틀을 프로그램에서 제공해주지만 java는 직접 틀을 만들었다는 것을 인식할 수 있도록 메모리에 저장하게끔 할당 받아야 합니다.

 

Java는 어떻게 할당 받을 수 있을까요?

Database table을 기준으로 삽입만 하면 되지만 Java data를 저장하려고 하면 저장할 공간을 할당 받도록 설계되어 있기 때문에 New 를 사용해야한다. (new : 만들어둔 틀의 저장 공간을 할당 받기 위한 명령어이다.)

 

 

 

지금부터 예시를 통해서 객체지향을 만들어보도록 하겠습니다.

 

1) class 사용하여 틀 만들기

 

package 객체지향언어;

class Employee{                                
                               // 사원이라는 대상의 속성으로 만들어낸 틀이다. 
// field / 멤버변수             // class : 틀을 만들어주는 명령어
int empno;                     
String ename;                 
String job;                    
int mgr;
int sal; 
int deptno;	  

class를 이용하여서 사원에 대한 정보를 하나의 틀을 만들어서 선언하고 있습니다.

각각의 자료형을 하나의 Employee 라는 이름으로 묶어줍니다.

 

주의)

선언만 되어 있을 뿐이지 main 안에 들어있지 않기 때문에 결과가 수행되지 않습니다. Employee 이름의 자료형으로 내가 저장해준 것입니다.

 

2) new 사용하여 틀 선언하기

 

- new : 만들어둔 틀의 저장 공간(memory)을 할당 받기 위한 명령어입니다.
- new Employee(); 형식은 method 수행하는 형식과 같이 사용합니다.
- 요청은 내가 했지만 memory 영역은 java가 할당해줍니다.

public class OOPBasic {
	public static void main(String[] args) {
		
		Employee king ;  
		king = new Employee();      
	
		king.empno = 1000; 
		king.ename = "사장님";
		king.job = "관리";
		king.mgr = 0;
		king.sal = 5000;
		king.deptno = 10;

Employee king ; 참조변수(주소값) 내가 만든 자료형으로 변수 선언 합니다.

Employee 안에 선언해놓은 6개의 데이터를 가지고 내가 필요할 때사용할 수 있습니다.

 

 

king = new Employee(); 참조 자료형 , 인스턴스화 -> 인스턴스(메모리할당)
1. 주소값 : 할당 받은 메모리의 시작 주소( 1개의 값만 저장할 수 있습니다.) 주소값을 통해서 내가 지정한 자료형으로 갈 수 있습니다.
2.  king 의 값을 주소값을 불러주는 참조변수라고 불러줍니다. - 참조변수는 별도로 4byte 할당 받습니다.

(주소값을 가지고 있다. = 객체를 가지고 있고, 인스턴스화 시킨다.)

 

- 이제부터 각자 관리 되는 것이 아니라 king하나로 관리할 수 있습니다.

king.displayEmployee();
		
/*
 * 사원번호 : 1000 
 * 사원이름 : 사장님 
 * 직책 : 관리 
 * 사수번호 : 0
 * 급여 : 5000 
 * 부서번호 : 10
 */

위의 king을 출력하면 그안의 선언되어 있던 자료형이 하나의 정형화 되어 출력 됩니다.

 

추가적 설명)

- 실체화 한 대상 : ( 범용적인 )객체 = 할당 되어 있는 메모리에 있는 정보 / (좁은 의미) 객체 = 할당하기 시작하는 이름 
- 인스턴스 : 할당 되어 있는 메모리 공간 입니다.
- 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)라고 합니다.

 

예제)  e-mart에서 가셔서 사과를 5000원 어치 사오셨다. e-mart의 이윤과 사과의재고를 관리하자.

(단, 개단 사과의 값은 1,000원)

package JAVA연습;

-- field (속성) --
class Apple{ 
	int benefit; // 이윤
	int numofapple; // 남은 사과 갯수
	
	Apple(int apple){
		numofapple = apple ;
		
}
	 
-- method(사과를 판매 - 행위/기능) -- 
public void sale(int money) {
	int num = 0;
	num = money/1000;
	numofapple -= num;
	benefit += money;
} 
-- 결산 --
public void displaybuy() {
	System.out.println("이윤 : " + benefit);
	System.out.println("남은 사과 수 : " + numofapple);
} 	
}
public class qq20200406 {
	public static void main(String[] args) {
    
		Apple e_mart;
		e_mart = new Apple(100);
		
		e_mart.sale(10000);
		e_mart.displaybuy();
		
		e_mart.sale(10000);
		e_mart.displaybuy();	
	}
}

결과값

이윤 : 10000
남은 사과 수 : 90
이윤 : 20000
남은 사과 수 : 80

Apple e_mart;  --

생성자 : class Apple 의 이름과 같아야 한다. 반환형이 없다. java에 의해서 memory 생성시 딱 1번만 수행된다.
e_mart = new Apple(100); 

1) 메모리를 할당해주고, Apple의 주소값을 가져옵니다.
2) 위의 Apple() 를 호출하고, 초기화를 합니다.
e_mart.sale(98000); 필드의 값을 메모리에 할당해서 그 값으 주소값을 주고 초기화 하는데 활용하게 합니다.

 

 - 자료형만 잘 지어주면 결과값은 언제든지 얻어낼 수 있습니다.  
 - 객체의 이름만 알고 있다면 언제든 수행할 수 있습니다 .  
 - 자료형을 만들어두면 새로운 객체가 생길 때 마다 그 값 저장하기에 유용합니다.

Method란 무엇일까요?

Java 안에서 함수의 개념을 가지고 와서 프로그램 안에서 사용하게 해주는 것입니다. 쉽게 설명하면 입력 값이 들어 왔을 때, 결과 출력을 해준다고 볼 수 있습니다.

 

가장 기본적인 method main 이라고 합니다.

package Method;

public class Method {
	public static void main(String[] args) {
	}			
}

 

- 자바 프로그램의 시작은 main 이라는 이름의 메소드를 실행하는 데서부터 시작 합니다.

- Method의 중괄호 내에 존재하는 문장들이 위에서 아래로 순차적으로 실행합니다.

- Main은 시작점과 종료를 실행시켜주는 함수라고 할 수 있습니다.

- Main method는 한 개만 존재해야 합니다. 

- Void : 수행이 후 아무런 값도 반환 하지 않는 method 입니다.

 

method 장점:
: 필요할 때마다 언제든지 호출해서 사용 가능합니다 또한 코드도 짧아지고, 프로그램의 가독성이 좋아지고 , 활용성이 높아집니다.

 

Method를 사용 방법

 

1) 메서드 정의

public static void gugudan(int num) {
}

1. 조건문 , 반복문을 쓸때와 같은 형태와 형식을 가지고 있습니다.  

2. public static void (       ) : 괄호의 자리는 method의 이름을 의미합니다.  

3. (    ) 괄호 안에 데이터를 넣어서 활용 가능합니다. 이 괄호의 값을 매개변수 라고 합니다.

 

추가 설명 : javac 를 통해서 컴파일을 하기 때문에 .class 라는 확장자로 저장이 되서 그 값을 컴파일해줍니다.
하지만 main 안에 있지 않으면 실행 컴파일 되지 않기 때문에 main 안에 무조건 넣어어야 합니다.

 

 

 

2) 메서드 호출 

: main 안에서 만들어준 method를 입력해준다. 

package method;

public class method 호출하기  {
	public static void main(String[] args) {
		
	edan();  -- 만들어 놓은 edan 이라는 method를 main 에서 출력해줍니다. 
	}
	
	public static void edan(){               
	for (int num = 1; num<=9; num++) {
	System.out.println("2 x" + num + " = "+ (2*num));
	}
		}	
}	

 

 

예제)  "1~100 사이의 "+num1+"의 배수이고, "+num2+"의 배수를 출력하기"

package JAVA연습;

public class JAVA연습20200421 {
	public static void main(String[] args) {
		
	study(num1,num2);
	}
	
	public static void study(int num1,int num2){
	    for(int i=1; i<=100; i++){
	    	if((i%num1==0)&&(i%num2==0)){
	    		System.out.println(i);	
	    	}
	  
	    }  
	}	
}	

study라는 method를 만들고 그 안에 for 과 if문 조건을 만들어서 사용합니다.

public static void study(int num1,int num2){ 괄호 안에 값을 테이터를 넣도록 만들어줍니다.

study(num1,num2);  num1와 num2 값에 무엇을 넣어주냐에 따라서 값이 달라집니다.

 

 

3) 메서드 안에 Return 사용하기

 

Return :  : 값을 반환 할 때만 사용하며 또 값이 없을 때 호출한 쪽으로 복귀를 시킬 때 사용합니다.

 

① 값을 반환

package return 값 반환;

public class return 값 반환 {
	public static void main(String[] args) {
		
	study(4561,325);
	int num = 0;
	num = study(4561,325); 
	
	if (num >=50000) {
		System.out.println("프로그램을 종료합니다.");
	}
	}

	public static int study(int num1, int num2){
	    int result = 0;
		result = num1 * num2 ; 
	        System.out.println(num1 + " x " + num2 + " = " + result);	
	    return result;	
	  
	    }  
	}	

- 값을 반환하기 위해서는 public static (int) study 라는 인식시켜야 합니다.  
- public static ( ) study : 괄호의 자리는 복귀할 때 반환하게 되는 자료형을 의미한다.

- void : 수행이후 아무런 값도 반환 하지 않는 method 입니다.

 

위의 식을 풀이하면 이렇습니다.

1) num = study(4561,325); --> int num1, int num2 괄호의 값이 각각 저장 됩니다. 
2) result = num1 * num2; 이 식을 수행합니다.  
3) System.out.println(num1 + " x " + num2 + " = " + result); 출력한 이후 출력한 쪽으로 복귀 합니다.

4) num = study(4561,325);저장 해주고 필요할 때마다 num 의 값으로 사용할 수 있게 됩니다.

return은 이렇게 값을 가지고 추가적으로 수행하고 싶은 것이 있을 때 사용한다.

 

추가적 설명 )

study 의 result 의 값을 main method 에서 사용할 수 없습니다. 
그 이유는 , return result; 하는 순간 int num1, int num2의 이름을 지워버리기 때문입니다. 
조금 더 자세히 설명을 하면 , 소멸 시키는 이유 : java에서 메모리를 다 할당하면 다른 운영체제에게도 할당할 메모리량이 부족하기 때문입니다. 초기 값을 설정해줘야지 하는 이유입니다.  그렇기 때문에 선언과 동시에 꼭 초기화 하는 습관을 가지는 것이 좋습니다. // int : 0, double :0.0, boolean : true, string : "", char : ' '

 

 

 

② 값이 없을 때 호출한 쪽으로 복귀

 

package return 값이 없을 때 호출한 쪽으로 복귀 ;

public class return 값이 없을 때 호출한 쪽으로 복귀 {
	public static void main(String[] args) {
		study(5,0);  
		
	}  
	
	public static void study(int num1, int num2) {
	    int result = 0; 
	    
	   if(num2 == 0) {
		   System.out.println("나눗셈은 0으로 나눌 수 없습니다.");
		   return;   
	   }
	    result = num1 / num2; 
	    System.out.println(num1 + " / " + num2 + " = " + result); 
	}		
}

위의 식에서 나눗셈은 0으로 나눌 수 없기 때문에 error가 나서 코드 자체가 진행이 되지 않습니다.

이런 상황에 return 을 사용해서 값이 없을 때 study로 돌아와서 "나눗셈은 0으로 나눌 수 없어요." 를 출력하도록 만들었습니다.

 

 

 

※ Method 이름 짓기

 

 변수의 이름과 method 이름을 짓는 방식이 같습니다.
 차이점은 변수의 이름은 일반적으로 명사로 이름으로 시작하고 , method 의 이름은 동사로 이름을 시작합니다.

 

 

 

추가적 설명)

- 매개변수 : method 정의 할 때의 변수 public static void study (int num1, int num2 ) 괄호 안의 값 입니다.
- 인자 : method 호출 될 때의 변수 study(10,5); 괄호 안의 값 입니다.

 

 

 

● 지역변수 (localvariable):

 

if 의 num 과 else의 num 이 같을 때 오류가 나지 않는 이유는? 지역변수 때문이다.


if 와 else 둘다 자신의 영역을 가지고 있기 때문입니다. 프로그램 실행시에 메모리에 할당 되어지기고 자기 영역에서

벗어나면 num 값은 사라지게 됩니다. 즉, if 와 else 영역 안에서만 유효하기 때문에 가능한 것입니다.
조건문, 명령문, method 컨셉은 동일합니다.  영역 안에서만 유효하다.
 

 

java 에서는 반복적인 수행을 할 수 있도록 만들어주는 명령어가 존재합니다.

 

- 반복문의 종류는 3가지 존재합니다.

 

1) While문

 

2) D0{ } While 문

 

3) For 문

 

 

 

 

각각 반복문에 대해서 예시를 통해 자세히 설명하겠습니다.

 

1) While 문

 

● 기본 형식

 

while(조건식)   //조건식 안에는 booleal(True or False) 값이 옵니다.

{

    실행문장;

    …

}

package 반복문;

public class WhileBasic {
public static void main(String[] args) {
    int num  = 1, result = 0;
        while(num < 5) { 
        	System.out.println("명령문 실행 :" + num); 
        	num++; 
        }    

 

주의할점!!

int num = 1;

while(num < 5) { 
System.out.println("명령문 실행 :" + num); 이대로 명령문을 실행하면 1이 반복해서 출력된다.  }

이대로 실행 시키면 강제로 멈추 않는한 반복해서 1이 출력합니다.

그렇기 때문에 조건에 맞추어서 num의 값이 증가할 수 있도록 증감연산자를 이용하여 값이 증가하도록 해줍니다.

 

 

예시)

1~100의 값을 더한 값을 출력하세요.

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
	    int num= 1, result = 0;
	    while (num<=100) {
	    	result += num;
	    	num++;
	    }
	    System.out.println("1~100의 합 : " + result);	

-  계산 값이 int의 범위를 넘는지 넘지 않는지 확인해야합니다.

 

 

 

2) D0{ } While 문

 

● 기본형식

 

do{     

    실행문장;

     …

} while(조건식);  // 조건식 안에는 boolean(True or False)의 값이 옵니다.

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int num = 0, result = 0;
		do {
		    num++;
			System.out.println(num);
		}while(num<5);

: 결과 값으로 1~5까지 출력 됩니다.

 

그렇다면 위의 while 문과 do {} while 문의 차이점은 무엇일까요?

 : do while 문은 한번은 실행을 한 이후에 조건을 체크하고,  while 문은 처음부터 조건을 확인하기 때문에 한번도 출력되지 않을 수 있습니다.

 

예시)

1~100의 값을 더한 값을 출력하세요. (누적값 , 카운팅 값, 총 합을 출력하세요.)

 

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int num = 1; int result = 0;
		do {
		
			result+=num;
			System.out.println("카운팅 값 : " + num);
			num++;
			System.out.println("누적값 : " +result);

		}while(num<=100);
		
		System.out.println("1~100의 합 : " +result);

 

 

3) For 문

:  두괄식으로 조건이 제시되기 때문에 가독석이 좋아서 개발자들이 가장 많이 사용하는 반복문 입니다.

 

● 기본형식

for(초기식; 조건식; 증감식)

{

      실행문장;

      … 

}

package 반복문;

public class 반복문{

	public static void main(String[] args) {
		int result = 0;
		for(int num=1;num<=5;num++) {
			System.out.println(num);	
		}

 

● for을 이용한 활용식

 

⑴ 1~100사이의 (양의) 짝수를 출력하시오.

 

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int result = 0;
		for(int num=1;num<=100;num++) {
			if(num%2==0) {
				System.out.println(num);
			}
				
		}

- if 조건문을 활용하여 2로 나누었을 때 나머지의 값이 0이 되면 짝수 이므로 그 값을 출력하도록 합니다.

 

⑵ *1~100 사이의 5의 배수이면서 7의 배수를 출력하시고, 5의 배수 이거나 7의 배수를 출력하여주세요.

*1~100 사이의 (양의) 짝수를

5와 7의 배수 

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int result = 0;
		for(int num=1;num<=100;num++) {
			if((num%5==0)&&(num%7==0)) {
				System.out.println(num);
                
5의 배수 이거나 7의 배수

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int result = 0;
		for(int num=1;num<=100;num++) {
			if((num%5==0)||(num%7==0)) {
				System.out.println(num);

 

if 조건문 안에 논리연산자를 이용하여 and의 기능이 필요할 때 && 를 사용하고, or 의 기능이 필요할 때 || 를 사용합니다.

 

 

 

기타) Breake, Continue

 

각각 예시를 통해서 설명하겠습니다.

 

Breake) 그 식 안에서 나가도록 만드는 명령어 입니다.

 

Q) 1~100 사이의  5의 배수 이면서 ,  7의 배수인 첫 정수만 출력하시오.

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		int result = 0;
		for(int num=1;num<=100;num++) {
			if((num%5==0)&&(num%7==0)) {
				System.out.println(num);
				break;
			}
				
		}

결과값 = 35 // 처음 결과를 받고 위의 코드에서 나오게 만들어주는 명령어 입니다.

 

 

 

Continue)

for 문 안에서는 끝으로 이동해 가라고 명령해주고, while 문과 do while 문에거서는 조건으로 돌아가도록 만듭니다.

package 반복문;

public class 반복문 {

	public static void main(String[] args) {
		for(int num=1;num<=100;num++) {
			if((num%5 != 0)||(num%7 != 0)) {
				System.out.println(num);
				continue;
			}
			
		}

continue; num=1일때,  (num % 5 != 0) 의 값은 true 이므로 num++로 올라가게 해준다.

 

 

 

지금까지 공부한 것중에 가장 많이 사용되는 if의 예제를 조금 더 풀어보도록 하겠습니다.

 

① 구구단 2단을 출력하세요.

package 구구단;

public class 2단{

	public static void main(String[] args) {
		for(int num=1;num<=9;num++){
			System.out.println("2 x "+ num + " = " + (2*num));
			
		}
	

 

② 구구단 전체를 출력하세요. (가로 , 세로)

package 구구단;

public class 구구단 세로 출력{

	public static void main(String[] args) {
		for(int num=2;num<=9;num++){
			for(int i=1;i<=9;i++)
			System.out.println(num+" x " +i+ " = " + (i*num));
			
		}
        
package 구구단;

public clas 구구단 가로 출력 {

	public static void main(String[] args) {
		for(int num = 2; num <=9; num++) {
			for (int i = 1; i <=9;i++) {
				System.out.print(num + " x " + i + " = " + (num*i)+ " ");
				
			}System.out.println();
		}
	}

 

 

③ ( * ) 모양을 사용하여 반쪽짜리 tree 모양 과 역 tree모양을 출력하세요.

package 반 tree;


public class 반 tree {

	public static void main(String[] args) {
		for(int num=1; num<=10 ; num++){
			for(int i=1 ; i<=num ; i++) {
				System.out.print("*");
			}System.out.println();
		}

	    }	
		

package 반 역 tree;

public class 반 역 tree {

	public static void main(String[] args) {
		for(int num=10; num>=1 ; num--){
			for(int i=1 ; i<=num ; i++) {
				System.out.print("*");
			}System.out.println();
		}

	    }	

 

 

 

 

 

 

1~100 사이의 (양의) 5의 배수 이면서, 7의 배수 첫 정수만 출력

 

결과값 : 35

 

// for 문안에서 끝으로 이동해 가라고 명령하는 것이다.= x++
   // while 조건으로
   // do while 조건으로

 

continue; x= 1 일때, (x % 5 !=0) 의 값은 true 이므로   x++ 로 올라가게 해준다.

 

 

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 객체지향언어(Object oriented Programming) [Class, new]  (0) 2020.04.26
[JAVA] METHOD  (0) 2020.04.25
[JAVA] 조건문(If , Switch)  (0) 2020.04.22
[JAVA] 자료형변환(Type Casting)  (0) 2020.04.22
[JAVA] 연산자 (Operator)  (0) 2020.04.21

if 문  : 특정 조건이 만족될 때에만 실행하는 문장 입니다. 

 

- 괄호 안에는 boolean 값만 올 수 있습니다.

 
- 괄호안에 true 값이 오면 조건을 계산하고(실행 O) ,false 가 나오면 조건들을 건너뛰게 된됩니다.(실행 X).


- 괄호안에 true or false 직접적으로 넣지 않고  비교연산자 또는 논리연산자를 넣어서 변수의 값을 컴퓨터가 계산하게

  합니다. (결과 값 : boolean)

 

 

● if문

public class IfBasic { 
	public static void main(String[] args) {
		int num1 = 47 , num2 = 38; // 변수 선언 및 초기화
		int result = 0;
		
		result  = (num1 * num1 * num2 * num2) / (num1 - num2);
		
		if (result>50000) {
			System.out.println("실행 결과 값이 50000 이상입니다." );
			System.out.println("결과값:"+result);
			System.out. println("결과 값 출력 후 프로그램 종료...");
			
	    result>50000 값이 true 가 나오면 뒤의 조건을 수행한다

 

 

● if 문과 else

 

if 문에서 true이 나왔을 때, if 문의 조건을 수행하고, false가 나왔을 때, else 문을 수행합니다.  

package 조건문;

public class 조건문{
	public static void main(String[] args) {
        int num = 39; 
		 
		if(num % 2 == 0) { 
			System.out.println("값은 짝수입니다.");  // true 일때, 조건 수행
		}else { 
			System.out.println("값은 홀수입니다.");	// false 일때, 조건 수행
		}
		System.out.println("프로그램을 종료합니다.");  

 % 앞에 값을 뒤에서 나눈다음 나머지를 출력해준다는 뜻과 정수일 때만 의미가 있습니다.
num % 2 == 0 의 의미는 2배수 즉 짝수를 의미하며,  나머지가 1이 나올때 홀수 의미합니다.

 

 

● if 문과 else 심화

package 조건문;

public class 조건문 {  
	public static void main(String[] args) {
		
		int birth = 1992; int age = 0; 
		age = 2020 - birth + 1;
		
		System.out.println("당신의 나이는"+age+"살 이군요.");
		
		if(age < 10) { 
			System.out.println("10대 미만입니다.");
		}else {  // age >= 10
			
			if(age < 20) { // 10<= age < 20
				System.out.println("10대 입니다.");	
			}else { // age >= 20 
            
				if(age < 30) { // 20<= age <30
					System.out.println("20대 입니다.");	
				}else {
					System.out.println("30대 이상입니다.");	

 

위의 식을 가독성이 좋게 편집하보겠습니다. ( else if의 형태로 편집)

  if(age < 10){ 
    System.out.println("10대 미만입니다."); 
  }else if(age < 20){  // 10<= age < 20
      System.out.println("10대 입니다."); 
  }else if(age < 30){ // 20<= age <30
      System.out.println("20대 입니다."); 
  }else {System.out.println("30대 이상입니다.");

 

 

● 삼항 연산자/조건연산자(? : - 피연산자가 3개 )

 

- ? 앞에는 boolean 의 값만 올 수 있습니다.

- 직접적으로 true ,false 를 넣는 것이 아닌 비교연산자, 논리연산자를 넣습니다. 
- true의 값 조건 : false의 값 조건을 수행 합니다.
- 간단한 형태의 결과를 빠르게 받아보고 싶을 때 사용합니다.

 

public class CondOp {
	public static void main(String[] args) {
		int num1 = 50, num2 = 100;
		int big = 0, diff = 0;
        
        big = (num1 > num2)? num1:num2 ;
		diff = (num1 > num2)?num1 - num2:num2 - num1; 
		System.out.println("큰 값:"+big+", 두 값의 차:"+diff); 
        // 출력 값 : 큰 값:100, 두 값의 차:50
		

 

 

switch 문 : 조건에 따라서 실행시킬 코드를 구분 합니다. 

 

- num의 경우의 수를 case문 안에 명시합니다. 조건을 체크해서 경우의 수에 맞추어 정의해서 사용합니다.


- case , break 와 항상 함께 사용합니다. break의 의미는 수 일치 문을 벗어남을 말합니다.

 

- break; 를 넣지 않으면 맞는 조건 이후의 조건들을 모두 수행해서 출력해줍니다.


- default 값은 넣어도 되고 넣지 않아도 문제가 되지 않습니다.

 

 

● switch문

switch(num) {
		    case 1:
		    	System.out.println("정수의 값은 1이에요.");
		    	System.out.println("Good Morning, Java!");
		    	break;
		  
		    case 2:
		    	System.out.println("정수의 값은 2이에요.");
		    	System.out.println("Good Afternoon, Java!");
		    	break; 
		    
		    case 3:
		    	System.out.println("정수의 값은 3이에요.");
		    	System.out.println("Good Evening, Java!");
		    	break;
		    	
		    default:
		    	System.out.println("정수의 값은 1~3이외의 값이에요.");
		    	System.out.println("Hello, Java!");
		    	break;

 

 

 ● switch 문 간략하게 정리하기 / 7번전 이후 문자 입력이 가능해졌다.

		
        String name1 = "세종대왕";
		
		switch(name1) { 
		case "김유신": case "홍길동": case "세종대왕": // 중복되는 값이므로 가능
			System.out.println("제 이름은 "+name1+" 입니다.");
			break;
		default:
			System.out.println("이름을 알 수 없습니다.");
			break;

 

 // num의 경우의 수를  case문 안에 명시한다. 조건을 체크해서 경우의 수에 맞추어 정의해서 사용하는 것이다.
  // case , break 와 항상 함께 사용된다. break의 의미는 수 일치 문을 벗어나라는 것이다.
  // break; 를 넣지 않으면 맞는 조건 이후의 조건들을 모두 수행해서 출력해준다.
  // default 값은 넣어도 되고 넣지 않아도 문제가 되지 않는다.

 

 

 

● switch문

  // 위의 swich문 간략하게 편집하기
  

  // 위의 swich문 간략하게 편집하기
  

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] METHOD  (0) 2020.04.25
[JAVA] 반복문(While문, Do While문, For문)  (0) 2020.04.25
[JAVA] 자료형변환(Type Casting)  (0) 2020.04.22
[JAVA] 연산자 (Operator)  (0) 2020.04.21
[JAVA] 상수(literal)  (0) 2020.04.21

자료형변환이란?

:  변수 또는 리터럴의 타입을 다른 타입으로 변환하는 것을 의미합니다.  

 

1) 자동 형변환

 

자료형도 다르고, 메모리의 크기도 다르다. 원칙적으로는 error 나와야 하는데 왜 출력이 잘 될까?
더 큰 용량에 저장해주는 것은 원데이터의 손실 없이 저장해주는데 문제가 없습니다. 이와 같이 자바 스스로 자료형을 바꿔주는 것 = 자동형 변환 이라고 합니다.

unicode(int,4byte), alphabet(char,2byte)
		
System.out.println(alphabet); // 출력 : A
System.out.println(unicode); // 출력 : 65

 

char -> int 로 자동형변환 해준 것 입니다.

 

(주의)

 short unicode; unicode = alphabet;  -- error

같은 2byte지만 short는 음/양수를 모두 가지고 있기 때문에 char의 값이 다르므로 error 일으킵니다.

 

 

2) 강제형변환 

 

값을 맞추기 위해서 데이터 손실할 수 가능성도 있지만 그 값을 강제로 버리고 변환시키는 것입니다.

int score1 = 23.5;  int = double 은 불가능!  데이터가 손실됩니다. 
소수점 이하를 버리고 정수의 값만 취해서 int에 넣으려고 한다면?? 어떻게 해야할까요? 
		
int score1 = (int)23.5; // 자료형을 int로 강제로 변환 시킨것이다. 
System.out.println(score1); // 23

 

주의)

double num = 23.5;
int score = (int)num; 강제형변환이 되었다고 해서 num의 값이 바뀌는 것은 아닙니다.
		              실수형을 알아서 정수형을 바꿔서 출력해줍니다. 
System.out.println(score); // 23
System.out.println(num); // 23.5

 

 

문제) 다음과 같은 오류를 풀어낼 수 있는 방법은 무엇일까요?

	int sum = 0.5 + 10;  -- error

int sum = 0.5(double) + 10(double)자동 형변환
int sum = 10.5(double);
int 의 형태로 double이 형변환이 되지 않기 때문에 error 가 나타난것입니다.

 

해결점)

 1) double sum = 0.5 + 10;
 2) int sum = (int)(0.5+10);

 

3) 명시적변형

 

(int)는 생략해도 되지만 가독성을 높이기 위해서 하는 것 : 명시적 형 변환 입니다.

unicode = (int)alphabet;

 

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 반복문(While문, Do While문, For문)  (0) 2020.04.25
[JAVA] 조건문(If , Switch)  (0) 2020.04.22
[JAVA] 연산자 (Operator)  (0) 2020.04.21
[JAVA] 상수(literal)  (0) 2020.04.21
[JAVA] 변수(Variable)  (0) 2020.04.20

Java에서는 많은 수의 연산자들이 존재합니다. 연산자를 통해서 기초적인 것부터 시작해서 심화에 이르기까지 다양하게 사용합니다. 지금부터 그 다양한 연산자들을 알아보겠습니다.

 

연산자(Operator)란?

:  +, -, *, /, <, > 등등…  가장 기본적인 산술 연산자로 시작합니다.

 

피연산자(Operand) 

: 연산자의 기능(동작) 적용 대산(변수, 상수…)

 

 

1) 산술연산자 / 대입연산자

(=) 대입 연상자 : 연산자 오른쪽에 있는 값을 왼쪽 변수에 대입합니다(+ , - , * , /)

'+' 은 숫자,문자 둘다 더해준다. 
resultInt = num1 + num2;
System.out.println(num1 + "+" + num2+ "="+ resultInt); // 20+8=28
		 
resultInt = num1 - num2;
System.out.println(num1 + "-" + num2+ "="+ resultInt); // 20-8=12
		 
resultInt = num1 * num2;
System.out.println(num1 + "*" + num2+ "="+ resultInt); // 20*8=160

'/' int/int로 계산해주면 int의 값이 나온다. 결과값 = 2( 몫의 결과만 보여준다)
resultInt = num1 / num2;
System.out.println(num1 + "/" + num2+ "="+ resultInt); // 20/8=2

● % : 외쪽의 피연산자 값을 오른쪽의 피연산자 값으로 나눴을 때 얻게 되는 나머지를 반환합니다.

Ex) val = 7%3

resultInt = num1 % num2;
System.out.println(num1 + "%" + num2+ "="+ resultInt); // 20%8=4
		 
double num3 = 7.8 , num4 = 3.2; 
double resultDouble; 
		
resultDouble = num3 / num4; // 출력 : 7.8/3.2=2.4375
System.out.println(num3 + "/" + num4+ "="+ resultDouble);
		 
% 연산자 - 실수형에서 나머지 연산은 의미 없다. 
resultDouble = num3 % num4; // 출력 : 7.8%3.2=1.3999999999999995
System.out.println(num3 + "%" + num4+ "="+ resultDouble);

 

 

2) 복합대입연산자

 

가독성은 num = num+50 이 더 좋습니다. += 은 같은 기능을 할 수 있게 만든 연상자입니다.

? 복합대입연산자 사용할까요? 무엇을 강조하려고 하는 것일까요?

그냥 간단하게 풀어내기 위함이 아니라!!!!!

현재의 값에서 50누적하겠다는 의미가 담겨있고 그것을 강조하기 위해서 사용합니다.

num += 50; // num = num+50; 사이에 여백이 있으면 안됩니다. 
num -= 50; // num = num-50; 누적의 의미를 강조 	
num *= 50; // num = num*50; 누적의 의미를 강조 
num /= 50; // num = num/50; 누적의 의미를 강조 
num %= 50; // num = num%50; 누적의 의미를 강조  
		

 

 

3) 비교연산자 (Boolean)

 

특징 : 결과값을 True or False 로 출력합니다.

종류 : <, > , <=, >= , ==(좌우가 같다) , !=(다르다)

package 비교(관계)연산자;

public class 비교(관계)연산자{ 

public static void main(String[] args) {
		
System.out.println(350<200);
System.out.println(350>200);

System.out.println(350<=200);
System.out.println(350>=200);
		
System.out.println(350==200);
System.out.println(350!=200);
		

 

 

4) 논리연산자

 

: 피연산자로 Boolean 값만 올 수 있습니다.

 

&& : A&&B

A B 모두 True 이면 연산결과는 true (논리 AND)

 

|| : A||B

A B 둘 중 하나라도 True이면 연산 결과는 True(논리 OR)

 

! : !A (단항을 가짐)

연산결과는 ATrue 이면 false , A false이면 true(논리 NOT)

boolean X = false, Y = false; // 초기화
		
System.out.println(X+"&&"+Y+"="+(X&&Y)); // false&&false=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||false=false
		
X = false; Y = true;
System.out.println(X+"&&"+Y+"="+(X&&Y)); // false&&true=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||true=true
		
X = true; Y = false;
System.out.println(X+"&&"+Y+"="+(X&&Y)); // true&&false=false
System.out.println(X+"||"+Y+"="+(X||Y)); // false||true=true
		
X = true; Y = true; 
System.out.println(X+"&&"+Y+"="+(X&&Y)); // true&&true=true
System.out.println(X+"||"+Y+"="+(X||Y)); // true||true=true

 

논리연산자는 주로 비교연산자와 함께 활용으로 많이 사용합니다.

int num1 = 10, num2 = 20; boolean result;
		
비교연산자  + 논리연산자  
result = (num1 == 10) && (num2 == 30);
System.out.println((num1 == 10) && (num2 == 30));
System.out.println(result);
System.out.println((num1 == 10) + "&&" + (num2 == 30) + "=" + result);
System.out.println("result:" + result);

 

 

※ Short-Circuit Evaluation

result = ((num1+=10)<0) && ((num2 +=10) >0); 
가로를 없애버리면 원하는 피연산자로 연산이 되지 않습니다.  
System.out.println("결과:"+result);
System.out.println("num1:"+num1); // num1:10
System.out.println("num2:"+num2); // num2:0
(num1+=10)<0 : false 논리 연산자 && 는 앞의 코드가 false 이므로 결과는 false 이기 때문에
뒤 코드는 수행하지 않고 바로 결과(false)를 반환합니다. 그렇기 때문에 num2 = 0 이라는 값이 출력됩니다.

 

5) 증감연산자

연산우선순위에서 거의 가장 높습니다.

num2 = ++num1;  // 전위 증가 연산자 , num1 += 1; 1증가 시켜서 누적(저장)시킵니다. 
System.out.println("num1:"+num1); // num1:8
System.out.println("num2:"+num2); // num2:8
		
num2 = num1++; // 후위 증가 연산자 , num1 += 1;  1증가 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); //num1:8 
System.out.println("num2:"+num2); //num2:7
	
num2 의 값이 다르다. why?


num3 = --num1;  // 전위 감소 연산자 , num1 -= 1; 1감소 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); // num1:7
System.out.println("num3:"+num3); // num3:7
		
num3 = num1--; // 후위 감소 연산자 , num1 -= 1; 1감소 시켜서 누적(저장)시킵니다.
System.out.println("num1:"+num1); // num1: 7
System.out.println("num3:"+num3); // num3: 8
		
num3 의 값이 다르다. why?

 

 

6) 비트연산자

 

(bit 단위로 계산해주는 연산자) = 결과는 논리 연산자와 같습니다.

(메모리에 저장할 수 있는 최소단위를 byte로 사용 하나의 byte8bit로 구성 : 0 or 1)

펌웨어 (부품들을 조작하는 것)에서 많이 사용합니다.

data분석에서는 많이 사용하지 x

 

- & : 비트단위로 AND 연산을 합니다. 3 & 5 = (00000011/ 00000101) 00000001 = 1

-  |  : 비트닽위로 OR 연산을 합니다.  3 | 5 = 7 (00000011/ 00000101) 00000111 = 7

- ^ : 비트타위로 XOR 연산을 합니다.

- ~ : 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환합니다.

 

 

7) 비트시트시프트연산자

 

펌웨어(부품들을 조작하는 것)에서 많이 사용합니다.

 

<< : 한 비트 옆으로 가라 (비트 이동만으로 곱하기 2한 값을 얻을 수 있다.)

000000001(1) -> 000000010 (2) -> 000000100 (4) -> 0000001000 (8)

 

>> : 한 비트 옆으로 가라 (비트 이동만으로 나누기 2한 값을 얻을 수 있다.)

0000001000 (8) -> 000000100 (4) -> 000000010 (2) -> 000000001(1)

 

>>> : 비트 열의 두 칸 오르쪽으로 이동시킨 결과 반환

 

 

★ 연산자 우선 순위

 

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 조건문(If , Switch)  (0) 2020.04.22
[JAVA] 자료형변환(Type Casting)  (0) 2020.04.22
[JAVA] 상수(literal)  (0) 2020.04.21
[JAVA] 변수(Variable)  (0) 2020.04.20
[JAVA] Java 기본 형태 및 기초  (0) 2020.04.20

Java 에서 상수란 무엇일까요?

 

상수란!!

: 자료형을 기반으로 메모리 공간에 저장되어 있는 값을 이야기 합니다. 그렇기 때문에  이름이 존재하지 않으며 메모리에 저장된 값을 변결 시킬 수 없습니다.

 

예를 들어 data1 = 5489; 이란 변수의 값을 넣었습니다.

여기서 5489 도 메모리에 저장이 되어 있고, data1의 값도 메모리에 저장이 되었습니다.

Data1 4byte를 할당하고 5489의 값을 할당하여 값을 저장합니다. Java가 할당을 해준것 입니다.  

상수 (수학 : 변하지 않는 값) - 5489의 자리를 알 수 없기 때문에 변경시킬 수 없습니다.

Data1 은 언제든 변할 수 있고, 5489와 같이 기본적으로 메모리에 저장되어 있는 값은 변하지 않습니다.

 

 

● 상수 자료형의 사용 (대표)

 

- 정수의 경우 4byte : int

 

- 실수의 경우 8byte : double

 

- 문자의 경우 2byte : char

 

- 참과 거짓의 경우 1byte : boolean(0이 아니면 : true , 0인 값 : false)

 

 

● 상수를 넣을 때 주의할 점!! 

 

 

- 정수의 경우

int num = 3000000000; int의 범위를 넘어서서 error 가 일어납니다, 
long num = 3000000000; -- error
long num = 3000000000L; 

- long을 보고 8byte 메모리를 할당해주지만 상수는 기본적으로 int의 형태로 저장되어지기 때문에 30억이라는 수가 int의 범위를 넘어서서 error 를 일으킵니다.

- 문제를 해결하기 위해서는 상수의 값을 long의 값으로 할당해줍니다. 그리고 상수의 뒤에 (L,l) 을 넣어줍니다.

 

 

- 실수의 경우

 float pi = 3.14 ; -- error

- error 실수형 상수는 double으로 기본적으로 할당하기 때문에 8byte 의 데이터를 4byte의 데이터 안에 넣으려고 하니깐 데이터 손실 할수있기 때문에 error를 일으킵니다.

 

- 해결점

1) double 의 형태를 float 형으로 바꿔줍니다.

2) 상수 뒤에(F,f)을 넣어줍니다.

1) double pi = 3.14;

2) float pi = 3.14F;

 

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 자료형변환(Type Casting)  (0) 2020.04.22
[JAVA] 연산자 (Operator)  (0) 2020.04.21
[JAVA] 변수(Variable)  (0) 2020.04.20
[JAVA] Java 기본 형태 및 기초  (0) 2020.04.20
[JAVA] 이클립스(eclipse) Download  (0) 2020.04.17

Java에서 사용되는 변수란 무엇일까요?

 

: 데이터의 저장과 참조를 위해 할당된 메모리 공간입니다.

  단 하나의 값을 저장할 수 있는 공간입니다.

 

변수 수행의 특징 : 얼마든지 변수에 새로운 값을 넣을 수 있습니다.

(값이 변할 수 있다는 특징 때문에 변수라는 이름을 사용하게 되었다고 합니다.

 

변수를 만드는 이유, 할당(저장)한 이유:  데이터를 저장하고 필요할 때 사용하기 위함입니다.

 

 

1) 데이터를 메모리에 저장되도록 요청해야 합니다. 
int : 메모리 공간을 할당해달라는 요청( key ward(예약어) ) 자바가 메모리를 관리해주고 있습니다.
메모리중에서 사용하고 있지 않은 장소를 할당해줍니다. 할당 받은 공간에 기억하기 쉬운 이름으로 붙여줍니다.

package exam01;

public class DefineVariable {
	public static void main(String[] args) {
    int data1;
    int data2;
    }
}

    
    

 

(2) 메모리 접근 방법 ( 데이터 저장 ) - 초기화

data1 = 5489;
data2 = 9587; 
data1 = 5489; 
data1 = 6000; // 변수 재사용 

메모리에 접근 할때는 내가 지정해준 이름으로 접근한다. 저장 하는 것은 (=)을 사용합니다.

data1에 5489를 저장해달라는 의미입니다. (=) 저장연상자 or 대입연상자라고 칭합니다. < 변수 = 저장할 값; >

 

(3) 메모리 접근 방법 (데이터 읽어오기) - 변수의 이름으로 불러옵니다.

System.out.println(data1);
System.out.println(data2);

 

여기서 잠깐!

data1 + data2; ERROR 

왜 오류가 나타났을까요?

그 이유는?? 메모리에서 data1,data2를 읽어 와서 연산까지 했는데 그 다음 수행할 명령어가 없기 때문입니다.

항상 출력을 할지 확실하게 명령어를 입력해주는것을 주의하세요.

 

 

 

● 변수 이름 짓기 규칙

 

1. 규칙

 

- 문자, 숫자, 한글(유니코드) 사용 가능합니다. (해당 나라의 언어로 이름을 짓는 것은 지양)

 

- 대소문자 구별, 길이 제한 없습니다. (적당한 길이로 지정하는 것이 좋습니다.)

 

- 예약어 사용 금지 합니다. (헝가리언 방식과 같이 공백 없이 사용은 가능)

 

- 숫자로 시작하면 안됩니다.

 

- 특수 문자는 ‘_’‘$’만을 허용 합니다. (자바 자체가 $를 붙여서 만들어주는 이름으로 활용.)

 

- 공백이 포함될 수 없습니다. (다른 것으로 인지하여 ERROR)

 

 

2. 권고사항 (ERROR를 내지는 않지만 프로그래머들의 규칙과 같이 사용합니다.)

 

- 모두 대문자 피해야 합니다. 

 

- 생략형 피해야 합니다.  (너무 많은 축약은 피함, 너무 길게 짓는 것도 피함)

 

- 카멜/ 파스칼/ 헝가리언 표기법 사용 권장합니다.  

 

EmployeeNumber : 카멜 (자바, 파이썬, R은 카멜을 많이 사용합니다.)

보통 2단어로 만들고 대문자를 사용하여 구분하게 하여 가시적으로 해석하기 편하게 만듭니다.

 

Employee_num : 파스칼 = C

 

IntEmployeeNum : 헝가리언 (키워드 + 카멜) = 윈도우 프로그램 C++

마이크로 소프트에서 헝가리언 방식을 선호하여 많이 사용합니다.

 

 

 

 ● JavaData type (자료형의 종류)

 

- 수 정수 : byte , short , int , long

 

1 byte 의 수 할당 : 256 가지 (28제곱근) 128(27) : 음수 , 128(27) : 양수

2 byte 의 수 할당 : short = -32768 ~ 32767 (216)

4 byte 의 수 할당 : int = -2417483648 ~ 2147483647 (232)

웬만한 정수 값은 다 들어가기 때문에 일반적으로 정수 값을 다룰 때는 int를 사용합니다.

8 byte 의 수 할당 : long = -9223372036854775808 ~ 9223372036854775807

= 너무 많은 공간을 잡으면 다른 것을 할 수 없기 때문에 long 보다 int 를 사용합니다.

num1 = 55; // 초기화 
num2 = 15; // 초기화
System.out.println(num1-num2);//55-15 = 40 을 출력해준다.     // 출력 40
System.out.println(num1 + "-" + num2  + "=" + (num1-num2));  // 출력 55-15=40
        
       

 

여기서 잠깐!!

package exam03;

public class NoticeByteType {

	public static void main(String[] args) {
		byte data1 = 20 , data2 =30;
		byte result;
        
        result = data1 + data2;

위의 값은 ERROR 가 나온다. 왜 오류가 나왔을까?

 

byte result; -- result = data1 + data2; // -- ERROR(연산을 할 때)
효율적으로 설계하기 위해서는 long 형을 제외하고는 byte / short / int 는 int 로 잡아서 연산의 결과를 도출합니다.
Byte 로 선언했지만 내부에서 int 로 잡아서 계산하고 있기 때문에
Int(2byte) + Int(2byte) 의 값은 = 4byte의 값인데,

byte 안에 값을 넣으려고 하니 데이터의 손실이 발생함있으므로 java가 오류를 일으키는 것입니다.

 

해결점 : result 를 byte -> int 바꾸면 해결!


// 연산을 수행하는 목적이 아닐 때 굳이 int 로 담을 필요 없다. 연산시에만 주의하세요.

 

 

- 실수 : float , double

 

모든 실수 값은 수학적으로 표현할 수 없기 때문에 컴퓨터 상의 표현 방식으로도 표현할 수 없기 때문에 표현 방법을 만들어서 메모리 상에 표현할 수 있도록 만들었습니다.

정확도가 확실하지 않은 대신에 수식을 이용해서 값의 범위는 넓게 사용합니다.

 

4 byte 일 때 : float (소수점 이하 6자리까지 정확하게 표현)

8 byte 일 때 : double (소수점 이하 15자리까지 정확하게 표현)

일반적으로 double 을 사용합니다.

package exam04;

public class DoubleType {
	public static void main(String[] args) {
		double data1 = 3.14, data2 =1.05;  // 변수 선언 & 초기화 (실수)
		
		System.out.println(data1-data2); // 값을 잘 보관하고 있다. 
		
		data1 = 2.24; // 변수의 재사용 
		data2 = 1.22; // 변수의 재사용 
		
		System.out.println(data1-data2);  // 결과 값: 1.0200000000000002(오차 발생) 

 

모든 실수 값은 수학적으로 표현할 수 없으므로 컴퓨터 상의 표현 방식으로도 표현할 수 없기 때문에 표현 방법을 만들어서 메모리 상에 표현할 수 있도록 했습니다. 그렇기 때문에 실수의 오차가 발생할 수 있습니다.

// e표기법 
		double e1 = 1.2e-3; // 1.2 * 1/10(3승)  :  1.2 * 1/10^3
		double e2 = 1.2e+3; // 1.2 * 10(3승)  : 1.2 * 10^3 - (+) 생략 가능
		
		System.out.println(e1); // 결과 값 : 0.0012
		System.out.println(e2); // 결과 값 : 1200.0

 

 

 

- 자바는 문자와 문자열을 구분 (char)

 

문자 : 한글자 ( a,b,c,d…)

문자열 : 2글자 이상

package exam05;

public class CharType {
	public static void main(String[] args) {
		// char ^= Char (대소문자를 구별한다)
		char alphbet, hangeul;
		int unicode;
		
		// char : 하나의 문자 입력 : 하나의 글자를 넣을 때, 작은 따옴표를 넣어서 저장해준다. 
		alphbet = 'A'; 
		System.out.println(alphbet);
		unicode = alphbet;
		System.out.println(unicode); // 65 라는 숫자에 'A' 라는 글자가 들어있다. 
		

 

A라는 문자를 메모리에 저장 하는 것이 아니라 테이블을 찾아가서 A라는 문자의 정수 값을 읽어와서 변수 값의 메모리에 저장해주는 것이고, 그 값을 출력해 줌으로 A라는 문자가 출력되는 원리 입니다.

 

// 두 글자 이상의 문자를 저장할 수 있게 해주는 예약어 : String 
		String name = "홍길동"; 
		System.out.println(name);
		

 

- 참(True) 과 거짓(False) : Boolean

package exam06;

public class BooleanType {

	public static void main(String[] args) {
		//비교 연산자 
		System.out.println(35 > 25); // 값 : true
		System.out.println(35 < 25); // 값 : false
bool1 = 35 > 25; // true	
bool2 = 35 < 25; // false 
		
System.out.println(bool1); // True
System.out.println(bool2); // False

 

지금 까지 간략하게 변수에 대해서 알아봤습니다. 변수를 변하는 수로만 생가하면 안되며, 하나의 저장되는 장소로 인식하는것이 중요합니다.  변수의 특징 때문에 알고리즘이 가능하고, 결과를 가장 빠르게 피드백 받을 수 있고, 피드백 받은 것을 재활용할 수 있다는 사실을 꼭 기억하세요~~!!

'빅데이터 > JAVA' 카테고리의 다른 글

[JAVA] 연산자 (Operator)  (0) 2020.04.21
[JAVA] 상수(literal)  (0) 2020.04.21
[JAVA] Java 기본 형태 및 기초  (0) 2020.04.20
[JAVA] 이클립스(eclipse) Download  (0) 2020.04.17
[JAVA] 환경 변수 설정  (0) 2020.04.17

+ Recent posts