JAVA
웹, 앱을 만드는데 사용됨.
1. 객체 지향 언어이다. C++ JAVA C#
<-> 절차 지향 언어 : C언어, 변수와 함수의 위치가 중요함.
+ JAVA 는 C++과 다르게 클래스 다중상속 연산자 오버로딩 등은 지원안함.
2. 플랫폼에 독립적이다.
자바 가상 기계만 있다면 운영체제/하드웨어에 상관없이 자바 프로그램의 실행이 가능
3. 멀티쓰레드를 지원한다.
+ 동시에 여러 작업 수행할 때 ex)게임
4. 자동 메모리 관리 기능
5. 동적인 성능 확장의 제공
JAVA의 종류
- JAVA SE : 우리가 공부할 것, 스탠다드 에디션, PC용 애플리케이션 개발
- JAVA EE : 웹 애플리케이션 개발시 사용되는 자바 ex)JSP, Spring 개발시 사용
- JAVA ME : 휴대폰, PDA 등 모바일 환경에서 사용되는 자바
+ JAVA SE 를 설치시 2개의 프로그램이 설치됨.
1. JDK(자바 개발 키트) : 안에 컴파일러인 javac.exe, 자바가상머신인 java.exe 등이 포함되어 있다.
* 컴파일러 : 소스코드 -> 기계어 변환해줌
2. JRE(자바 런타임 환경) : 자바 실행환경 제공함, 클래스 형태의 라이브러리들을 묶은것이다.
자바 개발을 위한 통합 개발 환경(IDE)
1. 이클립스 (대표적 IDE)
2. IntelliJ IDEA
설치 다운 2가지 방법
1. Oracle 에서 JDK 설치하기 (8까지 무료, 라이센스 O) -주로 8 사용
2. OpenJDK 무료로 쓸수있는 JDK (라이센스 X) - 주로 11 이상 사용
JDK 안 bin 폴더 내부
- javac.exe : 컴파일러 프로그램
- java.exe : 자바 가상머신
*JDK 설치되면 bin안에 컴파일러와 자바 가상머신이 설치됨
+ JRE 안에 lib안의 rt 라는 패키지들이 압축된 파일도 있다.
JAVA를 설치 후 환경설정
bin 디렉토리까지의 PATH를 설정해야지만 위치와 상관없이 이 JDK안의 javac를 사용할 수 있다.
즉, cmd 명령프롬프트 창에서 컴파일을 하기위해서는 환경변수를 설정
1. JAVA_HOME : 환경변수 를 추가
2. 시스템 변수 중 PATH를 편집 %JAVA_HOME%\bin
JAVA가 실행되는 과정
1. 소스파일(.java)를 컴파일러가 기계어로 변환한다.
2. (.class) 바이트코드 파일이 생성된다.
3. 이 바이트코드를 자바 가상머신(JVM)이 실행해준다.
JAVA의 구조
- JAVA에선 class가 가장 큰 틀이고, 가장 먼저 class로 시작해야한다.
- 이 클래스명은 파일명과 반드시 같아야함 (자바만)
ex) Test class의 파일명은 Test.java
- 대소문자를 구분하여 코드를 작성해야함.
+ 메모장에 JAVA를 코딩할때
- ANSI 로 저장해야 한글 안깨진다.
- 메모장을 "Test.java"로 저장하자.
+ 메모장의 코드를 컴파일/실행할때
- javac Test.java // 컴파일, 바이트코드인 Test.class가 만들어짐
- java Test // JVM이 실행
JRE : 라이브러리를 묶어둔 클래스
- 자바에서 필요한 클래스를 import 해서 불러서 쓸때 필요하다.
(클래스 형태의 라이브러리로 제공딤)
JAVA 8 API Documentation : 이 JRE에 대한 설명서
API = 라이브러리 클래스
API 문서 = 라이브러리 클래스 설명서, 알파벳순 정렬
ex) String, System도 라이브러리 클래스임
IDE 프로그램 = 소스작성/컴파일/실행/디버깅 등 통합적으로 개발해주는 환경을 제공함
ex) 이클립스(무료), 인텔리제이(부분무료)
+ 이클립스는 다양한 플러그인을 지원함.
- JSP 가능, Spring,SpringBoot,C,C++ 등 관련 플러그인을 깔면 이런 언어들도 개발 가능하다.
이클립스 설치
1. Eclipse IDE for JAVA developers 버전을 설치시 자바 애플리케이션(내컴에서만 실행됨) 개발 가능
2. for JAVA EE Developers 버전을 설치시 JAVA 웹 애플리케이션 뿐 아니라 JSP. Spring 개발도 가능함
-> 우리는 JAVA EE Developers를 설치
기타
이클립스 2020-06는 자바 8까지 지원함
이클립스 2020-09 부터는 자바 11이상이 설치되어있어야만함
-> 이클립스 2020-06버전 사용할 것
- 워크스페이스 지정하기
- 프로젝트를 만들기 File - New - Java Project
- 인코딩 설정하기 Windows - Preference - encoding - UTF-8 로 통일 (한글 출력과 관련)
- 우측 상단 Perspective 눌러서 JAVA나 JAVA EE등 설정 가능 ex) JAVA EE 선택시 JSP, Spring등을 위한 메뉴로 바뀜
Project = 1개 폴더, 이 안에 클래스(.java)들을 넣는다
* JAVA 8 = 1.8로 나타남.
* (.class) 파일은 Project 폴더 밑 bin 디렉토리 가야 볼 수 있다. 이클립스에서 볼 수 없다.
* 소스파일과 바이트파일을 분리가능
- src폴더에 자바 소스파일(.java)를 넣는다
- Test라는 이름의 클래스 -> Test.java가 만들어짐
- 한개 클래스가 독립적으로 실행되기 위해 main 체크 해준다.
기타
컴파일 실행하는 법
- 상단의 실행버튼 (RUN) 누르면 컴파일 & 실행 해줌
글자크기 폰트 조절하는 법
Preferance - Appearance - Colors and Fonts
단축키 : Ctrl + '+' / '-'
초기 셋팅으로 돌아가기
Windows - Perspective - Reset Perspective
언어
- 고급언어 : C, C++, JAVA등
- 저급언어 : 어셈블리어 등
자바 특징
- 소스프로그램을 한번 작성하면 윈도우/리눅스/맥에서 다 실행가능
- 각 운영체제별로 자바 가상머신을 지원하기 때문임.
- 어떤 운영체제에서 개발되었든 운영체제에 맞는 바이트 코드로 실행됨(플랫폼의 독립)
자바언어의 특징
- 객체 지향 언어 : 부품 객체 먼저 만들고 조합
- 함수 스타일 코딩인 람다식도 지원
- 동적로딩,멀티스레드,오픈 라이브러리가 많음
정리
소스 작성 -> javac.exe로 컴파일 -> java.exe (각 운영체제의) 가 실행시켜줌)
주석 2가지
- // : 한줄주석 -> 그 줄 아무곳에서 단축키 Ctrl + /
- /* ~ */ : 블럭주석(다중행주석) -> 블럭 잡은 뒤 단축키 Ctrl + Shift + /
*문장끝은 ; 로 끝내기
클래스 Class
- 접근제어자/접근지정자 : 외부 클래스 접근 허용할지 안할지 public/default(없는상태)/protected/private 으로 지정
- 사용자정의 클래스 : 개발자가 만든 클래스 ex)우리가 만든 Test 클래스
*클래스명 = 파일명 , 대소문자 구분됨
메소드 : 코드의 묶음
- 메소드 코드 재사용 가능
- 메소드는 반드시 괄호를 가지고 있다
main 메소드
- 한개의 클래스 안의 main : 'main 메소드' 라고 부른다 (= 다른 언어의 '함수).
- main() 메소드는 자바가상머신(JVM,java.exe)이 가장 먼저 호출하는 메소드(개발자가 호출하는게 아님)이다.
- 하나만 있어야한다.
- main 메소드는 이름과 형식을 바꿀 수 없다.
* public static void main(String[] args){}
접근제어자/공유(static = 정적메소드) / 돌려줄값 / main메소드
바꿀 수 있는건 2가지
1. String[] args 의 [] 위치 바꿀 수 있다. (String args[]) 가능
2. args 대신 ar 이라고 바꿀 수 있다(String[] ar) 가능 (String ar[]) 가능, 즉 변수명 변경 가능
- main이 있어야만 독립적 실행가능하다
- main이 없으면 컴파일까지만 가능하고 실행은 안된다.
클래스(라이브러리)
- 입출력은 각 언어마다 제공되는 '클래스' 로 한다. scanf, input등
- 자바에선 system 클래스, io패키지, scanner등 (라이브러리로 제공되는 클래스)
- 이 system class는 JRE 안에 들어가있다.
- 이 라이브러리들도 class 형태로 되어있다. rt.jar (자르) 가 JRE안에 있다
패키지(package) : 관련있는 클래스를 묶어 놓은것
jar : 자바에서 사용하는 압축 클래스(여러 클래스를 묶어둔)
* rt.jar안에 몇십개의 패키지, 클래스가 있다.
- java.lnag 패키지 : 자바에서 가장 사용빈도 높은 패키지, 기본 패키지
- java.lang라는 패키지 안에 system 클래스 , String 클래스
ex) java.lang.String, java.lang.System, java.lang.Integer
- 라이브러리 형태로 제공된 패키지임
- 이 라이브러리들을 묶어놓은 것들이 JRE
- 이 클래스를 import해서 불러와서 쓰는것임
- java.lang 외의 모든 패키지는 import해야함. import 생략가능한 기본패키지 = java.lang
- 나머지 패키지는 무조건 import해야함.
정리
가장 간단한 예제 만들더라도 java.lang 패키지 안의 String 클래스 쓰고 있는것임
이 클래스는 기계어라서 이거에 대한 설명서는 아까의 api 문서임
이 클래스가 어떻게 만들어졌는지 api문서 보면 알 수 있다.
이 클래스를 비슷한 기능끼리 묶어둔게 패키지임
java.lang 누르면 그 안의 클래스들 나온다. (가장 사용빈도 높은 클래스 묶은 패키지)
JAVA Api Documentation
클래스의 기본 요소 : 필드, 생성자, 메서드 (어떤 클래스는 뭐 하나 없을 수도 있다)
1. java.lang 패키지명 System 클래스명
Field 란에 있는 out/in/err 는?
- System 클래스는 static이 붙은 정적 클래스/필드이기 때에 생성하지 않고 .으로 불러서 out을 쓴다.
* 정적 필드는 따로 객체를 생성하지 않고 클래스명에 . 뒤에 붙여서 바로 사용
- System 클래스에 생성자는 없고 매서드는 있다.
ex) println은 메서드임 -> () 를 반드시 가지고 있다. println("")
println 대신 print 쓰면 줄을 바꿔주지 않는다.
out 앞 클래스의 PrintStream 클래스를 찾아가면 println 찾을 수 있다.
2. java.lang 패키지명 String 클래스명
- 필드, 생성자(construactor), 메소드 있다.
- 매일 쓰는 클래스임
api 문서 보면 부모 확인 가능.
상속관계까지 이미 다 형성됨, 위에 나온게 자기 부모
ex) java.lang.String
+ java.io.PrintStream 에 print 여러 종류가 있다. (매서드 오버로딩)
이클립스 실행하기 3가지 방법
1.RUN 초록버튼눌러서 실행
2.오른버튼 눌러서 Run As의 Jav Application 눌러서 실행가능
3. 단축키Ctrl+F11
이클립스 단축키
- 실행 : Ctrl + F11
- 한줄 주석(단일항 주석) : Ctrl + /
- 블럭 주석처리(다중행 주석) : Ctrl + Shift + /
- 블럭 주석풀기(다중행 주석) : Ctrl + Shift + \
- 정렬 : Ctrl + Shift + F
- (중요)복사: Ctrl + Alt + 아래 방향키 - 아래방향으로 복사일어남
- 한줄 삭제 : Ctrl + D
- 이동 : Alt + 방향키(위아래) - 그 줄이 위 아래로 이동함. 자리바꿀때 유용
- 자동 import : Ctrl + Shift + O(영문)
자동 import
Date 클래스는 여러 패키지 안에 들어가있기 때문에 패키지 선택해야
실습
Random r = new Random();
System.out.println(r.nextInt(10)); //정수형태. 0부터 9까지의 난수발생 0부터 n-1까지
JAVA 의 변수
- 모든 언어는 변수, 함수(메소드)가 있다.
- 한번 더 사용하기 위해 메모리 상에 저장시켜두는 것.
- 즉, 메모리상 기억공간의 이름
변수의 선언(만들기) 방법
- 자료형 변수명 ; 으로 선언한다
변수명의 규칙
-변수의 첫글자는 문자, $, _ 여야 가능함.
- 숫자,@로 시작할수 없다.
- 변수명은 대소문자를 구분한다
- 영문 소문자로 시작하고 다른 단어 붙을때는 두번째 단어의 첫자를 대문자로 (낙타)
- 문자수 길이 제한없고 예약어는 사용불가
변수 예시
int score;
score = 90;
- 정수형 공간 만든뒤 90 넣어라는 의미
변수 특징
- 초기화 동시에할수도 있고 따로 할 수도 있다
- 변수는 값을 계속 바꿀 수 있다. Variable
- 처음할당되는 값은 초기값
자바 자료형
- 기본자료형
- 참조형 (클래스,배열,인터페이스)
자바의 기본 자료형
1. 정수 (byte 1byte, short 2byte, int 4byte, long 8byte)
2. 실수 (float 4byte, double 8byte)
3. 문자 (char 2byte)
4. 논리 (boolean 1byte)
1. 정수형
- 넘치면 오버플로우 적으면(-값크면) 언더플로우 이 범위 확인
- 보통 int 형 쓰지만 넘치는 경우만 long 형을 쓴다.
- int는 약 2의 32승까지 표기
2. 실수형
- float (정확성 떨어짐)
- double (실수는 보통 double 사용함) ex) double d = 3.5;
3. 문자형
- char는 2Byte(java에선)
- char c1 = 'k'
- char c2 = '안' // 반드시 외따옴표에 영문자든 한글이든 딱 한글자만 저장가능함(한글 한 syllable은 2바이트라 가능)
->그래서 잘 쓰지 않음 보통 String 클래스 쓰게 됨 나중엔
4. 논리형
- boolean 은 true false 값 저장 가능 (language마다 좀 다르다)
*기본자료형끼리 형변환 변경할때를 위해 크기를 기억해야
기본 자료형은 값을 저장(int는 정수값을 , double은 실수값을 boolean은 논리값을 저장)
기본자료형 외에 자바에선
참조형 이라는 자료형도 있다(Reference Type)
참조형 크게 3가지 있음
1. 클래스 ex) String s1 = "50";
- 대표적 자료형인 String 은 클래스형태의 자료형이다. String은 쌍따옴표 필수. 한글자뿐 아니라 여러 글자 저장
- char 처럼 일반적인 문자(값)를 저장하는게 아니라 "주소값을 저장한다!!!!"
- 값을 저장하는 곳과 주소값을 저장하는 곳이 분리되어있다.
2. 배열
3. 인터페이스
명명법
- 패키지명은 숫자로 시작 불가능하다.
- 클래스 명 첫글자는 대문자로 작성하는게 좋다.
JAVA는 , 가 아니라 +로 연결해야한다
ex) System.out.println("b1 = " + b1);
정리 & 실습
- 변수 : 메모리상에 데이터를 저장하기 위한 기억 공간
- 변수를 만드는 형식 : 1. 자료형 설정 2. 변수명 설정 3. = 값 설정
- 자료형 변수명 = 데이터(값);
기본 자료형 변수
1. 정수형 변수 (Byte, Short, Int, Long)
byte b1 = 10; //-128 ~ +127 까지의 정수값 저장
//byte b2 = 130; //오버플로우 발생
short s = 100; // -32768 ~ +32767
int i = 1000; // -21억 ~ +21억 정도, 10의 9이상은 int사용
long l = 100000L; //long형변수를 만들때 대문자 L을 사용해야함 long형이란 표시
System.out.println("b1 = " + b1); // JAVA는 , 가 아니라 +로 연결해야
System.out.println("s = " + s);
System.out.println("i = " + i);
System.out.println("l = " + l);
2. 실수형 변수 (float, double)
float ft1 = 3.14f;
float ft2 = 3.14F;
// 3.14란 데이터는 내부적으로 double형으로 인식하기때문에
// 8바이트를 4바이트로 자동변환이 안되므로 오류가 생김. F나 f를 붙여야함
float ft3 = (float)3.14; //또는 형변환 시켜도 됨
double d = 42.195; //실수형은 주로 double형을 쓴다
System.out.println("ft1 = " + ft1);
System.out.println("ft2 = " + ft2);
System.out.println("d = " + d);
+ 소수점 자리 제어하는 법 / 줄바꾸기
- printf라는 함수를 사용해서 쉽게 제어
- printf("%.2f" 라는 서식문자 입력, 출력값) : 소수 둘째자리까지 출력하라는 의미,반올림한다
- \n으로 줄바꾸기
System.out.printf("%.1f\n" , d);
System.out.printf("%.2f\n" , d);
3. 문자형 변수
- char는 C언어는 1바이트지만 java는 2바이트임, 영어든 한글이든 무조건 1글자만 외따옴표안에 저장가능 'ab'(x) 불가능
+ 문자 두글자 넣을수있는 자료형은? -> 기본자료형으로 불가능 -> 새로운 자료형(참조형)이 있다
+ String 클래스 문자 몇글자든 넣을 수 있고 "" 로, but 중요한건 메모리상에서 데이터를 저장하는 방법이 다름
char c1 = 'A';
char c2 = '안';
System.out.println("c1 = " + c1);
System.out.println("c2 = " + c2);
4. 논리형 변수
- 자료형과 일치되는 값을 적어야, 같다가 아니라 넣어라의 의미
boolean bn1 = true;
boolean bn2 = false;
System.out.println("bn1 = " + bn1);
System.out.println("bn2 = " + bn2);
참조형 변수
1. 클래스
- 대표적인 클래스 String
+ String 생성 첫번째 방법 : 스트링 객체를 생성한다.
String s1 = "자바";
+ String 생성 두번째 방법 : new 연산자 써서 만든다.
String s2 = new String("자바");
* String은 두가지 방법 모두가 가능한 유일한 클래스임.
* 다른 클래스는 거의 new 연산을 써야만 만들어진다.
System.out.println("s1 = " + s1); // 자바 라고 출력됨(주솟값 출력되진 않음)
System.out.println("s2 = " + s2); // 자바 라고 출력됨(주솟값 출력되진 않음)
+ 데이터는 힙영역에 저장되고 s2는 그 주소값을 가지고 있게 된다.
참조형 변수의 비교
- 주소값 비교할땐 비교연산자로 비교한다.
if(s1 == s2){
System.out.println("같은 주소");
}else {
System.out.println("다른 주소");
}
출력 : 다른 주소
- 데이터 (값) 비교할땐 이렇게 해야한다.
if(s1.equals(s2)) {
System.out.println("같은 값");
}else {
System.out.println("다른 값");
}
2. 배열
- 동일한 자료형의 데이터를 저장하는 정적인 자료구조
- int[] : int형배열을 만들겠다, []개수가 한차원
int[] score = {80, 90, 100};
for(int j = 0 ; j <score.length ; j++)
{
System.out.println(score[j] + "\t");
}
System.out.println();
3. 인터페이스
- 대표적인 인터페이스 List
- 인터페이스는 new 연산자로 생상할 수 없다. 자체적으로 객체생성 불가능
+ List 특징
1. 순차적인 자료구조
2. 여러가지 자료형의 데이터를 저장할 수 있다. (배열과 다르게 여러 자료형 혼용가능)
3. 동적으로 공간의 크기를 늘릴 수 있다.
//List list = new List(); //인터페이스는 new 연산자로 생상할 수 없다. 자체적으로 객체생성 불가능
List list = new ArrayList();//자료형 변환 관련 '업캐스팅'이란 개념. 동적으로 계속 늘려줌
list.add(30);//정수값을 저장
list.add(3.14);//실수값을 저장
list.add('j');//문자값을 저장
list.add(true);//논리값을 저장
list.add("자바");//문자(열)값을 저장
for(int k = 0 ; k <list.size() ; k++) {
System.out.print(list.get(k) + "\t");
}