본문 바로가기
Today I Learned 2024. 4. 22.

(24.04.22)[2주차] Java문법 종합반 강의(Java입문, 변수/상수, 연산자, 조건문/반복문, 배열)

2주차가 시작이 되었는데 생각보다 과제가 생각보다 Java의 모든 기능을 한번 훝는 느낌으로 나왔기 때문에

다음주 수요일 과제 제출 전까지 예습했던 Java내용을 한번에 복습을 해야할 필요가 있었다.

 

따라서 이번주 계획 수정

  • 목요일 오전까지 Java문법 종합반 강의를 통한 Java 복습 및 정리
  • 목요일 오후 ~ 화요일 오후 까지 1/4로 나눠서 하루치 과제 코드 짜기 및 점검

이렇게 학습을 빠르게 치고, 과제를 진행하면서 스스로 코드를 좀 짤 수 있는 시간을 가지는 방향을 하기로 했다.

 


Java문법 종합반 강의 간단정리

  • 사전캠프 때 Java Guidbook으로 예습을 한 내용과 Java의 정석 개인 학습의 내용을 합친 내용이긴 하지만, 그냥 넘기기 보다는 한번더 훝으면서 마지막 복습이란 느낌으로 진행
  • 미리 예습한 내용과 반복되는 내용은 가볍게 정리/점검, 새로배우는 내용 스레드관련 부분이 나올 경우, 좀더 심화해서 듣기 계획
  • 강의 내용이 방대하여 스스로 강의를 들으면서 최대한 핵심만 남기고 줄이면서  정리하는 느낌으로 진행
더보기

Java 언어

  • C언어를 가져온 언어로 객체 지향 언어
  • 메서드와 클래스를 통해서 객체를 형성, 작동하는 언어

Java 기능

  • OS 구분없이 공통 실행환경
  • OS 위에서의 Application 작동 가능
  • 쉬운 유지보수
    • Class를 통한 Object 객체를 통해서 작동하므로 쉽게 다룰 수 있음
  • 높은 안정성
    • Complier를 통한 오류 및 보안 기능
  • 대규모 앱 개발이 가능
    • Network, DB 연결 및 통신 처리 API가 다양
  • 방대한 양의 개발 도구와 라이브러리
    • Java의 종사하는 사람들이 많이 있고, 있었기 때문에 가능

JVM, Java Virtual Machine

  • 자바 가상 머신, Java프로그램을 실행시킬 수 있는 가상의 기기 Machine를 만들어 주는 것
  • 다양한 Device 환경에서 JVM의 구현을 통해 공통적으로 사용 가능

바이트 코드

  • 소스코드를 Complier가 바꾼 언어로 .class 파일로 변환된 것
  • JVM에 쓰일 수 있음

클래스 로더

  • 메모리영역에 만든 Java 변환 파일을 옮기는 운반기

메모리 영역

  • Java가 작동되기 위해 할당받은 영역, Java 데이터를 저장하는 영역

Esecution 실행 엔진

  • 인터프리터
    • 소스파일에서 컴파일 없이 즉시 번역되어서 동작 하는 언어
    • 따로 기계어로 번역 필요 없음
    • Java.class 코드 해석
  • JIT 컴파일러
    • Just In Time 컴파일러
    • 인터프리터 효율을 높여주기 위한 빠른 컴파일러
      • 적당한 시점에서 바이트 코드 전체를 한번에 컴파일 해서
  • Garbage Collector
    • 메모리 영역의 쓸모없는 데이터 정리

JRE Java Runtime Environment / 자바 실행 환경

  • Java 프로그램을 실행 시키는 환경
  • .class 파일만 실행 가능

