자바 1

Leafy·2023년 11월 29일
1

중앙_자바

목록 보기
1/76
  • 혼자 공부하는 자바 : 배포받을 책.
  • 이것이 자바다 : 전통적 자바 책. pdf는 여기서 제공된 것.

markdown syntax highlight
https://support.codebasehq.com/articles/tips-tricks/syntax-highlighting-in-markdown

천재꺼 수업정리 티스토리
https://han-s-coding.tistory.com/68

https://velog.io/@skawngml1106/%EC%9D%B4%ED%81%B4%EB%A6%BD%EC%8A%A4%EC%97%90%EC%84%9C-GIT%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

자바 도입부


리소스를 컴파일하면 cpu가 알 수 있는 기계어가 된다.

저차원 언어: 기계에 가까운 언어
고차원 언어: 사람에게 가까운 언어

예전에는 속도, 크기 문제에 굉장히 민감했었는데, 지금은 컴퓨팅파워(컴성능)이 좋아져서 ㄱㅊ
빅데이터는 속도가 중요

자바 특징


옛날에는 OS마다 다 다르게 프로그래밍했어야. 언어가 다 달라서
JVM(Java Virtual Machine) 덕분

요즘 나오는 언어는 이런 거 많음

  • 객체 지향 언어. 캡슐화, 상속, 다형성 기능 완벽하게 지원. 인터페이스까지 하면 다? 하는 것.
    쉽게 바꿔 끼울 수 있게 하는 것.

업로드중..

  • 메모리 자동 관리: 옛날에는 사용이 끝나면 사용 끝났다고 명시적으로 알려주고 메모리 비워줬어야.

업로드중..

  • 멀티 스레드(Multi-Thread) 쉽게 구현
  • 동적 로딩(Dynamic Loading) 지원
    미리 객체 만들어놓지 않고 '필요한 시점'에 동적 로딩해 객체 생성
    유지 보수 시 특정 객체만 쉽게 수정 및 교체해 사용

Dynamic (동적)
프로그래밍에서는 '필요한 시점에'라는 뜻.
Static (정적, 고정)
다이내믹의 반대.

자동 실행 프로그램... 쓰든 안 쓰든 일단 ram에 올려두는 것.
브라우저의 인터넷 연결 프로그램... 미리 ram에 올려둬서 키자마자 빨리 뜨는 것. (엣지가 윈도우에서 빨리 뜨는 이유)
아래아한글같은건 하드에서 가져와야해서 좀 느림.

필요할 때 메모리에 로딩 => 다이나믹 로딩. 속도는 느리지만 메모리 공간은 이득

메모리에 박아두고 시작 => 스태틱 로딩. 공간을 무조건 잡지마 속도는 빠름. (자주 쓰는 거)

정적 대신 고정이라고 해도 된다.
고정 ip(static ip)라는 말... 반댓말은 유동 ip(dynamic ip)

고정 ip가 더 좋다. 일반적으로 비쌈.

  • cmd에서 ipconfig라고 치면 이더넷 어댑터 이더넷 보여줌.
    업로드중..

IPv4 주소가 ip인데 동적 ip이다. 돈 주고 고정 ip 사면 박아넣을 수 있다.

업로드중..
JRE(java runtime environment) : JVM + 표준 클래스 라이브러리. 실행만...
JDK(java development kit) : JRE + 개발 도구. 개발하고 실행해봐야해서

우리는 JDK 깐 적 없지만 오라클 깔았기 때문에 java 있을 것.

업로드중..
LTS라는 용어는 많이들 쓴다. Long Term Support(장기 지원 서비스 버전)
발표할 때 이 LTS는 몇년몇월며칠까지 지원하겠다 말함.

우리가 받을 때는 LTS받는다.

그냥 JDK 있고 OpenJDK 있는데 오픈소스 친화적이라고 보이려고...

JDK 설치

Win키 + R하고 cmd 말고 wt하면 windows terminal 열림!

JDK 설치하고 나면 터미널에서 java 쳤을 때는 뭐가 나오지만,
javac는 못 찾아서 안 나옴.

윈도우에서는 .exe가 기본적으로 달려있다는 취급이라
java라고만 해도 java.exe라고 알아서 된다.

업로드중..

C:\Program Files\Java\jdk-1.8

업로드중..

자주 보일 디렉터리

  • bin (binary) 디렉터리
    0과 1. 기계어. cpu에게 바로 줄 수 있는 것. -> 실행파일이 들어 있는 디렉터리다.
    .dll 없는 아이콘들은 .exe가 생략된 애들이다.
  • lib ()

업로드중..
알려진 파일 형식의 확장명 숨기기 체크해제하면 .exe 나옴.

PATH

경로 알려주기
알려주는 방법은,, PPT에
업로드중..

업로드중..

업로드중..

시스템 환경 변수 편집 -> 작업표시줄 검색에 치면 됨.
환경 변수 창에서 시스템 변수(S)에 있는 Path에 넣어야 공통 유저가 쓸 수 있다.
업로드중..

하위 폴더는 안 찾기 때문에 bin안에 있는 javac.exe를 찾게 하려면 bin 디렉터리까지 환경 변수에 넣어줘야 한다.
그리고

%SystemRoot% -> 이거는 시스템 변수의 새로 만들기에서 앞부분 디렉터리를 변수에 담은 것.
업로드중..

