JAVA
- os를 가리지 않음
- 소스코드 파일(*.java)을 컴파일(*.class) 하면 자동으로 os에 맞게 실행, 이식성이 좋음
- oop(object orient program) : 객체지향프로그램, 레고형태로 조립하여 사용
- 객체 안에 속성(변수)과 매서드(동작)
- 메모리관리의 편리함(비지니스 로직)
- 멀티스래드
- 동적로딩
- JDK = JVM(Java Virtual Machine) + JRE(Java Runtime Environment)
- 클래스 파일 = 바이트 코드 파일
- JVM의 구동명령어에 따라 컴파일러가 컴파일
- 메모리공간, 객체 내의 코딩공간 중요
JDK(Java Developement Kit) : 여러 버전 존재, 가장 안전한 버전 1.8 + 11v
개발자끼리의 약속
자바프로젝트이름은 대문자시작
패키지명은 다 소문자시작
클래스는 무조건 대문자시작
cmd 관리자모드는 찾기에서 cmd적고 ctrl+shift+엔터
IDE
1. 프로젝트 생성기능
2. 자동완성기능
3. 디버깅
4. 플러그인
5. 환경설정 metadata
java jdk 삭제
1. 터미널 켜기
2. cd /Library/Java/JavaVirtualMachines/
3. ls 입력 후 내부 파일 파악
4. sudo rm -rf jdk이름.jdk
5. mac password 입력
윈도우 java 설치
[] 안에는 입력 명령어
1. 선생님이 주신 javaUtil 프로그램 c드라이브에 압축풀기
2. javaUtil 폴더 안에 이클립스 알집 풀기
3. zulu 어쩌구 파일 다운로드
4. cmd 열기 그리고 [java -version] 으로 버전확인
5. 내 pc 우클릭 속성 > 고급시스템설정 > 고급 탭 > 환경변수 > 시스템변수
6. 새로만들기 클릭 후 변수 이름에 [JAVA_HOME] 변수 값에 [C:\\Program Files\\Zulu\\zulu-8]
7. 시스템 변수 중에 path 클릭 새로만들기 누르고 [%JAVA_HOME%\\bin] 입력
8. cmd에 [javac] 입력 후 잘 깔렸는지 확인
9. cmd에서 c드라이브 가는 법 [c:] 또는 [cd c:\\]
mac apple silicon
환경변수 설정
root에서 ls .bash_profile 확인 후
open .bash_profile로 파일 켜서 수정 후
source .bash_profile로 적용 후
printenv로 적용여부확인
이클립스
이클립스 실행 후 우측상단 open perspective 켜서 Java 선택 //코어자바연습
워크스페이스[작업공간] 런치
file > Switch Workspace > other > 경로 선택 후 런치
작업환경설정
* 초기화
window > perspective > reset perspective
*설정
window > preference
Workspace에서 text file encoding을 utf-8로 변경
Web에서 css Files, html Files, jsp Files의 언어를 utf-8로 변경
*프로젝트 생성
project java로 생성 1.8버전 맞춘 후
프로젝트 파일에 우클릭 project facets에서 java 버전 1.8로 맞추기
//패키지 : 폴더로 관리하는 개념
package hello;
/*
작동방식
: *.java = 사람이 볼 수 있는 코드, 저장 후 컴파일을 하면 *.class가 만들어짐(= 컴퓨터가 알 수 있는 코드)
a. HelloWorld.java 코딩
b. HelloWorld.class 컴파일
c. JavaVirtualMachine(JVM => JDK설치시 생김)이 해석
d. 결과 출력
JVM = a. HelloWorld.java와 같은 이름의 HelloWorld.class 파일을 찾아
b. (무조건) main메서드를 찾아 첫 번 째로 실행시키도록 약속이 되어 있음
c. 자바의 Entry Point(시작점) = main() 메서드
*/
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("첫 번 째 자바코딩 !!");
}
}
A. 데이터 타입 = 기본 타입(Primitive type), 참조타입(Reference type)이 있음
* 기본타입(리터럴) = byte, char, short, int, long, float, double, boolean => 총 8개 , stack에 저장
* 참조타입 = 클래스, 인터페이스, 배열, 열거 , heap에 저장
B. 변수의 메모리 사용
* 기본 타입 변수 = 실제 값을 변수 안에 저장 => stack
* 참조변수 타입 = 주소를 통해 객체참조(=주소값 참조) => heap
기본 자료형(Primitive Type)
char |
16비트 유니코드(Unicode) 문자 데이터 |
16 |
‘\u0000’ ~ ‘\uFFFF’ |
boolean |
참/거짓 값 |
8 |
true 또는 false |
byte |
부호를 가진 8비트 정수 |
8 |
-128 ~ +127 |
short |
부호를 가진 16비트 정수 |
16 |
-32,768 ~ +32,767 |
int |
부호를 가진 32비트 정수 |
32 |
-2,147,483,638~+2,147,483,647 |
long |
부호를 가진 64비트 정수 |
64 |
-9223372036854775808~+9223372036854775807 |
float |
부호를 가진 32비트 부동 소수점 |
32 |
-3.402932347e+38~+3.40292347e+38 |
double |
부호를 가진 64비트 부동 소수점 |
64 |
-179769313486231570e+308~1.79769313486231570e+08 |
참조 자료형(Reference Type)
C. JVM이 사용하는 메모리 영역
: OS에서 할당받은 메모리 영역(Runtime Data Area)을 세 영역으로 구분
* 메서드 영역(Method Area)
=> (참고) 런타임 상수풀, 필드/메서드 데이터, 메서드 코드, 생성자 코드 => 4영역 구분
=> JVM이 시작될 때 생성
* (JVM)스택 영역(Stack Area)
=> 스레드-n이 생성될 때마다 변수 n개가 저장되는 영역
=> JVM별 생성
* 힙 영역(Heap Area)
=> 주소값이 가르키고 있는 실제 데이터가 있는 영역
=> JVM이 시작될 때 생성
=> 객체/배열 등 저장
=> 사용되지 않는 객체 => Garbage Collection이 자동 제거
//참조는 클래스 본인도 데이터 형이 될 수 있음
public class Jb04ReferenceType {
public static void main(String[] args){
ReferenceData1 refDate1 = new ReferenceData1();
ReferenceData1 refDate2 = new ReferenceData1();
//refDate1과 refDate2는 같은 클래스를 생성하지만 주소값이 다름
}
}
데이터 타입에 따라 계산할 수 있는 연산이 다름
따라서 데이터 타입을 반드시 알아야 함
숫자형, 문자형이 데이터 타입의 핵심
# 복합연산자(Operator) : +,-,*,/,%
int num = 1;
int num2 = 2;
num + num2 //result = 3 : int
int num = 1;
long num3 = 10;
num + num3 //retult = 11 : long
* 작은 타입과 큰 타입이 연산될 시 자동으로 더 큰 타입으로 형 변환 (promotion)
String str = "1";
int num4 = 99;
str + num4 //retult = 199 : String
* 문자열과 숫자가 결합 시 문자열로 리턴
# Math : 수학 객체
객체 = 폴더 = 수학에 관련된 중요한 것들을 그룹화 해놓은 매서드, 프로퍼티들이 있다.
* Math.PI : double //원주율
* Math.floor(double num) : double //내림
* Math.ceil(double num) : double //올림
# String : 문자열 객체
* String.length() : int
* String.replace(char old_str, char new_str) : String
# Escpae 문자 : \\t, \\n, \\b, \\', \\" , \\\\ ...
\\ 다음에 오는 회피문자 => 일부 컴파일러는 다르게 나오거나 비정상적인 결과를 제공할 수 있음
(예) \\t => 탭, \\n => 개행, \\b => 백스페이스(단어사이공백제거),
\\' => 작은따옴표, \\" => 큰 따옴표, \\\\백슬래쉬
System.out.println("Hello" +"\\t"+"world"+" 탭 문자열"); //Hello world 탭 문자열
System.out.println("Hello" +"\\n"+"world"+" 개행"); //Hello
// world 개행
System.out.println("Hello " +"\\b"+"world"+" 단어사이공백제거"); //Helloworld 단어사이공백제거
System.out.println("Hello" +"\\'"+"world"+" 작은따옴표"); //Hello'world 작은따옴표
System.out.println("Hello" +"\\""+"world"+" 큰따옴표"); //Hello"world 큰따옴표
System.out.println("Hello" +"\\\\"+"world"+" 백슬래쉬"); //Hello\\world 백슬래쉬
# Casting : 강제로 데이터형을 변환시킴
(ex) int num3 = (int)1.1;
# Scanner : inputStream //입력스트림
* java.util 소속 객체
(ex) import java.util.Scanner; //불러오기
Scanner scan = new Scanner(System.in) //객체 생성
* 참조 변수는 객체 자신도 데이터타입이 될 수 있음
참조객체 변수이름 = new 메서드()
scan.next() : String
scan.nextByte() : byte
scan.nextShort() : short
scan.nextInt() : int
scan.nextLong() : long
scan.nextBoolean() : boolean
(ex) int num = scan.nextInt() : int
* 입력한 값에 맞는 데이터형과 일치하는 변수에 담아야 함
# for문
for(int i=0; i<9; i++){실행문;}
* 초기값 생략
int i=0;
for(; i<9; i++){실행문;}
* 조건식 생략
for(i=0; ; i++){if(i<200) break;}
* 증감식 생략
for(i=0; i<5;){i = (++i);}
**# 패키지 (package)**
* 클래스 파일의 묶음
* 프로젝트의 하위 디렉토리. 즉, 클래스를 담아놓는 폴더
* 패키지의 네이밍은 소문자로 시작, 개발자들 끼리의 암묵적 약속
**# 객체지향프로그래밍(Object Oriented-Programming)**
* 객체를 정의하고, 객체를 조립하여 프로그래밍 하는 것 (예)시침, 분침, 초침 => 시계
**# 절차지향프로그래밍(Procedural Programming)**
* 순서대로 일어나는 일을 시간 순으로 프로그래밍하는 것
* 처리속도가 빠른 대신에 유지보수가 어렵다
**# 클래스**
* 객체지향 프로그래밍의 기반, 객체의 속성과 기능을 담고 있음
* 속성(property || attribute)은 멤버변수라고 부름
* 클래스의 네이밍은 대문자로 시작, 파일명과 같아야함
* 작성형식
접근제어자 class 클래스이름 {
멤버변수;
메서드(){
실행문
}
}
**# 멤버변수**
* 객체의 속성, 데이터
* 작성형식, []안의 값은 생략 가능
[접근제어자] [메모리할당변수] [키워드] 데이터타입 변수이름 = 값;
// 접근제어자 = private || public, 메모리할당변수 = static, 키워드 = final 등등...
**# 메서드**
* 객체의 메서드, 기능
* 작성형식, []안의 값은 생략 가능
[접근제어자] [메모리할당변수] 리턴타입 메서드이름([변수타입 변수]){
실행문;
}
// 접근제어자 = private || public, 메모리할당변수 = static, 리턴타입 = void 등등...
* 메서드에 void를 쓸 경우 리턴값 반환 없이 바로 실행
* void 메서드 (반환값이 없음)
public void voidMethod(){
System.out.println("void method!");
}
* return type 메서드 (반환값이 있음)
public String stringMethod(){
return "string method!";
}
**# 인스턴스 (Instance)**
* 객체(class)를 불러오는(생성) 것
* 작성형식
데이터타입(객체이름) 변수이름 = new 객체이름();
* 객체 본인이 데이터타입이 될 수 있음
* 객체생성 키워드 = new
* 기본 변수타입을 제외한 모든 변수는 참조변수
* 참조(Reference)변수에 불러온 객체(인스턴스)를 할당하여 사용
* 불러온 객체는 heap(동적메모리)의 메서드 공간에 할당
**# DAO (DATA ACCESS OBJECT)**
* DB에 접근하여 수정, 삽입, 삭제 등의 기능을 수행
* MVC 중에서 M(Model)에 해당
**# 생성자**
* 클래스를 생성할 때만 호출, 생성자 이름은 클래스 이름과 같고, 반환값은 없음
* 생성과 동시에 멤버변수 초기값 설정하는 역할
* 디폴트 생성자는 컴파일시 자동으로 자바 컴파일러가 값을 생성 (생성자명 = 클래스명)
* 생성자는 매개변수의 값으로 클래스 생성 시 초기화 해주고 싶은 멤버변수를 코딩해줌.
public Person(){}
//a. 디폴트 생성자
public Person(){}
//b. 생성자 만들기
public Person(String name){
this.name = name;
}
String name;
}
**# 접근제어자**
* 종류 : public, protected, private, default
* 정보은닉, 캡슐화 등때문에 사용
* public : 멤버변수, 메서드가 외부 클래스에서 접근 가능하므로 누구나 사용가능
* protected : 같은 패키지 내부와 (상속) 관계의 클래스에서만 접근 가능. 그 외 접근 불가
* private : 멤버변수, 메서드가 외부 클래스에서 사용 불가. 즉, 같은 클래스에서만 사용 가능
//외부에서의 접근을 막아, 데이터를 외부에서 바꾸지 못하도록 하기 위해(=데이터 보안을 위해 사용)
* default : 같은 패키지 내에서 사용
**# this**
* 자신의 메모리 주소를 가르키는 키워드 => 즉, 생성된 인스턴스 스스로를 가르키는 예약어
class Birthday {
int num = 1;
public int getNum(){
return this.num;
}
}