JDK : Java Development Kit / 자바 개발 도구

  • .java.class 파일로 바꾸는 컴파일러의 역할
  • 디버깅
    • 중단점을 기준으로 일시정지 + 코드 라인 단위 수행하여 확인
    • intelliJ 기준 하나씩 확인해서 보여줌
  • JRE의 기능

    Java 언어

    • C언어를 가져온 언어로 객체 지향 언어
    • 메서드와 클래스를 통해서 객체를 형성, 작동하는 언어
    Java 기능
    • OS 구분없이 공통 실행환경
    • OS 위에서의 Application 작동 가능
    • 쉬운 유지보수
      • Class를 통한 Object 객체를 통해서 작동하므로 쉽게 다룰 수 있음
    • 높은 안정성
      • Complier를 통한 오류 및 보안 기능
    • 대규모 앱 개발이 가능
      • Network, DB 연결 및 통신 처리 API가 다양
    • 방대한 양의 개발 도구와 라이브러리
      • Java의 종사하는 사람들이 많이 있고, 있었기 때문에 가능

    JVM, Java Virtual Machine

    • 자바 가상 머신, Java프로그램을 실행시킬 수 있는 가상의 기기 Machine를 만들어 주는 것
    • 다양한 Device 환경에서 JVM의 구현을 통해 공통적으로 사용 가능
    바이트 코드
    • 소스코드를 Complier가 바꾼 언어로 .class 파일로 변환된 것
    • JVM에 쓰일 수 있음
    클래스 로더
    • 메모리영역에 만든 Java 변환 파일을 옮기는 운반기
    메모리 영역
    • Java가 작동되기 위해 할당받은 영역, Java 데이터를 저장하는 영역
    Esecution 실행 엔진
    • 인터프리터
      • 소스파일에서 컴파일 없이 즉시 번역되어서 동작 하는 언어
      • 따로 기계어로 번역 필요 없음
      • Java.class 코드 해석
    • JIT 컴파일러
      • Just In Time 컴파일러
      • 인터프리터 효율을 높여주기 위한 빠른 컴파일러
        • 적당한 시점에서 바이트 코드 전체를 한번에 컴파일 해서
    • Garbage Collector
      • 메모리 영역의 쓸모없는 데이터 정리

    JRE Java Runtime Environment / 자바 실행 환경
    • Java 프로그램을 실행 시키는 환경
    • .class 파일만 실행 가능
    JDK : Java Development Kit / 자바 개발 도구
    • .java.class 파일로 바꾸는 컴파일러의 역할
    • 디버깅
      • 중단점을 기준으로 일시정지 + 코드 라인 단위 수행하여 확인
      • intelliJ 기준 하나씩 확인해서 보여줌
    • JRE의 기능

변수

  • 값을 지정하는 어떠한 공간
    • 값은 종류에 상관 없이 자유롭게 달라질 수 있음
  • 변수 이름을 지정하여 사용 가능

선언

int Number = 1;
  • 선언과 동시에 할당 가능

할당

Number = 2;
  • 선언 값에 덮어쓰기라고 생각

상수

final (변수선언)

  • 변하지 않는 값을 가지는 저장 공간
  • 한번 지정하면 바꿀 수 없음

변수의 종류

기본형 변수

종류

  • 논리형 변수 boolean
    • true / false 지정
  • 문자형 변수 char
    • ‘a’ 처럼 한 글자만
  • 정수형 변수 byte short int long
    • 0을 포함한 모든 정수 가능
  • 실수형 변수 float(4byte) double(8byte)
    • 접미사 사용 f d 사용

참조형 변수

  • 미리 정해둔 것이 없기 때문에 별도의 공간을 만들어서 지정한 뒤, 참조해서 쓴다고 생각

종류

  • 문자형 변수 String
  • ETC
    • Object
    • Array
      • 참조형 번수이기 때문에 출력하면 값이 아닌 주소가 출력
    • List …

래퍼 클래스 변수

  • Wrapper Class 기본형 변수에 대응하여 감싸서 클래스 내 메서드를 사용할 수 있도록 하는 것

문자 char

  • 아스키코드 사용
    • 매핑되어 있는 문자에 해당하는 코드를 사용

문자열 String

  • 여러개의 문자의 모음이라고 생각
  • 문자가 1byte임에 있기 때문에 \0 Null문자가 뒤에 붙어서 저장

 

참조형 변수

  • 주소형 변수
    • 실제 값을 저장하는 것이 아니이기 때문에 크기가 큰 원본 데이터의 주소를 저장
  • Heap 영역에 원본을 저장, Stack영역에 주소값을 저장하는 방식

