코딩

Day 03 기초 자바 - 자바의 상수와 변수 그리고 연산자 학습

Ledlaputa 2019. 12. 15. 23:43
이제 자바 프로그래밍을 위하여 이클립스와 JDK를 설치하고 간단한 콘솔 출력 함수를 이용한 예제를 배워 봤다. 
오늘은 자바 프로그래밍을 위한 상수와 변수를 배워볼 에정이며, 다양한 자료형도 함께 배워보도록 하겠다. 
 
 
자바 뿐만 아니라 대부분의 프로그래밍 언어를 배우기위해서는 상수와 변수의 개념 및 자료형에 대해서 반드시 알고 이해해야 한다. 
프로그래밍 언어마다 사용 문법의 차이가 있을 수는 있으나 기본 개념은 동일하니 어떠한 언어든 배워두면 개념을 파악하는데 도움이 된다. 
우리는 자바를 통해 프로그래밍에서 중요한 상수,변수, 자료형에 대한 내용을 파악해 보도록 하겠다. 
 
또한 지난시간에 배운 출력 메소드에 이어 오늘은 입력 메소드에 대해서도 배워 보도록 하겠다. 
마지막으로 자바에서 사용되는 다양한 연산자에 대해서도 그 종류와 사용 예제를 함께 풀어보도록 하겠다. 
 
다소 많은 내용이 될 수 있으나 자바 언어의 기초가 되는 부분이니 반드시 이해하고 넘어가야 할 부분이다. 그럼 이제 시작해 보자. 
 

 
1.상수와 변수와 자료형 
자바에서 기억창고에 해당되는 것을 변수라하고  숫자를 상수라고 한다.  

자바는 모든 작업을 할때 기억창고(메모리)를 사용한다. 사용 표현 방법은 아래와 같이 한다.  

 int aa=30; 

자바의 Memory 구조 

  • Heap Memory : 내가 마음대로 사용할 수 있는데, 기억창고가 허락하는 공간만큼을 할당한다. 
  • Static Memory : 프로그램 전체를 통해서 프로그램 종료까지 지워지면 안되는 것을 기억할 때 사용한다. 
  • Stack Memory : aa(같은 변수명), 기억창고를 잡았다가 필요없으면 사라진다. 메모리가 사용 속도가 빠른데 용량이 제한적이다. 
  • Code Memory : 내가 짠 프로그램을 기억하는 공간이다. (OS가 관장해서 사용자가 손 댈수 없다) 
  • 기억창고를 만들기 위해서는, 자료형 + 기억창고이름(변수명)이 필요하다. 
 

자료형 종류 (data type)

 

자료형

크기

크기표현

사용방법

int

정수, 4바이트

-2147483648 ~ +2147483647

 

short

정수, 2바이트

-32768 ~ +32767

 

byte

정수, 1바이트

-128 ~ +127

 

long

정수, 8바이트

-920경 ~ +920경

long dd=12312412345L;(숫자 뒤에 대문자 L쓴다)

double

실수, 8바이트

-1.7e308 ~ +1.7e308

평상시 실수 사용은 주로 double 

float

실수, 4바이트

-3.4*10의 38승 ~ +3.4*10의 38승 

float ff=3.14f; 

boolean

논리형, 1바이트

true, false 

boolean gg=false;

char

한 문자형, 2바이트

char hh='가'; (작은 따옴표)

 

String

문자열(여러문자)

 

String str="ondal"; (큰 따옴표)

   int ~ char ▲ Stack memory에 저장된다. (기본자료형)                                      

   string      ▼ Heap memory에 저장된다. (기본자료형이 아님)       

        


2.상수/변수/자료형 실습 예제 

예제1) 위의 자료형에 대해서 출력하는 코드를 작성해 보자 

public class DataType {

	public static void main(String[] args) {
		int aa=100; 
		System.out.println(aa);	
        
		short bb=200; 
		System.out.println(bb);
          
		byte cc=10; 
		System.out.println(cc);
          
		long dd=12012344123L; 
		System.out.println(dd);
          
		double ee=1231.233; 
		System.out.println(ee);
          
		float ff=123.34f; 
		System.out.println(ff);
          
		boolean gg=true; 
		System.out.println(gg);
          
		char hh='A'; 
		System.out.println(hh);
          
		String str="Aze"; 
		System.out.println(str);
	}
}

아래와 같이 콘솔화면에 내용이 출력된다. 

 

변수의 연산 

자바에서 =의 의미는 다음중 어떤 것일까 ?
    1) 대입(우->좌) 2) 같냐?
   정답은 1) 대입이다. 참고로 같다는 == 로 표시한다. 

