Java 스터디 1일차

프로그래밍/Java

2018. 10. 14. 12:24

반응형

※이 글은 2018/08/05 ~ 2018/08/27일까지 했던 자바 스터디 노트를 올려놓은 겁니다. ※


01-1 프로그래밍과 자바
 
프로그래밍이란?
컴퓨터 프로그램 만드는 일을 프로그래밍이라고 한다.
 
자바를 쓰면  좋을까요?
1. 플랫폼에 영향을 받지 않으므로 다양한 환경에서 사용할  있다.
2. 객체 지향 언어이기 때문에 유지 보수가 쉽고 확장성이 좋다.
3. 프로그램이 안정적이다.
4. 풍부한 기능을 제공하는 오픈 소스이다.
 
자바로 어떤 프로그램을 만들  있을까요?
1. 웹서버
2. 안드로이드 
3. 게임
 
01-3 이클립스로  프로그램 만들기

package hello; public class Hello { public static void main(String[] args) { System.out.println("Hello, Java"); } }

여기서 System.out.println 화면에 출력하라는 뜻을 가지고 있고,
;(세미콜론) 문장의 마침표 역할을 해준다.
 
컴파일은 이클립스가 자동으로 해주기 때문에 저장(단축키: Ctrl + S) 해주면 된다.
 
저장을 하고 나면 하단 콘솔 창에 실행 결과가 나온다.
 
주석으로 소스 코드 정보 표시하기
주석이란 프로그램에 설명을 추가하거나 특정 코드가 컴파일되지 않도록 처리할  사용합니다.
 
주석 활용  연습

