2023.05.22.월.TIL

heeh·2023년 5월 22일

TIL

목록 보기
6/82
post-thumbnail

JAVA1주

1-1 자바 역사와 특징 소개

  • java가 많이 쓰이는 특징

    • 대표적 객체지향 언어
    • 객체(object) → 사물보다는 세상에 존재하는 모든 것에 더 가까움
    • 세상에 존재하는 모든 것은 1. 특징과 2. 행동을 가지고 있음
      1. 특징 : 이름, 나이, 사는 주소, 혈액형, 외모 등…
      1. 행동 : 사람으로서 걷기, 숨쉬기 등…
    • 세상에 있는 객체들을 닮아서 프로그램 적으로 만든 것 = 객체 지향적인 프로그래밍
    • 객체 지향적인 프로그래밍을 지향하는 것이 Java라는 언어
    • 세상과 닯아있는 개발언어이기 때문에 이해하기 쉽고 유지 보수도 쉽다
  • 지금은 kotlin이란 언어를 통해서 안드로이드 개발이 많아짐

  • 개발자들이 라이브러리를 통해 java에 추천 파일을 제공하면 많은 사람들이 써봄 = 서드파티

  • input → system → output

1-2 JVM

  • Java virtual Machine
  • Hello.java > Java Compiler > hello.class > Java Virtual machine > Devices
    • java 언어는 메모장 같은 에디터를 통해서 작성해 놓으면 위 과정들을 통해서
      디바이스에서, PC나 모바일이나 서버에서 구동이 됨
    • Java Virtual machine가 없으면 디바이스별로 설정해 줘야하는 것이 많아짐
  • 바이트 코드
    • 확장자 : ~~.java
    • 운영체제가 읽을 수 있는 readable한 코드로 Java 컴파일러가 바꾼 코드
  • Java 컴파일러
    • java 파일을 class 파일로 변환해 주는 역할을 수행
      • java(사람이 이해할 수 있는 방법으로 짠 코드)는 운영체제가 컴퓨터가 읽을 수 없음
      • 운영체제가 이해 할 수 있는 방법이 calss라는 방법
  • 인터프리터
    • 운영체제가 읽은 바이트 코드를 기계어로 번역
    • 기계어(low레벨)와 사람이 이해하는 언어는 반대 - 밑으로 갈수록 “low레벨 언어”
  • JIT 컴파일러
    • Just In Time
    • 인터프리터의 효율을 높여준다
    • 인터프리터 & JIT 컴파일러 = 세트
  • 클래스 로더
    • 메모리 영역에 Java를 변환한 .class 파일을 운반하는 역할
  • Runtiom 시스템
    • 실행되는 시스템으로 이관 해준다
    • 이관을 하면서 실행되는 모든 변수, 객체들을 가비지 컬렉터로 청소하고 메모리를 효율적으로 관리하는 시스템
  • JVM 환경
    • <자바 인터프릭터, JIT 컴파일러 → Runtime 시스템> 을 개발자들이 구성해야 함
    • 그래야 환경을 구성하고 .java 코드를 만들고 .class로 만들어서 운영체제로 넘길 수 있음
  • JRE
    • Java를 실행할 수 있는 환경일 뿐 (조금 부족)
    • 우리가 필요 한 것
        1. Java → class 변환 필요 2. class 파일 실행
    • JRE로는 2번만 가능
  • JDK
    • 자바 개발 키트
    • Java → class 변환하는 “자바 컴파일러” 기능
    • JDK는 JRE를 포함하고 있음(JRE 기능 가능)
    • 코드를 디버깅하는 jdb 기능
      • de + bug(디버깅) = 코드를 면밀히 살펴보는 과정을 통해 벌레(나쁜것)을 없앰
    • IntelliJ = 에디터보다 조금 더 기능이 확장됨
      • IntelliJ 코드를 수정하고 실행하는 환경, 설치 후 디버깅이 뭔지 알아보기