+는 앞뒤의 값(내용)을 붙여준다. (수학의 +와는 틀림) 

	int a1=50;		  
	int a2=70;
          
	int a3=a1+a2; 
	//a3=50+70과 동일, =의 의미 1)대입(우 -> 좌로), 2)같냐
          
	int a4=a3*1000; 
	// 변수와 수 곱하기
		  
	System.out.println("계산 결과는 "+a3+" , "+a4);
	//자바에서 +는 붙여준다.답은 : 계산 결과는 120 ,120000

 

예제2)  변수 자료형 문제 : 달에서의 몸무게는 지구에서의 몸무게의 17%라고 할때, 달에서의 몸무게를 구하는 프로그램을 작성하시오

int mom=85; // 내 몸무게 

           int mom=85; // 내 몸무게          

           float moon=0.17f; // 달의 무게 연산 17%          

           System.out.println("내 몸무게 = "+mom+"키로그램, 달에서  몸무게 ="+(mom*moon)+"키로그램");

참고) 풀이 방법
문제분석 -> 순서도(flowchart) -> coding -> 실행 -> 결과나옴 -> 에러가 나오면 제일 첫번째 에러를 찾아내라. (제일 위쪽것) -> 실행 -> 디버깅 -> 완료

참고 에러의 종류

  • 문자(문법)이 틀린 에러 : Syntax error 
  • 구조가 꼬이거나,로직 문제 : Logic error (문제분석과 순서도가 허술한 경우)
	int mom=85; // 내 몸무게
		  
	float moon=0.17f; // 연산 방식 1) 달의 무게 연산 17%, 출력에서 계산
	System.out.println("내 몸무게 = "+mom+"키로그램, 달에서 몸무게 ="+(mom*moon)+"키로그램");
		  
	double dalmom=mom*0.17; // 연산 방식 2) 변수에 계산을 하여 출력
	System.out.println("내 몸무게 = "+mom+"키로그램, 달에서 몸무게 ="+(dalmom)+"키로그램");

 

예제3) 삼각형 밑변이 10, 높이가 7인 도형이 있다. 이 삼각형의 넓이를 구하는 자바 프로그램을 작성하시요. (밑변*높이)/2 = 삼각형의 넓이

	int a=10;
	int b=7;
	double c=(a*b)/2;
	System.out.println("밑변="+a+", 높이="+b+" 일때, 삼각형의 넓이는 "+c+"이다");

 

예제4) 썹씨를 화씨로 알려주는 공식을 찾아 자바로 프로그래밍 하시오 

       공식 = (0°C × 9/5) + 32 = 32°F

	double cel=25.5; //섭씨 온도
	double fah=(cel*9/5)+32; //화씨를 구하는 공식

	System.out.println("섭씨="+cel+"도 일때, 화씨="+fah+"도  입니다.");

 