/* * Date : 2018년 8월 5일 * Author: 지현근 * Description: 첫 번째 자바 프로그램 * Version : 최신? */ package hello; public class Hello { public static void main(String[] args) { System.out.println("Hello, Java"); //이 부분이 문장을 출력해주는 부분입니다. } }

02 변수와 자료형
 
02-1 컴퓨터는 데이터를 어떻게 표현할까?
컴퓨터는 오로지 0 1로만 표현을 합니다. 이를 2진수라고 부릅니다.
 
우리가 자주 쓰는 방법은 10진수입니다.
10진수는 0부터 9까지  자릿수이고 10부터는  자릿수가 됩니다.
 
우리가 자주 쓰는 10진수와 컴퓨터가 사용하는 2진수를 비교해보면.

10진수
0
1
2
3
4
5
6
7
8
9
10
2진수
0
1
10
11
100
101
110
111
1000
1001
1010

참고로 컴퓨터는 문자도 2진수로 표현하는데 예를 들어 A라는 문자가 있으면 A 숫자 65 표현하도록 약속되어 있습니다.
 
따라서, A 컴퓨터에서 1000001으로 표현됩니다.
 값을 A 문자의 아스키(ASCII) 값이라고 합니다.
 
자바 프로그램에서는 2진수, 8진수, 16진수를 사용할  있습니다.
2진수는 길이가 너무 길어서 불편하므로 8진수나 16진수로 바꿔서 간단하게 표현 가능하다네요.
 
8진수를 2진수로 표현하기 위해서는 3개의 비트가 필요하고,
16진수를 2진수로 표현하기 위해서는 4개의 비트가 필요합니다.
 
프로그램에서 2진수를 사용할 때는 숫자 앞에 0B 붙이고, 8진수를 사용할 때는 0,
16진수를 사용할 때는 0X 붙입니다. ※소문자 가능※
 
예를 들어 10진수 10 코드에서 2진수 0B1010, 8진수 012, 16진수 0XA 표현 가능합니다.
 
부호 있는 수를 표현하는 방법
컴퓨터에서는 양수와 음수마저도 0 1 표현해버립니다.
부호를 나타내는 비트는  앞에 붙이며 부호 비트(MSB)라고 부릅니다.
부호 비트가 0이면 양수, 1이면 음수를 나타낸다고 하네요.
8비트로 5라는 숫자를 표현하면 아래와 같습니다.

0
0
0
0
0
1
0
1

 앞에 있는 0 부호 비트이다.
 
그렇다면 음수를 표현한다면,

1
0
0
0
0
1
0
1

이렇게 하는 게 맞을까요…?
궁금해서 직접 더해보니
  00000101
+10000101
------------------
10001010
 
? 0 아니네
 
당황해서 책을 살펴보니 밑에 내용이  있었네요..;
"컴퓨터에서 표현할 -5 5 더했을  0 되는 값이어야 합니다.
프로그래밍에서는  값을 '2 보수'라고 합니다."
 
여기서 2 보수란?
보수는  그대로 보충해 주는 수입니다.
어떤 특정한 10진수 N 있을  3 대한 N 보수라고 하면
3 어떤 수를 합하여 N 되는 수를 의미합니다.
 3 대한 N 보수는 N-3 것이지요.
N=10이라면
3 대한 10 보수는 7 되는 것이고,
N=9라면

2에 대한 9 보수는 7 되는 거죠?(그렇다고 해주세요)
 
10진수에서 10 보수는 더해서 10 되는 수라고 하니,
2진수에서 2 보수는 더해서 2,  10(일영) 되는 수입니다.
0011
1100
------
0000
(4비트 컴이므로 맨 앞의 1비트가 없어짐)
이런 식으로 맨 앞의 1비트가 없어지는 것을 '트렁케이트된다' 한다네요.
 
02-2 변수란 무엇일까?
 
요즘 유행하는 배그나 옛날에 흥했던 스타크래프트에서 유저들이 말하는
" 게임은 변수가 너무 많아!"  변수가 아닙니다.
변수는 간단하게 말하면 변하는 , 변하는 값이라고 합니다.
 
 
 
변수 선언하고  대입하기
 
변수를 사용하려면 어떤 형태의 자료를 저장할 것인지 정해야 합니다.
사람의 나이를 저장하려면 정수 형태,
이름을 저장하려면 문자 형태로 해야 하겠죠.
 
 형태를 변수의 '자료형'이라고 합니다.
변수의 자료형을 선택하면 변수의 이름까지 정해주면 됩니다.
이름 정해주는 걸 '변수를 선언한다'라고 한다네요 :)
 그러면 나의 나이를 변수로 선언해보면
그러면 나의 나이를 변수로 선언해보면

int old; //정수형 변수 old를 선언 old = 17; //값 17을 old변수에

이렇게 되겠죠?
 
앞의 int 정수를 나타내는 자료형이고,
Old 나이를 의미하는 변수 이름입니다.
= 프로그램에서 '오른쪽 값을 왼쪽에 대입한다' 의미랍니다.
 
 코드를 해석하면
'old라는 이름의 변수를 정수 자료형으로 선언한다.'
 되겠네요.
 
변수 선언하여 사용하기

package chapter2; public class chapter2 { public static void main(String[] args) { int old; old = 17; System.out.println(old); } }


 프로그램은 old  17 대입하였으므로 17 출력되는 걸 확인할  있습니다.
 
변수 초기화하기

package chapter2; public class chapter2 { public static void main(String[] args) { int old = 17; //old 변수 선언과 동시에 값을 대입(초기화) System.out.println(old); } }

변수를 저렇게 선언해주면
변수 선언과 동시에 값을 대입해준다

변수 이름 정하기
자바에서 변수 이름은 용도에 맞게 지으면 되지만, 제약사항이 있다고 합니다.

제약사항
예시
변수 이름은 영문자(대문자, 소문자) 숫자를 사용할  있고,
특수 문자 중에는 $, _ 사용할  있습니다.
g_level(O), count100(O),
_master(O), $won(O)
변수 이름은 숫자로 시작할  없습니다.
27day(X), 1abc(X)
자바에서 이미 사용 중인 예약어는 사용할  없습니다.
While, int, break 등등등

변수의 이름은 프로그램에서 계속 사용하므로 사용 목적에 맞게 의미를
 부여해서 만드는 것이 좋다고 하네요.
 

02-3 변수가 저장되는 공간의 특성, 자료형
 
변수와 메모리
변수는 컴퓨터 내부의 메모리 공간에 저장됩니다.
메모리는 프로그램이 실행되는 작업 공간입니다.
 
 int old;문장을 선언하면, 메모리에 4바이트(int 4바이트에요) 크기의 공간이 old라는
이름으로 할당이 된다고 합니다.
 
기본 자료형의 종류

 
정수형
문자형
실수형
논리형
1바이트
byte
 
 
boolean
2바이트
short
char
 
 
3바이트
int
 
float
 
4바이트
long
 
double
 

 -  없다는 겁니다. 
정수 자료형
정수 자료형은 양수, 음수, 0 나타내는데 쓰이는 자료형이다.
위에 적은 표를 참조하면 정수는 byte, short, int, long 이렇게 4가지 자료형으로 나타낼  있습니다.
 자료형은 메모리에서 사용하는 바이트 수와 용도가 다릅니다.
 
byte형
1바이트는 8비트입니다.
Byte형으로 표현할  있는 수의 범위는 -2^7~2^7-1(-128~127)이고,
 범위를 초과하는 값을 대입하면 오류가 납니다

public class ByteVariable { public static void main(String[] args) { byte bs1 = -128; byte bs2 = 128;

마지막 줄이 오류 나는 거예요 :)
 
short 
2바이트로 정수를 표현하는 자료형입니다.
유효범위는 -32,768~32,767입니다.
byte형과 마찬가지로 범위를 넘어서는 값은 허용되지 않습니다.
 
int 
가장 많이 사용되는 자료형입니다.
유효범위는 -32,768~2,147,483,647입니다.
가장 많이 사용하는 이유는 컴퓨터에서 정수로 연산을   4바이트
단위로 처리하는 것이 가장 효율적이기 때문입니다.
 
long
long형은 자바에서 정수를 표현하는 가장  단위의 자료형입니다.
유효범위는 -2^63~2^63-1이며 int 범위를 넘어서는 정수를 사용할  long형을 사용합니다.

다만, long형을 사용할 때는 주의할 점이 있습니다.

int num1 = 12345678900; long num2 = 12345678900;

위와 같이 선언하면  문장 모두 오류가 납니다.


 번째 문장은 int형으로 표현할  있는 범위를 넘어섰기에 오류가 발생하고,
 번째 문장이 오류가 일어나는 이유는
자바는 모든 정수 값을 기본으로 int형으로 처리하기 때문에 오류가 발생합니다.
이런 경우에는  숫자를 long형으로 처리하라고 컴파일러에게 알려주어야 합니다.

그러기 위해 숫자 뒤에 L 붙입니다.

long num2 = 12345678900L;

숫자가 int 범위를 넘지 않고 int형이 long형으로 자동형 변환되는 경우에는

범위 내부에 있는 값을 사용할 때는 굳이 식별자를 사용 안 해도 된다고 합니다.

long num = 1000;


문자 자료형
가장 기본이 되는 문자 인코딩은 아스키(ASCII) 코드입니다.
아스키코드는 영문자, 숫자, 특수문자 등을 나타내는 문자 세트입니다.
 
영문자는 대문자, 소문자, 특수문자, 기호를 포함해도 1바이트로 표현할 수 있기 때문에
아스키코드는 1바이트만으로 모든 문자를 표현하기 어렵습니다.
 
그래서 2바이트 이상을 사용하게 되는데,
이때  언어의 표준 인코딩을 정의해 놓은 것이 '유니코드'입니다.
때문에 자바의 문자 자료형인 char형은 2바이트를 사용합니다.
 

문자형 변수는 다음과 같이 선언할  있습니다.

char myChar = 'A';

문자형 연습

package chapter2; public class chapter2 { public static void main(String[] args) { char ch1 = 'A'; System.out.println(ch1); System.out.println((int)ch1); char ch2 = 66; System.out.println(ch2); int ch3 = 67; System.out.println(ch3); System.out.println((char)ch3); } }

프로그램에서 문자를 사용할 때는 항상 ' ' 사용해야 한다.
문자열을 사용할 때는 " " 사용해야 한다.
 
자바에서 문자열을 다룰  String 클래스를 사용한다.( 11장에서 배움)
 

문자형 연습

package chapter2; public class chapter2 { public static void main(String[] args) { char ch1 = '한'; char ch2 = '\uD55C'; System.out.println(ch1); System.out.println(ch2); } }

\uD55C ''이라는 글자의 유니코드 값이다.

한글 유니코드는 www.unicode.org/charts/PDF/UAC00.pdf 에서 확인 가능하다.
 

문자형 변수에 숫자를 저장한다면?

package chapter2; public class chapter2 { public static void main(String[] args) { int a = 65; int b = -66; char a2 = 65; //char b2 = -66; (문자형 변수에 음수를 넣으면 오류가 발생하므로 주석 처리함) System.out.println((char)a); System.out.println((char)b); System.out.println(a2); } }

char형으로 선언한 변수에 음수 값을 대입하면 오류가 발생합니다.
음수 값을 대입한 정수형 변수 b char형으로 출력해보면 ? 출력되는데,   없는 문자라는 뜻입니다.

 
 
실수 자료형
 
부동 소수점 방식
실수값 0.1 1.0 X 10^-1으로도 표현 가능합니다.
이처럼 가수 부분과 지수 부분을 나누어서 실수를 나타내는 방식을 부동 소수점 방식이라고 합니다.
 방식을 사용하면  많은 실수를   세밀하게 표현할  있습니다.
 
float형과 double

실수 자료형에는 float형과 double형이 있습니다.
float형은 부호 1비트, 지수부 8비트, 가수부 23비트로  32비트를 사용합니다.
double형은 부호 1비트, 지수부 11비트, 가수부 52비트  64비트를 사용합니다.
 
자바에서 실수는 double형을 기본으로 사용한다.
왜냐하면, float형에 비해 double형이  정밀하게 실수를 표현할  있기 때문입니다.
 

실수형 연습

package chapter2; public class chapter2 { public static void main(String[] args) { double dnum = 3.14; float fnum = 3.14F; //여기서 F는 식별자 System.out.println(dnum); System.out.println(fnum); } }

3.14 double형으로 컴퓨터 내부에 저장되어 dnum 값에 대입, float형으로 대입되는 
3.14 double형이 아닌 float 값이 대입된다는 의미로 F 또는 f 숫자 뒤에 붙여준다.
(앞에서 배운 long 식별자랑 비슷하네요)
 
논리 자료형
논리 자료형은 어떤 변수의 , 거짓의 값을 나타내는  사용합니다.
종류는 boolean 한 가지뿐이고, 결혼 여부, 프로그램 수행이  되었는지 여부,
값이 존재하는지 여부등을 참과 거짓으로 나타낼  있습니다.
 

선언방법은

boolean isMarried;

입니다.
 
 boolean  변수는 1바이트로 값을 저장하고, true false 두 가지 값만 가집니다.
 

논리형 연습

package chapter2; public class chapter2 { public static void main(String[] args) { boolean isMarried = true; System.out.println(isMarried); } }

 예제는 boolean 변수 하나를 선언하고 출력해 보는 예제이다.
위에서   있듯이 true false 대입할  있다
 
자료형 없이 변수 선언하기
자바 10부터 생긴 따끈따끈한 문법이다.
앞에서 배운 대로라면 자바의 모든 변수를 사용할 때는 사용할 자료형을 정확히 명시해야 하지만,
자바 10부터는 자료형을 쓰지 않고도 변수를 사용할  있다.
 

이를 지역 변수 자료형 추론이라고 합니다.

var num = 10; var dNum = 10.0; var str = "hello"; ↓ ↓ ↓ int num = 10; double dNum = 10.0; String str = "hello";

이렇게 쓰면 num int, double,String으로 컴파일 됩니다.
var 사용하여 변수를 선언하는 방법은 자바 스크립트 같은 다른
프로그래밍 언어에서 이미 사용하고 있지만, 자바에서 var 사용할 때는 유의할 점이 있다.
1. 한번 선언한 자료형 변수를 다른 자료형으로 사용할  없습니다.
2. var 자료형 없이 변수를 선언하는 방법은 '지역 변수' 가능합니다.
 

자료형 추론

package chapter2; public class chapter2 { public static void main(String[] args) { var i = 10; var j = 10.0; var str = "hello"; System.out.println(i); System.out.println(j); System.out.println(str); str = "test"; //str = 3; } }

자바 10에서는 제공하지만 자바 하위 버전은 호환이 안됩니다.


반응형

'프로그래밍 > Java' 카테고리의 다른 글

Java 스터디 6일차  (0) 2018.10.21
Java 스터디 5일차  (0) 2018.10.19
Java 스터디 4일차  (0) 2018.10.17
Java 스터디 3일차  (0) 2018.10.17
Java 스터디 2일차  (0) 2018.10.14