자바와 관련된 내용이 조금 있지만, 자바를 공부하기 전 알아야 하는 전산 언어의 기본과 기초 컴퓨터 사용법에 대해 배웠다.
메모장, 아래한글, 워드, 등 다양한 에디터를 가지고 .java 파일을 만들 수 있다. 자바는 에디터에 독립적으로 개발 가능하다.
기본을 배우기 위한 에디터로 EditPlus를 사용한다.
EditPlus는 editplus.co.kr에 접속하면 평가판을 다운받을 수 있다.
이 홈페이지는 영어와 한국어 등 다중언어를 제공하는데 이를 국제화된 사이트라고 한다.
EditPlus는 2000년대 초반에 사용하던 에디터로, 자바 외 다른 언어도 지원한다.
Syntax) 자바 파일은 .java 확장자를 가진다
커맨드창에서 cd\work를 입력하면 C아래의 work폴더로 이동한다.
dir은 디렉토리 내용을 보여주는 명령어이다.
c:\work>javac Hello.java
를 입력하면 시스템 환경변수에 등록된 Path에 가서 javac 파일을 찾아 실행시키고, Hello.java 파일을 .class파일로 컴파일한다.
컴파일 된 바이트코드가 c:\work 폴더에 있는지 dir명령어로 확인한다.
이 때 javac와 Hello.java 사이에 " "이 입력된 것을 보아, 명령어와 .java 파일의 CSV는 스페이스바이다.
클래스파일을 만들었다면, JRE에게 클래스파일을 실행시키도록 한다.
c:\work>java Hello
를 입력하면 되는데, JRE는 class파일만 실행시키기 때문에 확장자 .class가 default이며, 확장자 입력을 생략해도 된다.
이렇게 된다면 Hello라는 이름의 어플리케이션을 만들었다고 할 수 있다.
어플리케이션은 OS 위에 실행하는 무언가이다. 다른 말로는 실행되는 것은 어플리케이션이라고 할 수 있다.
그렇다면
c:\work>java Hello를 입력했을 때, JRE는 Hello.class의 위치를 어떻게 어딨는지 알고 실행시킬까?
Path는 OS에게 경로를 알려주는 기능을 한다.
시스템 환경변수에
이름 classpath
경로 .;
를 추가한다.
그리고 설정한 내용을 echo로 커맨드 창에서 확인한다.
c:\>echo %classpath%
여기서 "."의 의미를 확인할 수 있는데, dir . 을 입력하면 현재 폴더의 디렉토리를 보여준다.
그리고 dir..를 입력하면 현재 폴더의 상위 폴더(parents 폴더)의 디렉토리를 보여준다.
이 작업을 통해 알 수 있는 것은 classpath의 default가 .; 현재폴더라는 것이다.
c:\work>java Hello
를 입력하면 c아래 work 폴더에 있는 Hello.class를 실행시키라는 것이 기본 설정이기 때문에 JRE에게 따로 class의 경로를 알려주지 않아도 실행이 가능하다.
자바 홈 주소를 변수 이름 JAVA_HOME으로 시스템환경변수에 등록한다.
EditPlus에 컴파일과 실행을 등록하려면
문서>영구적인 설정>항목(c) 하위의 도구> 사용자 도구 에 실행파일 javac와 java를 추가하면 된다.
이 때 명령(O)에는 콘솔창에서 입력하는 내용을 적어주면 된다. 직접 폴더를 찍어가면서 프로그램을 찾을 때에는 javac 뒤에 확장자명 .exe가 붙지만, 입력할 때에는 확장자 명을 생략해도 된다.
따라서 %JAVA_HOME%\bin\javac; C:\Program files\Java\jdk~~\bin\javac; javac; 각각를 모두 사용 가능하다.
이렇게 하면 EditPlus에서 콘솔 창을 띄울 수 있다.
만약 추가하는 과정에서 출력내용캡쳐에 체크를 하면, 콘솔 창이 아니라 EditPlus의 윈도우에 콘솔 창 내용이 보여진다.
자바는 에디터 독립적이고, 설정하는 원리를 알고 있기 때문에 어떤 에디터에서든 java와 javac를 등록해서 사용할 수 있어야 한다.
Syntax) class이름과 File이름은 동일해야 한다.
예) public class Hello 면 파일 이름은 Hello.java로 저장해야 한다.
Syntax)자바는 대소문자를 구별하기 때문에 위 상황에서 public class Hello 파일명 hello.java가 되면 오류가 발생한다.
Syntax).class파일을 실행하기 위해서는 메인메서드가 필요하다.
.class 파일을 바이트코드, 중간 코드라고 한다. 어플리케이션은 사람이 개발하고, 기계가 실행하고, 기계가 다시 사람이 다시 볼 수 있는 결과로 출력한다. .class파일은 어플리케이션의 구현 단계에서 기계가 실행할 수 있도록 컴파일하는 중간 단계이다. 따라서 이를 중간 코드라고 한다.
자바 프로그램을 통해 자바 소스코드(MyProgram.java)를 만들고 자바 컴파일러를 통해 자바 바이트코드(MyProgram.class)를 만들기까지를 개발환경이라고 한다.
당분간 배우는 자료형, for문, while문 등은 자바 고유한 특성이 아닌 전산 언어의 기초적인 특성이다.
자료형은 다음과 같이 이해하면 쉽다.
컴퓨터는 연산을 하기 위해 만들어진 장치이다. 연산을 하기 위해서는 메모리에 연산을 위한 자료 등을 적재해야 한다. 이 때 메모리에 적재할 내용이 얼마만큼의 크기인지를 결정하는 것을 데이터 타입이라고 할 수 있다.
데이터 타입에는 논리형, 문자형, 정수형, 실수형이 있다.
논리형은 boolean, 문자형은 char, 정수형은 byte, short, int long, 실수형에는 float, double이 있으며 이 8가지 자료형을 primitive data type, 기본 자료형이라고 한다.
데이터 타입이 같다는 말은 크기가 같다는 말을 내포하고 있으며, 크기가 같은 변수끼리만 연산이 가능하다.
변수를 선언한다는 말을 int a 와 같이 하는데, a는 변수의 이름이다.
byte가 1byte의 크기, int가 4byte의 크기를 갖는다.
1byte를 이용해 나타낼 수 있는 가지 수는 2^8, 256개이다. 따라서 byte의 표현 범위는 -128~127까지이다.
만일 byte b1 = 128; 과 같이 바이트 타입의 변수 b1에 128이라는 바이트타입이 받지 못하는 값을 대입하게 되면 오류가 발생하는데, 오류를 확인해보면 int타입 데이터를 byte타입으로 선언했다는 메세지가 보여진다.
이를 통해 정수 데이터의 default data type이 int타입임을 알 수 있다.
long의 경우 정수형 default data type인 int와 구분하기 위해
long l = 1000L;
long m =1000l;
과 같이 표기한다.
실수형의 default data type은 double이다. 따라서 float 역시 double과 구분하기 위해
float f = 1000.5F;
float g = 1000.5f;
와 같이 표기한다.
System.out.print("Hello");는 Hello 옆에 해당 라인 다음부터의 코딩을 줄바꿈 없이 보여주며,
System.out.println("Hi");는 Hi를 출력하고 줄바꿈을 한다.
연산자는 Operator라고 하며 +, -, *, /, !, () 등이 있다.
!는 논리반전연산자이다.
boolean boo1 = true;
boolean boo2 =! boo1;
에서 !boo1의 데이터타입은 boolean이며, boo2의 값은 false이다.
데이터 타입 변환에는 묵시적 형변환과 명시적 형변환이 있다.
묵시적 형변환은 사람의 개입 없이 내부적으로 자료의 범위가 좁은 자료형에서 넓은 자료형으로의 변환을 말한다.
특히 정수와 정수의 연산은 int타입으로 변환된다는 것을 기억하자.
byte b1 = 10;
byte b2 = 10;
byte b3 = b1+b2;
는 자료형 오류(incompatible type)가 발생한다. b1+b2가 int타입으로 묵시적 형변환이 일어나기 때문이다.
이 때 b1+b2를 byte타입으로 바꾸는 것을 명시적 형변환이라 한다.
명시적 형변환은 자료 범위가 넓은 자료형에서 좁은 자료형으로 변환이며 프로그래머가 강제로 변환시켜야 한다.
byte b3 = (byte)(b1+b2);
라고 하면 b1+b2가 int에서 byte타입으로 변환된다.
이 때 형변환에 쓰이는 ()를 캐스팅 연산자, 캐스팅 오퍼레이터라고 한다.
명시적 형변환은 넓은 자료형에서 좁은 자료형으로 바꾸는 것이기 때문에 좁은 자료형에서 값이 변하지 않고 받을 수 있는지(waste value가 출력되지 않는지) 확인해야한다.
연산의 순서를 따라갈 수 있어야 한다.
int i3 = 201/2;
는 먼저 int 201과 int 2를 나눈다. 연산 결과는 int형이기 때문에 100.5가 아니라 소수점 아래를 버린 100이 된다. 그리고 이 100이 i3에 대입된다.
double d1 = 201/2;
는 위와 같이 int 201과 int 2의 연산이므로 int 100이 되고, 이 100을 double 타입으로 바꾸는 것이기 때문에 소수점 아래를 표기해 100.0이 된다.
double d2 =(double)201/2;
는 double 타입의 201과 int 타입의 2의 연산이므로 넓은 자료형으로 묵시적 형변환이 일어난다. 따라서 double 201과 double 2의 연산이고 결과값은 100.5가 된다. 이 100.5가 double 타입의 d2에 대입된다.
증가감소연산자는 ++이나 --를 말하며, 변수의 앞 혹은 뒤에 붙는다.
변수의 앞에 붙는 경우를 prefix라고 하며, 뒤에 붙는 경우는 suffix라고 한다.
자기 자신을 더하거나 빼는 경우에는 prefix와 suffix의 차이가 없으나, 다른 변수에 증감한 값을 대입할 때에는 연산 순서가 다르다.
int value =1;
int temp= value++;
의 경우, temp의 값은 현재 value의 값이 대입되므로 1이고, value의 값은 대입 후에 +1되므로 2이다.
삼항연산자는 다음과 같이 표기한다.
int temp01 = (2<=3) ? 6:7;
괄호 안에 들어있는 내용은 조건식으로, 조건식이 참이면 콜론 앞의 숫자가, 조건식이 거짓이면 콜론 뒤의 숫자가 변수 temp01에 대입된다.
여기서 주의할 점은 모든 전산 언어에서 등호는 부등호 뒤에 입력되어야 한다는 것이다.
만일
int temp01 = (2=<3) ? 6:7;
이라고 코딩한다면 오류가 발생한다.
2019/02/27 - [IT/JAVA 공부] - [JAVA] system 개발 절차, "플랫폼 독립적"의 의미, 환경변수 잡는 이유
'IT > 공부' 카테고리의 다른 글
[프로그래밍] 객체지향, 메서드 문법, OverLoading, getter 메서드 (0) | 2019.03.17 |
---|---|
[프로그래밍] call by value/reference, 배열, 객체지향 (0) | 2019.03.17 |
[프로그래밍] 연산자, 주석문, switch, for, while, 배열 (0) | 2019.03.04 |
[프로그래밍] 개념잡기: 컴퓨터 구조, 용어 정리 (0) | 2019.02.27 |
[프로그래밍] system 개발 절차, "플랫폼 독립적"의 의미, 환경변수 잡는 이유 (0) | 2019.02.27 |