Stack영역

  • 정적메모리
  • 정확한 크기가 정해진 기본형 변수값, 참조형 변수의 주솟값 저장

Heap 영역

  • 동적메모리
  • 크기가 변하는 값인 참조형 변수값 저장

형변환

정수형 ↔ 실수형

(int)변환할 값

(double)변환할 값

(float)변환할 값

  • 소숫점 이하는 버려짐, 반올림X
  • 데이터가 수정이 되는 것
  • 명시적 형변환의 일종

자동형변환

  • 굳이 지정을 하지 않아도 자동으로 형변환을 하는 것
  • 작은 크기의 타입 → 큰 크기의 타입 으로 가능
    • byte(1) < short(2) < int(4) < long(8) < float(4) < double(8) 크기 순서
    • 서로간 계산이 될 경우 큰 타입으로 당연히 맞춰짐
      • int + double이 된다면 double로 출력
    • 큰 타입으로 작은타입을 귀속시키는 방식

캐스팅

  • 형변환과 달리 큰 타입에서 작은 타입으로 형변환
  • 값을 줄이기 위한 값의 손실이 발생

연산자 Operator & 피연산자

  • 연산자 : 연산을 수행하는 기호 *** , +**
  • 피연산자 : 연산자의 연산 수행 대상 9 , x , 3

산술 연산자

  • + - * / % << >>
  • 사칙 연산과 나머지 연산(%)
  • 비트연산도가능

비교 연산자 Comparison Operator

  • < > >= <= == !=
  • 크고 작음과 같고 다름을 비교

논리 연산자

  • && || ! & | ^ ~
  • '그리고(AND)' 와 '또는(OR)' 으로 조건을 연결

대입 연산자

  • **= += -= *=**
  • 우변의 값을 좌변에 저장 (복합 대입 연산자)
  • 추가 연산이 있을 경우 좌측을 우측과 연산해 좌측과 저장
  • ++ --
    • ++a 과 a++ 둘다 연산 순사가 다르기때문에 조심

기타 연산자

  • (type) ?: instanceof
  • 형변환 연산자
    • **int intNum = (int)1.23** 이렇게 앞에 타입을 넣는 것
  • 삼항 연산자
    • ( 조건식 ) ? (반환값1) : ( 반환값2 ); 조건식이 true는 반환값1, false는 반환값2
  • instanceof연산자
    • 피 연산자가 클래스의 객체(종속된 클래스끼리도 가능)인지 아닌지 boolean값 반환

비트 연산자

  • 비트는 연산단위를 컴퓨터가 이해할 수 있도록 매우 빠른 연산
  • 2진수를 기준

연산자의 우선순위

  • 산술 > 비교 > 논리 > 대입 순서
    • 수학 문제를 순서대론 푸는 것이라고 생각
  • & 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
  • | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
  • ^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
  • ~ 비트를 1이면 0으로, 0이면 1로 반전 시킴. (비트 NOT 연산, 1의 보수)
  • << 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)
  • >> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴.
  • >> (right shift 연산)지정한 수만큼 비트를 전부 오른쪽으로 이동 시키며, 새로운 비트는 전부 0이 됨

조건문

if

if (조건식) { 
          조건식의 결과가 참일 때 실행하고자 하는 문장;
}
  • 조건식은 boolean 타입, true 일때 {} 사이 출력

if - else

if (조건식) { 
          조건식의 결과가 **참**일 때 실행하고자 하는 문장;
} else { 
          조건식의 결과가 **거짓**일 때 실행하고자 하는 문장;
}
  • 참일 때 거짓일 때, 각각 결과 출력

if - else if - else

if (조건식1) { 
          조건식1의 결과가 **참**일 때 실행하고자 하는 문장;
} else if (조건식2) { 
          조건식 1의 결과가 **거짓**이고, 조건식2의 결과가 **참**일 때 실행하고자 하는 문장;
} else {
          조건식1의 결과도 **거짓**이고, 조건식2의 결과도 **거짓**일 때 실행하고자 하는 문장;
             즉, 위의 어느 조건식에도 만족하지 않을 때 수행 
}