1-3 첫 프로젝트 생성, 1-4 주석 및 println 메서드 소개 및 실습

  • JDK 역할

    • (1) compiler : .java → .class
    • (2) JRE
    • (3) JDB : 디버깅
      - 버그가 있는지 코드를 면밀히 살펴보는 기능, 몇 번째 코드인지 명시 필요
      - 왼쪽 숫자 부분을 클릭하여 코드를 선택해 준 뒤 오른쪽 상단에 버그 버튼 클릭
          
    • 멈추고 각종 변수들을 보여주게 됨
    • 변수가 무엇을 지칭하고 있는지도 나타남
    • 멈춘 기능을 재개할 땐 Resume Program(왼쪽 초록 재생)이라는 버튼 클릭
  • 연습해보기

  • 출력

  • .java 파일을 만들어서 .class 파일로 컴파일 할 것

  • 기본적으로 클래스라는 키워드를 이용해서 .java 파일을 만든다

  • 약속

    • // : 주석
    • ( ) : 소괄호
    • { } : 중괄호
    • : 대괄호
  • public main class의 하위 요소는 public static void main( ) { } → 메소드라고 지칭함
    - 소괄호 앞에 있는 네임이 명칭
    - 위의 메소드는 main메서드

  • 메인 메소드 반드시 있어야함

  • 자바 프로젝트(앱)는, 제일 먼저 클래스의 main 메소드를 실행시킨다. = JVM의 약속
    - 모든 프로젝트, 모든 앱은 main 메서드로부터 시작돼서 가지를 뻗어 나가면서 프로젝트를 구동 시킴
    - 메인 메서드 안에서 다른 클래스를 불러오고, 다른 객체를 불러오면서 프로그램을 진행

  • public class Main 해석

    • class : .java 파일을 .class 로 바꿀 때의 기준이 되는 영역
    • public : (접근)제어자, (공공의, 공통의)
      • Main class를 어떻게 제어 할 것인가?(=어디까지 접근?)
      • src 폴더에 있는 Main class는 어디서든 접근 가능
      • 주의할 점 : main class의 이름은 .Java의 이름과 동일하게 일치시켜야 함
      • 그러해서 컴파일러가 .class를 만들어 냄
  • public static void main(String[] args) { } 해석

    • static : 이 프로그램이 시작될 때 무조건 실행이 될 수 있는 상태
    • void (main 명칭 앞에 오는 것) : 메서드의 출력의 데이터 타입 -output
    • void 자체의 뜻은 “아무것도 없다” → 출력은 없다 -output
    • input → system → output
      • Java 언어에서는 input, output에 대한 타입을 제한 함
        • ex) input = 숫자나 문자만으로 제한,
        • ex) output = 마찬가지로 나올 수 있는 것은 숫자나 문자
    • 심화
      • retutn ~~~는 출력이 있다
      • 문자로만 출력 :
        • ex) public static String main(String[] args) {
          System.out.println(출력 할 것들이 들어감);

          return “문자형~~”;
          }

    • (String[] args) (main 뒤 소괄호 안에 오는 것) : 매개변수 자리 -input
    • input에 대한 변수 명은 아무렇게나 가능
      • (String[] args) 의 변수 명은 args → (String[] 123123) 123123도 가능
  • System.out.println(출력 할 것들이 들어감); 해석

    • Java 언어의 특징

      • 이 세상과 비슷한 메커니즘을 가지고 가는 언어
      • 객체 : Java 언어에서 사물이라고 표현하기에는 좁기 때문에 모든 것을 표현함
      • 특징(속성, 변수)과 행동(메서드, 함수)을 가지고 있음
    • system 이라는 calss 안에 out이라는 객체는 println(행동 메소드)을 한다

      • . (온점) : 하위요소를 표현할 때 사용
      • out이라는 객체는 system 안에 있음
      • system = class
      • println : 콘솔창에 문자열을 출력할 수 있도록 행동 역할을 하는 메소드
    • 정리

      • out이 객체, 객체는 println이라는 행동(메소드)를 포함하고 있다.
      • 메소드는 괄호를 열고 닫음으로써 실행할 수 있다
      • 메소드는 input과 output을 가지고 있다
    • print? println?

      • 저장하고 run(우측 상단 초록색 재생 버튼)

      • print 메소드가 println과 똑같이 출력됨

      • 차이점

        • print : 줄 바꿈 없음
        • println : 줄 바꿈 함
        • ln : line을 의미
  • // : 주석을 통해 description 쓰기 (필요한 설명)

  • 미션
    - (1) 7 출력
    - (2) 3 출력
    - (3) 3.14 출력
    - (4) java 출력

    • “ “ (쌍따옴표)를 쓰지 않으면 변수로 인식하기 때문에 문자를 쓸 때 꼭 필요
      (숫자는 상관없음)