예를 들면 C\Program Files\Java\jdk-1.8JAVA_HOME이라는 변수명에 넣으면,
Path에서 적을 때 %JAVA_HOME%\bin 이렇게만 적어도 된다.
-> 변수는 시스템 변수에 추가돼서 적힘.

자바 소스파일, 코드파일

업로드중..

자바 소스 파일(.java) -> 바이트 코드 파일(.class) -> 기계어(01010..) -> 실행

.java를 컴파일러(javac.exe)가 .class로 만들어주고 자바 버추얼 머신(java.exe)이 기계어로 만들어줌.

소스파일 A.java
컴파일 javac A.java
실행 java A

기본틀

  • class
    .java 파일 자체를 클래스라고 한다.(퉁치는 말..?)
    모든 것을 클래스라고 보면 된다.
public class Calculator{

	public static void main(String[] args) {}

}

모든 클래스의 첫글자는 대문자로 시작. 여기서는 Calculator.
.java의 파일명도 클래스 이름으로 해서 Calculator.java라고 해야 됨.
자바는 무조건 main()함수를 찾기 때문에 그걸 먼저 하고 다른 것들이 실행됨.

메모장 인코딩이 UTF-8인데, 영어만 있으면 ㄱㅊ. 한글은 MS949인가 그거여야 하나 봐.

점점..

public class Calculator{

	public static void main(String[] args) {
		int a = 234;
		int b = 456;
		String c = "Hello";
	    System.out.println(a*b);
	    System.out.println(c);
}

}

형변환...

이클립스

package = 폴더 개념
class = 파일 개념

package chap01;

public class First01 {
public static void main(String[] args) {
	System.out.println(); //syso에 ctrl+space
	
//	변수 a, b에 1, 2를 넣어서
//	result 변수에 a+b의 값을 출력하기
	int a = 1;
	int b = 2;
	int result = a+b;
	System.out.println(result);
}
}

C에서는 함수라고 했는데,
OOP에서는 메서드라고 한다. 99% 동일.

int a = 1; // a <- 1 이런 뜻. R에선 이렇게 한대.
a = a + 1;
int result = a+2;
System.out.println(result);

실행 단축키 오라클처럼 ctrl+enter 했다.

접근 제한자 public

public 클래스 아무나 다 써라.

내가 만든 클래스 아무나 쓰면 안 된다? -> public 안 됨.

package chap01 -> 내 클래스 존재
package chap02 있으면

private으로 붙여놓으면 다른 패키지에서 못 쓴다.

static

메모리에 상주한다. = 빈도가 높고 늘 쓰인다.

static은 안 쓰면 막 갖다 못 씀. -> 메모리에 없는데? 돼서.

void

나중에.

긴 주석은 /* */ 사이에

package chap01;

public class First01 {
	public static void main(String[] args) {
		System.out.println(); //syso에 ctrl+space
		/*
		변수 a, b에 1, 2를 넣어서
		result 변수에 a+b의 값을 출력하기
		
		할당 연산자
		*/
		int a = 1; // a <- 1 이런 뜻. R에선 이렇게 한대.
			a = a + 1;
		int result = a+2;
		System.out.println(result);
		
	}
}

변수와 타입

변수 variable

번역 때문에 그렇지 숫자가 들어갈 필요는 없다.
그냥 네모칸 안에 뭐가 들어갈 수 있다...

이클립스 단축키

  • ctrl + alt면 줄 복사
  • alt누른 채 위아래 방향키 -> 줄 옮기기 됨.

초기에는 선언과 할당을 함께 하지만,
나중에는 선언 다 해놓고 나중에 할당하게 될 것.

변수 이름의 작성 규칙

  1. 첫 번째 글자는 문자이거나 특문은 $, _만 가능. 숫자로 시작 불가.
  2. 대소문자 구분
  3. camelCase
  4. 문자 수(길이) 제한 없다.
  5. 자바 예약어는 못 쓴다.

변수 사용 범위

  • 로컬 변수
    선언된 메서드 블록 안에서만 사용 가능.
    선언된 중괄호 내에서만 쓴다.

Primitive Type 기본 타입

정수, 실수, 논리 타입

  • 정수
    byte, char, short, int, long
  • 실수(floating point number.. 번역 오류같고 소수 얘기다.)
    float, double
  • 논리
    boolean

정수 타입

값 크기는 몰라도 메모리 사용 크기 정돈 아는게 좋다.

  • byte(1byte, 8bit) : -128 ~ 127

  • short(2byte, 16bit) : -3만2천 ~ 3만2천 (-32,768 ~ 32,767)

  • int(2byte, 32bit) : -2billion ~ 2billion (-21억 ~ 21억)

  • long(8byte, 64bit) : -9백22경 ~ 9백22경 (-2^63 ~ 2^63)

  • char(2byte, 16bit) : 유니코드 0~65535 (short랑 같다.)

  • byte는 bit 8칸인데 맨앞은 부호(+/-)가 들어가서 7자리에만 숫자 절댓값 데이터 들어감.

  • 리터럴(literal)
    소스 코드에서 프로그래머가 직접 입력한 값 얘기.

16진수

16진수 표기법
0x 혹은 0X라고 쓰고 뒤에 적음. (A~F도 소문자 가능)
0x12은 1*16 + 2 = 18 의미.

A = 10
B = 11
C = 12
D = 13
E = 14
F = 15

2진수는 0B0b로 시작함. 1까지만 적음.
8진수는 0으로 시작. 7까지 적음

0개의 댓글