중첩 if

if (조건식1) { 
         조건식1의 결과가 **참**일 때 실행하고자 하는 문장;
          if (조건식2) { 
                   조건식1 과 조건식 2의 결과가 **모두 참**일 때 실행하고자 하는 문장;
           } else { 
                    조건식1의 결과가 **참**이고, 조건식2의 결과가 **거짓**일 때 실행하고자 하는 문장;
            }
} else { 
          조건식1의 **결과**가 거짓일 때 실행하고자 하는 문장;
}

Switch

switch (조건식) { 
          case 값1: 
                      조건식의 결과가 값1과 같을 경우 수행할 문장; 
                      break;
          case 값2: 
                      조건식의 결과가 값2와 같을 경우 수행할 문장; 
                      **break**; 
            ....  

           **default**:  
                       조건식의 결과와 일치하는 case 문이 없을 때 수행할 문장; 
} 
  • 하지만, break 일 경우에는 끝까지 진행아

if vs switch

  • if는 ()안에 조건문을 여러개 지정 가능하나 swtich 는 작동상 한개의 피연산자의 대응하는 조건
  • if는 switch보다 중복코드가 상당히 많음

반복문

for

for (초기화; 조건식; 증감식) { 
          조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 문장;
}
  • 조건이 true가 될때 까지 반복

향상된 for

for (타입 변수이름 : 배열 or 컬렉션) { 
          배열 or 컬렉션의 길이만큼 반복적으로 실행하고자 하는 문장;
}

while

while (조건식) { 
          조건식의 결과가 거짓이 될 때까지 반복적으로 실행하고자 하는 문장;
}
  • 조건식이 거짓이면 중지를 하면 됨

do-while

do { 
          조건식의 결과가 거짓인 동안 반복적으로 실행하고자 하는 문장;
} while (조건식);
  • while과 다르게 먼저 실행되고 조건을 확인

배열 Array

  • 자료구조를 구성하기위한 자료를 담는 공간

선언

  • **타입 변수[]**
  • **타입 변수[]**

생성

  • **타입[]** 배열이름 **= new 타입[크기]**
  • 크기를 지정해서 미리 생성을 해야

순회

  • 처음부터 인덱스 0으로 순번이 존재하여 순회하면서 작업 가능

초기화

int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  • 초기화를 위해서 생성과 동시에 선언을 할 수 있음

복사

  • 얕은 복사, 즉, 참조변수(이름)을 사용해서 복사해버리면 주소값만 복사
    • Object클래스의 clone 메서드, Arrays클래스의 copyOf도 마찬가지\
    • 복사된 배열의 요소를 바꾸어도 주소는 그대로 유지가 되는 것
  • 깊은 복사를 사용해서 똑같은 값을 새로 지정해서 만들어야
    • for문이나 Stream을 사용, 새로운 배열에 하나씩 넣어야

String 배열

  • String은 char[] 형태
    • String s = new String(char[] c); 로 선언이 가능
  • 따라서 String 자체는 배열처럼 생각하여 메서드를 사용 가능
    • Striong 클래스를 참조

다차원 배열

2차원 배열

  • 배열 안에 배열이 있는 형태, 행렬의 형태

가변배열

  • 배열의 행렬 기준 어떠한 값을 비워놓고 써도 가능
int[][] array1 = new int[3][]; // 가변배열로 가능

int[][] array2 = {
	{10, 20, 30},
	{10, 20, 30, 40},
	{10, 20}
}; // 가변배열 3*4배열에서 여러개가 없는 형태로 초기화가능
  • 그렇기 떄문에, 가변배열의 요소를 인덱스 for을 돌릴 때 length를 사용하거나 향상된 for을 사용해야

다차원배열

  • n개의 배열이 안에 있는 것

 

 


생각보다 Java의 정석 기준으로 모든 Java의 내용을 활용해서 과제를 해야하기 때문에, 빠르게 사전캠프 기간동안 한 내용을 강의로 복습하고, 진행해야할 것 같다.

 

사전캠프가 아니었다면, 공부하느라 끙끙알았을 듯. 다행이다..