내일배움캠프 7기

Spring7기 6일차(자바 강의1주차)

suuuki 2024. 10. 8. 21:43

자바

데이터: 컴퓨터가 정보를 담는 자료값

데이터 타입(자료형): 데이터의유형 ex)정수,문자,부동소수,소숫점)

자료구조: 데이터 여러개를 분류해서 담을 수 있는 분류통

문맥: 문맥이라 함은 개발언어로 표현한 프로그램의 동작 흐름을 의미합니다. 이케아 가구 조립 설명서, 밀키트 요리 레시피에 조건에 따른 문맥이 있듯이 프로그램도 문맥을 가지고 있다

메서드: 데이터와 문맥을 감싸는 포장지

동통 실행환경: 여러 기기의 운영환경에서 실행 할 수 있도록 판을 깔아주는 실행환경

운영체제: 기기가 프로그램을 실행시키는 운영환경 ex)window,android,iso,lunux


a언어: (1960)초장기 언어

입출력,문맥 기능만 구현가능

b언어: (1960)

a언어기능+기계식 데이터 타입,연산기능,메서드('~하다'행동규정)

c언어: (197)

b언어 기능+자료형데이터 타입,자료구조


자바

c언어+공통실행환경(jvm,놀이터),클래스(바쿠니틀),객체(바구니)

대표적인 객체지향언어(객체=object)

가장 많이 쓰이는 언어

공통실행환경이 있어서 여러 기기에서 실행 가능합니다

특히 앱 개발에 적합하다(앱=운영체제 위에서 실행되는 프로그램)

ex)mobile app,server app

 

-안정성이 높아 프로그래밍의 오류를 방지하고 보안상 안전합니다

compiler가 먼저 오류 체크

-대규모 앱 개발 가능

네트워크 밒 데이터베이스 연결및 통신 들 작업을 처리하는 api제공

-다양한 개발 도구와 라이브러리를 사용 할 수 있음

 

 


JVM

java virtual machine, 자바 가상 머신

가상머신이란 가상 기기를 만들어주는걸 의미, 여러가지의 기기 위에 java프로그램을 실행시킬 수 있는 가상의 기기 만들어주는것을 의미


바이트코드

java프로그램 변환코드

내가 작성한 코드가 운영체제가 읽을 수 있는 코드(바이트코드)로 jaca 컴파일러가 변환한 코드

java컴파일러=java(사람이해)->class(운영체제 이해)로 변환

 

인터프리터

java,class 코드 해석기

운영체제가 읽은 바이트 코드를 기기(기계)가 실행 할 수 있는 기계어로 번역

 

JIP 컴파일러(just it time)

빠른 java,class 코드 해석기

인터프리터의 효율을 높여주는 서포트 해석기

(빠르게 인터프리터의 효율 높여준다)

 

메모리(memory)영역

java 데이터를 저장하는 영역

운영체제(윈도우,맥)로부터 JVM이 할당받은 메모리 영역

 

클래스 로더

java,class 바이트 코드를 메모리 영역에 담는 운반기

Jvmdmfh class(바이트코드)를 불러와 메모리에 저장함

 

가비지 컬렉터

java쓰레기 청소기

메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기

 


JDK

1)complier: java->class

2)JRE
3)JDB: 디버깅

JVM의 약속: 자바 프로젝트(앱)는, 제일 먼저 클래스의 main메소드를 실행시킨다


 

public: (접근)제어자, public(공공의,공통의)

-클래스 이름(Main)은 저장파일과 일치 시켜야 한다

public class Main {

static: 이 프로그램이 시작 될 때 무조건 실행되는 녀석

 

output

void: 메서드의 출력값의 데티어 타입

         "아무것도 없다"의 뜻으로 많이 쓰임-->출력이 없다

input

String[] args: 매개변수 자리