참조) 프로그램 언어의 분류 

  • Compile 언어 : 한번 컴파일하면 그 뒤로 계속 사용이 가능하다. (Java, C# ...)
  • interpreter 언어 : 기계어가 별도로 만들어지지 않고, 실행할 때마다 기계어를 만든다. (HTML, javascript ...)

 

3.입력 관련 명령어

입력 관련 명려어인 Scanner class는 키보드 입력을 위한 명령어이다. 

	Scanner sc1= new Scanner(System.in);

// Scanner class를 쓰기위해 패키지를 import 해야한다. 

자바는 내장 클래스를 가지고 있다. 

패키지(package) : 1000개가 넘는 다양한 내장 클래스를 가지고 있어서, 이를 나눠서 방으로 보관하며, 이를 패키지라고 한다. 

이름 중복을 맞기 위해서, 이름.이름.이름형식의 이름을 가진다. 

>> com.oracle.net

*.jar는 *.class의 집합

Scanner class의 위치 

JRE System Library>rt.jar>java.util>Scanner.class

해당 클래스를 코드에 import하게 한다. 

해당 위치를 직접 찾지 말고 자동으로 찾게 한다. 이클립스에서는 필요한 클래스를 자동을 찾아주는 단축키 명령을 제공한다. 

위와 같이 클래스가 없을때 밑에 빨간 줄이 나오면 아래 단축키를 입력하면 자동으로 필요한 클래스를 불러주는 매우 편리한 기능이니 자주 사용하도록 하자. 

  • Ctrl + Shift + o : 자동 import class 명령

이틀립스의 단축키를 찾고 싶다면 아래 키를 입력하면 단축키를 볼수 있게 콤보창이 뜬다. 

  • Ctrl + Shft + l 

 

코드 분석 

           Scanner sc1= new Scanner(System.in); // 키보드 입력
           System.out.print("섭씨 온도를 입력하세요.:");
           double cel = sc1.nextDouble();
           double fah=(cel*9/5)+32; //화씨를 구하는 공식           

           System.out.println("섭씨="+cel+"도 일때, 화씨="+fah+"도  입니다.");

sc1 = 내가 만든 객체 이름
.nextDouble() = 입력을 받는 함수 // y=f(x)

결과 

Scanner class의 활용 

입력할 부분이 많아도 Scanner 객체 생성은 한번만 한다.(이후 변수 명을 바꿔 사용)  

           Scanner sc1= new Scanner(System.in); // sc1 객첵 생성 1번만          

           System.out.print("이름을 입력하세요.: ");
           String name = sc1.next(); // String 은 sc1.next()           

           System.out.print("섭씨 온도를 입력하세요.: ");
           double cel = sc1.nextDouble(); // double 은 sc1.nextDouble()

           double fah=(cel*9/5)+32; //화씨를 구하는 공식          

           System.out.println(name+"님 반갑습니다. 섭씨="+cel+"도  일때, 화씨="+fah+"도 입니다.");

결과 

 

package 패키지별로 구분

(default package) : package를 따로 안만들고 java 파일을 생성하면 여기에 들어간다. 

java class 생성시 패키지명을 입력한다. 

Superclass : java.lang.Object 

System.out.println() 과 같은 많이 쓰는 함수를 위해 제공하는 수퍼클래스 옵션 

새로 만든 java001패키지의 Yunsanja.java와 (dufault package)의 다른 java class와 충돌이 나지 않는다. 


4. 연산자 

우리가 일반적으로 수학에서 사용하는 다양한 산술 연산자를 자바에서도 사용할 수 있다. 단 표현 방식은 다소 차이가 있으니 주의하기 바란다. 우리가 일반적으로 알고 있는 산술 연산자 이외에 관계 연산자, 논리 연산자가 존재하며, 이에 대한 표현 방식과 프로그램 내에서 연산자간의 우선 순위가 존재하니 잘 이해하고 사용하기 바란다. 

산술 연산자 

+ - * / %(나머지)

연산을 할때

  • 정수/정수 = 정수 
  • 정수/실수 = 실수
  • 실수/정수 = 실수
  • 실수/실수 = 실수 

정수/정수 = 정수를 활용한 방법

  • 학점 계산 시
  • 80~89 : B, 70/79 : C
      /10        /10 
      =8         =7 
  • 8=B, 7=C
  • 몫을 가지고 간단히 학점을 계산 

문제) 27일 3의 배수냐? 
     27%3=0 이면 3의 배수 

문제) 27이 짝수냐 

     27%2=0 이면 짝수 

 

관계 연산자 

> < >= <= A==B(같냐) !=(같지 않다)

 

논리 연산자 

수학, SQL : and  or  not

Java      : &&   ||   !  

 

연산자 순서 

산술 > 관계 > 논리 : 산술이 제일 처음

문제) System.out.println(3>5 && 7>3); 

1순서) 3>5 

2순서) 7>3 

3순서) && 

문제) 2016년이 윤년이냐? (날짜 계산) 

윤년

  • 1년은 365.2422일
  • 0.2422*4=0.96 = 약 1일
  • 4년마다 윤년이  발생 = 4의 배수이면 윤년
    = 4로 나누어 떨어지면 윤년
  • 100년에 평년으로 = 100의 배수이면 평년
    = 100으로 나누어지지 않으면 윤년
  • 400년에 한번씩은 다시 윤년 = 400의 배수이면 윤년
    = 400으로 나누어 떨어지면 윤년
  • 4로 나누어 떨어지고, 100으로 나누어 떨어지지 않거나, 400으로 나누어 떨어지는 해가 윤년에 대한 자바식 표현 

풀이식 

System.out.println(2016%4==0 && 2016%100!=0 || 2016%400==0);

연도 입력 

           Scanner sc1 = new Scanner(System.in);
           
           System.out.print("년도를 입력하세요. : ");  
           int year1=sc1.nextInt();
           
           System.out.println(year1%4==0 && year1%100!=0 ||  year1%400==0);
 
결과 

 
오늘은 이렇게 자바의 기반이 되는 중요한 상수와 변수의 개념 그리고 자료형이 무엇인지를 살펴보았다. 그리고 출력 메소드에 이어 입력 메소드를 함께 다루어 보았는데, 앞으로 자바 강의에서 출력 메소드와 입력 메소드는 매우 많이 사용되니 충분히 연습하고 확실히 이해 하고 넘어가야 할 부분이다. 
또한 연산자 부분에서도 산술 연산자, 관계 연산자, 논리 연산자는 사용 빈도가 높은 부분이니 충분히 이해하고 다양한 연습을 해보도록 하자. 
 
다소 많은 내용이 될 수도 있으나 자바 학습에 기초의 기초가 되는 부분이라 생각하고 공부하기 바란다. 
그럼 다음 시간에는 조건문과 반복문에 대해서 알아보도록 하겠다.