9월 1일 수업 내용

 이클립스를 켜보도록 합시다. 


이클립스가 실행이 안되면 관리자 권한으로 시행해보기 ! 


ctrl + n을 눌러서 새로운창을 한번 만들어 봅시다. 

package : 클래스가 여러개 묶여 있는 것. 여러개의 클래스를 비슷한 성격의 꾸러미로 묶어놓은것. 


class를 생성. 



                public static void main(String[] args) {

                // TODO Auto-generated method stub

                }

}



" // TODO Auto-generated method stub "  이 부분은 메소드가 무슨역할을 한다는 것을 알려주는 것으로 지워도 됨. 

메서드 : 명령문의 집합

main 메서드 : 프로그램의 시작과 끝 

주석 : 프로그램 코드로 인식하지 않는 문장 즉 반영이 되지 않는 문장 

주로 코드를 설명하는데 사용한다. 

  한줄짜리 주석은 //로 시작한다. 

    한줄짜리 주석의 단축기 : ctrl + shift + c

 범위주석 ( 전체를 다 주석처리할수 있는것 ) /* */

             

    범위주석의 단축기 : ctrl + shift + /

    범위주석을 해제하는 단축기 : ctrl + shift + \ 

         범위주석을 해제할때는 /* */ 사이의 어떤 영역이든 클릭하면 된다. 



데이터의 종류


- 정수 : 10, -5 

- 실수 : 3.15 , -1.5 

- 문자 : 'a', '3' 따옴표로 묶여 있는 것이 문자. ( 숫자임에도 따옴표로 묶여있으면 문자 ) 

- 논리 : true, false 논리에는 두가지 데이터만 있다. 


프로그래밍에서는 데이터를 사용하기 위해 종류별로 이름을 붙여 놓았다. 

 ( 자료형 : data type 데이터 타입은  ) 


기본형 타입 

1. 정수 : byte (1), short (2), *int(4) , long (8) 

일반적으로 int을 많이 사용한다. 가장 많이 사용하는 것. 

()는 크기를 의미하며 가로안에 든것은 1바이트, 2바이트, 4바이트, 8바이트 크기별로 표현할 수 있는게 다름. 


2. 실수 : float(4) double(8) 

숫자의 표현할 수 있는 정확도가 다름 근사치를 표현 7자리, 15자리까지 사용 가능 


3. 문자 : char (2) 


캐릭터. 2바이트의 크기이며 문자를 한글자만 표현이 가능하다. 


4. 논리 boolean ( 1) 

1바이트 true 와 false 를 표현 가능 



변수란 ? ( 상수 vs 변수 ) 


상수란 값이 변하지 않는 데이터 ( 예 : 10, -5) 

변수란 값이 변하는 데이터 ( 예 : x, y ) 


변수를 만들고 변수를 조작해서 원하는 결과를 만들어내는 것이 프로그래밍의 전부이다. 


변수를 만드는 것 : 변수 선언 

변수를 만드는 방법 : 데이터 타입, 변수이름 


ex) int name

 ( name 은 임의로 정할 수 있는 변수 )


-데이터 타입을 선택해야 한다 ( int처럼 ) 

-데이터 타입을 선택할 때는 표현하고자 하는 데이터에 맞는 타입을 선택해주면 된다. 

-변수 이름을 정할때는 표현하고자 하는 데이터의 의미와 부합하는 이름을 지어주면 된다. 

   ex) double pi;

-변수를 만들 때 주의할 점 

 빨간줄이 생기면 문법상의 오류가 있어서 번역을 할 수가 없다는 뜻. 

 문제의 원인 : 똑같은 이름의 변수가 위에도 있다. 

한블록안({})에서는 이름이 중복되어서는 안된다. 

중과로에서는 중복되는 이름이 오면 안됨 -> 컴파일 에러가 발생 빨간 밑줄 -> 실행할 수가 없다. 


변수를 만드는 것은 변수를 만들면 -> 메모리 공간을 저장할 수 있게 해줌 

값을 저장하기 위해서는 = ( 대입 연산자 ) : 오른쪽의 값을 왼쪽의 변수에 저장 



long name; 

double pi; 

name = 10; // 정수를 표현, 초기화한다. -> 변수에 처음으로 값을 저장하는 것. 