1-5 변수 개념 및 기본형변수 타입 소개

  • 변하는 것과 변하지 않는 것 나누어짐

    • 변하는 수(저장 공간) - 변수
    • 변하지 않는 수(저장 공간) - 상수(constant value)
  • 변수라는 메커니즘은 동일해도 각각의 변수를 만드는 방법은 모두 다름

  • int number;

    • int - 저장공간 타입(접시 종류) / integer의 약자 / 숫자 종류를 담겠다
    • number - 저장공간 이름(접시 이름)
  • 변수의 타입을 정하고 이름을 정하는 선언이라는 과정이 가장 먼저 필요!

  • 선언과 저장(할당)의 과정이 변수를 만드는 방법이다

  • final : 나중에도 바꿀 수 없다

    • final이 없다면 10이었던 number는 후에 11로 바뀌는 것이 가능
    • 하지만 final이 있는데 변수의 값을 바꾸려고 하면 에러가 남
  • 변수의 타입 ex) public static void main < void 칸의 output과 ( )의 ( ) 안에 있는 input >

    • 기본적으로 기본형과 참조형이 있다

    • 기본형 : 쉽게 접할 수 있는 숫자형, 문자형

      • true냐 false냐, 0이냐 1이냐
    • 참조형 : 뭔가 복잡한 형

      • 한번에 저장하기 어려움, 별도로 저장 필요
      • 별도로 저장한 주소값을 참조 하는 식으로 저장
    • 기본형 변수 : boolean

      • 논리형 변수 true=1, false=0
    • 문자형 변수 : char

      • ‘A’, ‘1’ 와 같은 문자 하나만 저장 → car 등 단어, 문장 저장 안됨
      • ‘ ‘ 따옴표 한 개로 문자를 감싸줌
    • 정수형 변수

      • …-3, -2, -1, 0, 1, 2, 3… = 정수

      • byte, short, int, long → 오른쪽으로 갈 수록 큰 숫자를 저장

        • long : 접미사 뒤 L
        • -128부터 시작하지만 양수는 0을 세기 때문에 1이 적은 127까지임
      • 표현할 수 있는 크기에 따라서 나눠진 타입

    • 실수형 변수

      • float, double
      • float는 접미사 뒤 f
        • ex) float floatNumber = 0.123f
      • 소수점 실수값을 저장 ex) 0.123, 0.9999
      • java가 부동소수점 방식을 채택하고 있기 때문에 실수는 표현 범위가 매우 넓다
      • 컴퓨터는 정수, 소수 상관없이 0과 1로만 표현
      • 정수는 0과 1로 표현하는 게 쉬운 반면, 소수는 어려움
        • 소수를 0과 1로 표현하기 위해 고안한 방법
          • (1) 고정소수점 방식
            • 뒤에 나올 소수점의 길이, 표현될 수 있는 byte 수를 미리 제한해 놓음
          • (2) 부동소수점 방식
            • 미리 부호와 지수와 가수의 영역만 정해놓고 이들을 곱한 값을 저장해서 표현하는 방식 → 엄청나게 많은 수를 표현할 수 있음
      • float는 4byte만 쓰는데 어떻게 long보다 더 넓은 범위를 표현하나?
        • 실수는 표현범위가 매우 넓어서 정수형 변수에서 담지 못할 수 있다
          = [실수는] 표현 범위(실수는 소수점이 있음)가 넓기 때문에 실수를 정수형 변수에 담을 때 정수가 표현 못하는 수(소수점)를 실수가 표현이 필요하니까 정수형 변수에 못 담는다
          = float가 long보다 더 넓은 범위를 표현하기 때문에 자동 형변환이 안됩니다
      • float, double 다른점
        • float = 4byte / double = 8 byte
profile
공부하자개발하자으쌰으쌰

0개의 댓글