  -args: 변수명, 다른걸로 아무거나 써도 된다

public static void main(String[] args) {

 

객체: 특징(속성,변수), 행동(메소드)

자바의 하위 요소를 "."으로 표시

out=객체, println=행동

print: 줄바꿈은 하지x

println: 줄바꿈 o

ln: line

println(숫자)/println("문자")

public class Main {
    public static void main(String[] args) {
        System.out.println("our first project!");
    }
}

 


 

선언

할당(저장)

1.선언과 동시에 저장한다면 이것은 "초기화"

선언과 동시에 값을 저장공간에 저장

2.선언 이후에 값을 저장한다면 일반적으로 "덮어쓰기"

선언 이후에 다른 값을 저장 공간에 저장

 

 

변수: 변하는 저장공간

java프로그램에서 저장하는 대부분의 값들은 변하는 것, 즉 변수이다

숫자만 말하는것이 아니라, 하나의 값을 저장할 수 있는 저장공간을 의미

 

상수: 변하지 않는 저장공간, 한번 할당을 하면 바꿀수 없는 저장공간

변하지 않을 값을 변하지 않는 저장공간에 저장

ex)파이=3.141592

 

저장공간의 종류(변수 타입)

<기본형: 숫자형,문자형, boolean(true: 1, false: 0)>

 

-논리형 함수: baoolean

True,false 값만 지정합니다

 

boolean flag = true; // 1. 논리형 변수 boolean 으로 선언 및 True 값으로 초기화
flag = false; // 2. False 값으로도 저장할 수 있습니다.

true/false 대신에 숫자,"true","false"라고 하면 오류 날 수 있음

참조형: 뭔가 복잡한, 어딘가에 별도로 저장->참조

-문자형 변수: char

'A','1'와 같은 문자 하나만 저장

-정수형 변수:byte,short,int,long

0,1,99와 같은 정수형 숫자값을 저장

byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.
short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.
int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.
long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.

 

실수형 변수: float, double

0.234, 0.999와 같은 소수점 실수값을 저장

float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38(long 보다 큼) 범위의 숫자 저장이 가능합니다. 접미사 F사용

float floatNumber = 0.123f; // float 는 4byte 로 3.4 * 10^38 범위를 표현하는 실수값

double (8byte) : 1.7 * -10^308 ~ 1.7 * 10^308(long 보다 큼) 범위의 숫자 저장이 가능

double doubleNumber = 0.123123123; // double 은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값

-float 가 long 보다 더 넓은 범위를 표현하기 때문에 자동 형변환이 안됨

long longNumber = 3.14f; // long < float 자동 형변환 불가

 

 

 

<참조형변수>

어느공간에 있는 주조값을 바라보고 있는 변수

-문자열 변수: String

"apple", "텍스트" 와 같은 문장 을 저장한다

String message = "Hello World"; // 문자열을 저장합니다.

 

 

-그 외: object, arrat,list...

객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장

List<int> alphabet = [0,1,2,3]; // 기본형 변수 여러개를 저장합니다.

 

-래퍼 클래스 변수(Weapper class)

기본형 변수를 클래스로 한번 랩핑(감싸는) 변수

박싱vs 언박싱

박싱: 기본 타입에서 래퍼클래스 변수로 변수를 감싸는 것

언박싱: 래퍼 클래스 변수를 기본 타입 변수로 가져오는것

 

 

 

문자 &문자열

문자형=기본형

문자열=참조형

 

선언 관점에서 차이점

-문자(char): 문자 한개만 저장하며 따옴표를 사용하여 값을 지정 ex) 'a'

-문자열(String): 무자 여러개를 문장 형태로 저장하며 쌍따옴표를 사용하여 범위를 지정 ex)"abcdefg"

 

저장 관점에서 차이점

-문자(char)

문자 뒤에 \0(널문자)가 없다-구분을 위한 문자

1byte만 쓰기 때문에 끝을 알아서 데이터만 저장

-문자열(string)

문장의 끝에 \0 (널문자)가 함께 저장

몇개의 byte를 쓸지 모르기 떄문에 끝을 표시해야 한다

 

참조형 변수=주소형 변수

다른 기본형 변수가 실제값을 저장한다면, 참조형 변수는 실제 값이 아닌 원본값의 주소값을 저장<-크기가 커서 별도의 저장공간 필요


stack 영역 vs heap 영역

stack :정적으로 할당된 메모리 영역

크기가 몇 byte인지 정해져 있는 기본형 변수 저장

크기가 정해져 있는 참조형 변수의 주소값도 저장

heap: 동적(=알수없을때)으로 할당된 메모리 영역

크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장

 


 

byte(1)->short(2)->int(4)->long(8)->float(4)->double(8)

작은 크기의 타입에서 큰 크기의 타입과  '계산'될때, 자동으로 큰 크기의 타입으로 형 변환

자동 형변환 vs 강제 형변환

  • 작은 타입 > 큰 타입 형변환 시 (자동 형변환)
    • 더 큰 표현 범위를 가진 타입으로 변환되는 것이라 값의 손실이 없습니다.
    • 값의 손실 없이 변환이 가능하기 때문에 컴파일러가 자동으로 형변환을 해준다
  • 큰 타입 > 작은 타입 형변환 시 (강제 형변환 = 캐스팅)
    • 더 작은 표현 범위를 가진 타입으로 변환된는 것이라 값의 손실이 생깁니다.
    • 값의 손실이 생기기 때문에 자동으로 형변환을 해주지 않고 개발자가 선택하여 형변환을 한다

 

 


sout 입력시->sysem.out.println()

 


IDE: 통합 개발환경

 

command+/: 전체 주석처리

 

아스키코드: 숫자<->문자

 

scanner: 입력한 값을 저장하는것