;는 문장의 마침표 역할을 한다. 

pi = 3.14; 실수를 저장. 변수의 타입에 맞는 값을 저장해야함. 


저장을 할때 주의할 점 : 선언과 초기화를 동시에 해주는게 


int abc = 30; 

-> int abc는 int는 정수를 표현하는 data type이고 abc는 변수 30은 초기화로 int abc 에 30을 넣어주는 것 ; 얘는 문장의 맞침표. 


long h = 40L; 

 long 은 정수 data type이고 long h는 h를 선언한것. 40은 h에 초기화한것. L은 접미사로 숫자가 Long 타입이다를 알려주는 것인데 소문자도 되지만 대문자로 쓰는게 헷갈리지 않는다. 

접미사 L을 붙여야 long 타입이다. 


float f = 5.5f; 

float f는 f라는 변수를 실수(float)으로 선언한것. 5.5는 f에 초기화한것. 뒤에 f는 접미사 f를 붙여야 float 타입이 된다. f를 붙이지 않으면 실수는 기본적으로 double 타입이다. 


boolean b = true; //true, false 


char c = '한'; 따옴표안에 한글자만 넣어야 한다. 두글자 이상을 넣으면 에러, 빨간줄이 생긴다. 

char는 character data type으로 c를 문자 data type으로 선언해준것이고 









질문사항 : new java , method, class, package 의 제대로된 비교와 정의. 


선언 및 초기화 


byte Y  =  3;

short x = 20;

int ad = 300

long kr = 2039L;


float xd = 3.29f;

double c = 40302.30;


char g = '수';

boolean kl = false;


변수 안에 있는 것을 출력을 해 보자. 



System.out.println(name);  -> ()안에 있는 애를 출력. 

실행하는 단축기 : ctrl + f11 



타입의 선택 기준


정수 


- byte short : 메모리를 절약할 때 (메모리는 램) 


- int : 기본 int의 기본은 -20억 부터 20억까지 


-long : int 의 범위를 벗어날때 

약 900경정도 



실수


- float : 메모리를 절약해야 할때 int 와 4바이트로 같지만, 데이터를 저장하는 방식이 int 와 다름. 훨씬 더 큰 숫자를 표현할 수 있다 ( 실수니까 ) 소숫점 위치만 저장하면 되기 때문에 int보다 굉장히 더 많은 숫자를 지정할 수 있다. 


-double : 기본 ( 얘가 더 숫자를 정확하게 표현할 수 있음 ) 



문자


char c = '수'; 는 한글자만 사용할 수 있기 때문에 여러개의 문자를 사용할 수 있는 것은 string 이라는 data type을 사용해야 한다. 

string ss = " 문자 여러개 "

문자열을 표현하기 위해 만들어진 class 가 string 


? 앞 문자가 대문자라는 것은 클래스의 이름이라는 뜻. 


System 

위에 여덟까지 기본형 타입 외에 나머지는 참조형 타입 (  값을 직접 저장하는 것이 아니라 ) 



형변환 


다른타입의 값을 저장하기 위해서는 값의 타입을 변경해 주어야 한다. 

이를 형변환 ( type casting) 이라고 한다. 앞에 가로를 치고 변화시키고 싶은 타입을 입력하면 된다. 

타입에 맞지 않는 값을 저장하고 싶을때 

타입을 변경하는 것 

int small = 10 ; 

long big = 10L; 

( 형태를 보니까,   

 -> small 과 big 즉 변수에 변수를 집어넣는것처럼 보이네 

즉 smal = (int) big;  small 에 big을 집어넣는데, big이 long 이니까 big을 int 로 변경 해주어야 함. 

 big = (long)small (원래는 이게 맞을 텐데. small 보다 big이 더 범위가 넓기 때문에 small 은 굳이 long 으로 변환해줄 필요가 없다. 

따라서 bing = small;

즉 표현 범위가 작은쪽을 큰쪽에 넣는 형변환은 생략이 가능하다. 

표현 범위가 기준이나 바이트 크기가 아니다. 

데이터가 손실될 염려가 없기 때문에 가능 ( 작은쪽 -> 큰쪽 ) 



? 그럼 표현 범위는 어떻게 알 수가 있을까? 




명명규칙  (변수, 메소드, 클래스 등등의 이름을 정할때 ) 


 - 영문자 대소문자, 한글, 숫자, 특수문자 (특수문자는 두가지 : _ , &언더바와 달러 두가지 ) 

 - 숫자로 시작할 수 없다. 맨앞에 숫자가 있으면 안된다. 

 - 예약어는 사용할 수 없다 ( int, long etc ) 

 - 낙타식 ( 처음에는 소문자로 시작했다가 새로운 단어가 시작될때 앞글자를 대문자로 사용하게 하는것 ) 표기법을 사용한다 ( mySampleVariable

 

 - 클래스명의 첫글자는 대문자로 한다. ( Mysampleclass) 낙타식 표기법을 사용하지만 앞글자를 대문자로 한다. 


? 클래스가 도대체 피부로 와닫지 않음 




상수 

처음 담긴 값을 변경할 수 없는 그릇

리터럴에 의미를 부여하기 위해 사용한다. 


final int MAX_NUMBER = 10;

 10이라는 숫자의 이름을 정확하게 알려주기 위해서 이름을 붙임 MAX NUMBER 

상수는 변수와 구분시켜 주기 위해서 모두 대문자로 사용 두 단어 이상일때 언더바_를 사용해서 구분. 

밑에 값을 변경하는 코드가 온다면 ex) MAX_NUMBER = 100; -> 컴파일 에러가 발생을 한다. 



final 이 뭐지...? 



출력 

System.out.print ("줄바꿈을 하지 않는다");

println 는 줄바꿈을 하고 print 는 줄바꿈을 하지 않는다. [문장을 다 쓰고 println 은 다음문장을 띄어쓰기를 해주고 print 는 그 뒤에 줄바꿈을 해주지 않는다.]


만약 print 얘를 줄바꿈을 해주고 싶은 부분이 있다면

System.out.print("줄바꿈을 하지\n않는다")처럼 줄바꿈을 하고 싶은 문장에 \n를 넣어준다. (역슬러쉬 n을 넣어준다. -> 그 뒤에 나오는 문자부터 줄바꿈이 된다. )


System.out.println("줄바꿈을\t 한다.") -> \t는 tap을 의미하며 tap 은 space 4개를 의미한다. 

System.out.println("A" + 100)     -> A100으로 출력이 된다. 

모든 타입들은 문자열을 만나게 되면 모두 문자열로 바뀜

 System.out.println(10 + 20 +"30")

프로그램이 기본적으로 왼쪽에서 오른쪽으로 계산되기 때문에 10+20먼저 더하고 문자인 30을 만나게 되는것. 

따라서 10과 20이 더하고 그 뒤에 문자열인 30이 출력 되기 때문에 3030이 출력됨

System.out.println("10"+ 20 + 30); 

10이 문자이기 떄문에 문자와 만난 애들은 모두 문자가 된다. 

따라서 102030이 출력됨

System.out.println("20" + (20 + 30));

요렇게 하면 괄호부터 계산이 되어서 2050이 됨. 


System.out.printf("문자열:%s, 숫자:%d", "Hello", 10); 

출력 : 문자열:Hello, 숫자:10 



System.out.print 에서도 역슬러시 t가 가능한가? 

 


Scanner sc = new Scanner(System.in);  -> 입력받기 위한 클래스 


Scanner 가 담겨 있는 애가 sc 


이렇게 이클립스에 쓰면 빨간 줄들이 Scanner 에  그어진다. ->입력을 받기 위해서는 Scanner 라는 클래스가 필요하다. 

 

클래스의 위치를 알려줘야함 import ( import 는 맨 위에다가 해준다. ) 

import 의 단축기 : ctrl + shift + o 


1. 윗부분 import 하기 전

public class Hello {

public static void main(String[] args) {


2. 윗부분 import 한 후 

import java.util.Scanner;     얘가 위에 생긴다. 

public class Hello {

public static void main(String[] args) {


출력 포멧을 지정한다.


Scanner sc = new Scanner(System.in);

System.out.println(" 아무거나 입력해주세요.");

sc.nextline(); 

입력을 받기 위해서는 Scanner 라는 클래스가 필요. 



입력 





https://2018-start.tistory.com/41 블로그 참조 아랫글. 


왜냐하면 입력을 받기 위해서는 Scanner 라는 클래스가 필요하다. 


Scanner 클래스 특징 java.util 패키지 안에 속해 있는 클래스이므로 import 를 해주어야 합니다. 


Scanner 클래스 객체를 생성해보자. 


Scanner sc = new Scanner(System.in);


클래스도 객체를 생성해야만 기능을 사용할 수 있는 것이 있고 생성하지 않아도 되는 클래스가 있다. println()메소드와 같은 것은 객체를 생성하지 않고 사용가능하지만 Scanner클래스는 꼭 객체를 생성해야만 사용할 수 있습니다. 


System.in 은 화면에서 입력을 받겠다는 의미 . Scanner클래스는 화면 뿐만 아니라 파일로부터 입력을 받을 수 있는데 화면으로부터 정수형, 소수형과 같은 데이터 타입을 입력을 받을 것이기 때문에 system.in 을 사용합니다


system.in은 입력한 값을 byte 단위로 읽으며 키보드와 연결된 자바의 표준 입력 스트림입니다. 


Scanner 객체 사용 


1. int iValue = sc.nextlnt();  // 입력받은 정수를 변수 ivalue에 저장 


만약 입력받는 데이터 타입이 정수가 아니라 실수형 일 경우에는 nextDouble()처럼 사용하면 됩니다. 


이름과 나이를 입력받아서 출력하는 예제. 이름은 문자열이므로 nextLine()을 사용합니다. next()를 사용할 수 있는데 둘의 차이점은 next()는 공백단위로 입력을 받고 nextLine()은 Enter 단위로 입력을 받는다는 차이 

next()를 사용해서 a b를 입력한다면 a만 저장이되고 nextLine()을 이용해서 a b를 입력한다면 a b가 그대로 저장이 된다는 의미 


ex) 


package smile;


import java.util.Scanner;


Public class test {

     public static void main(string[] args) {

         Scanner sc =new Scanner(System.in);

          String name = sc.nextLine();

           int age = sc.nextint();

          System.out.println(name + "님의 나이는" + age + "살 입니다."

}


}



다시 수업으로 돌아와서 


Scanner sc = new Scanner(System.in); 


Scanner가 담겨있는애가 sc


클래스의 위치를 알려줘야함 import (import는 맨 위에 생성됨 ) 


import 단축기 : ctrl + shift + o 



System.out.println("아무거나 입력해주세요.") -> 그러면 가로안에 있는 문자를 인쇄해준다. 

sc.nextline();

입력을 받기 위해서는 Scanner라는 클래스가 필요


사용자가 입력을 한 다음에 엔터를 치면 다시 실행


여기서 다시한번 봐보자. 


String str2 = sc.nextLine();   


(여기서 보면 str2라는 변수를 String 선언을 해 주었다. 그리고 sc.nextLine() 여기서 이 괄호에 들어가는 값은 사용자가 입력한 값이고 그것이 str2라는 변수에 저장된 것이다. )


System.out.println("입력받은 내용: " + str2) 가로 안에 " 입력받은 내용 : "이것은 인쇄되는 부분이고 그 뒤에 + 는 연결연산자이고 str2 는 사용자가 입력한 내용이 된다.   



int nextlnt = sc.nextlnt();

double nextDouble = sc.nextDouble(); 

이런것들이 있지만 버그로 인해 사용하지 않는다. 


버그 예 


System.out.println("int 입력.");

int nextlnt = sc.nextlnt(); 

System.out.println(nextlnt);

System.out.println("문자열 입력");

String nextLine = sc.nextLine();

System.out.println(nextLine);

System.out.println("입력끝!)


nextint가 버그가 있으니까 사용하지말라

문자열로 숫자를 받고 형변환 하는게 더 좋다. 


모르겠는 부분 : 

System.out.println("int 입력"); 

int number = Integer.parseInt(sc.nextLine());

System.out.println(number) 


Double.parseDouble(sc.nextLINE());


Integer.parseInt 가 int로 바꿔줄 때 사용. 



문제 ) 


자신의 이름을 저장할 변수를 선언해 주세요


String Myname; 


string Myname = 


System.out.println()

myName = sc.nextLine();


int myAge: 

System.out.println("나이를 입력해주세요>");

myAge = Integer.parseInt(sc.nextLine());


댓글