Post

Java, IntelliJ 실습

Java, IntelliJ 실습

프로그래밍 언어


📌 프로그래밍 언어 왜 사용하는가?

  • 컴퓨터와 사람 사이의 소통을 위해
  • 컴퓨터는 0과 1만 이해할 수 있는데 사람이 대화를 시도함으로써 사람이 할 수 없는, 하기에는 오래 걸리는 일을 컴퓨터에게 반복해서 시키는 것.

🚗 개발 언어의 역사

  • 시스템 : input이 들어가면 output이 나옴

  • A언어
    • 첫 개발 언어라는 의미, 1960년대, 입/출력 문맥
  • B언어
    • Bell사 개발, 1960년대, A언어 기능 + 기계식 데이터 타입, 연산 기능, 메서드
  • C언어
    • B언어에 비해 더 좋은 언어라는 의미, 1970년대, B언어 기능 + 자료형 데이터 타입, 자료구조.
  • Java
    • Java 마크에서 볼 수 있는 어디서나 마시는 커피처럼 어디서나 동작 가능한 언어, 1990년대
    • C언어 기능 + 공통 실행환경(JVM), 클래스, 객체, 대표적인 객체지향 언어

Java의 유래는? ☕

  • 자바의 창시자, 제임스 고슬링은 Sun 마이크로시스템즈의 프로젝트 일환으로 자바라는 언어를 만들었음.

1

자바는 자바 섬의 자바에서 유래하였고 제임스 고슬링은 하루에 자바 커피를 10잔씩 마시는 자바 커피 중독자였다고 함..!

  • 자바는 처음에는 양뱡향 통신이 가능한 TV에 사용하기 위해 시작한 프로젝트였지만 언어 수준이 높아 오히려 TV에 적용할 수 없는 안타까운 상황이었음.

  • 1996년 자바는 Write Once, Run Anywhere 이라는 모토로 1.0버전이 출시됨. 그 당시 C/C++ 스타일로 개발되었기 때문에 기존의 개발자들도 사용하기 쉬웠고 높은 안정성과 네트워크와 접근 권한을 직접 수정할 수 있어 보안성으로 좋은 언어였음.

  • 하지만 Java가 명성을 날린 것은 1998년 자바 애플릿을 통해 웹 브라우저 안에서 프로그램을 실행할 수 있게된 JAVA2 이후임. 자바 애플릿은 JAVA로 작성된 뒤 바이트 코드로 컴파일되어 브라우저 상에 존재하는 JVM을 통해 실행될 수 있음.

  • 이전에는 정적 HTML만 보여줄 수 있었는데 자바 애플릿을 이용해 GUI, 멀티미디어, 계산, 다른 웹 서비스나 DB와 interactive한 소통 등 웹 페이지를 생각하면 할 수 있는 모든 기능들이 가능해짐.

Java 목표 🏆

  • Simple, Object Oriented, and Familiar
    • C++에서 불필요하게 복잡한 부분을 줄이고 객체지향적인 요소를 남기며 쉽게 언어에 친숙해질 수 있도록 노력함

      C언어의 기능 + 필요한 기능을 추가한 것이기 때문

  • Robust and Secure
    • 컴파일 시점과 런타임 시점 모두 코드 검사를 하여 신뢰성이 높음. new 연산자를 통해 객체를 생성하고 포인터를 관리할 필요가 없어 메모리를 사용하기 쉬움. 자동적으로 시작하는 Garbage Collection으로 메모리 관리가 자동적으로 진행됨.
  • Architecture Neutral and Portable
    • Java는 다양한 OS와 다양한 프로그래밍 언어 인터페이스에서 사용할 수 있도록 설계하고자 함.
  • High Performance
    • Java는 인터프리터가 런타임 환경을 체크할 필요가 없어 성능 면에서 우수함. Garbage Collection을 수행하는 쓰레드는 낮은 우선순위로 운영되기에 효율적으로 메모리 운영을 하게 됨.
  • Interpreted, Threaded, and Dynamic
    • Java Compiler 가 컴파일하여 나온 결과물인 바이트코드를 JVM 내부에 있는 인터프리터가 한 줄씩 읽어 실행하기 때문에 인터프리터만 존재하는 방식보다 속도가 빠름. 또한 멀티쓰레드 방식을 통해 concurrent하게 발생하는 일들을 한번에 처리할 수 있음.

    • Java의 클래스 간 연결은 사용하는 그 시점에 연결되기 때문에 동적으로 배정된다는 특징이 있음.

  • 자바를 왜 배울까?
    • 가장 많이 쓰이는 개발 언어 중 하나
      • 공통 실행환경이 있어 여러 기기에서 실행 가능
      • 여러 기기의 OS에서 실행할 수 있는 언어
      • 대표적인 객체지향 언어
      • 안정성이 높아 프로그래밍 오류를 방지하고 보안상 안전 ➡ 자바는 컴파일러(변환기)로 오류를 먼저 체크, 각종 보안 기술이 있음
      • 대규모 앱 개발
      • 자바를 배우면 다양한 개발 도구와 라이브러리를 사용할 수 있음
  • JVM
    • 자바 가상 머신, 가상의 기기를 만들어주는 것을 의미
    • 여러가지 기기 위에 java 프로그램을 실행시킬 수 있는 가상의 strong text기기를 만들어주는 것
  • 바이트 코드
    • java 프로그램 변환 코드, 내가 작성한 코드가 운영체제가 읽을 수 있는 코드(바이트 코드)로 자바 컴파일러가 변환한 코드
      • 컴파일러 : java 파일을 class 파일로 변환
      • 왜 변환해? : java 파일은 컴퓨터, 즉 운영체제가 읽을 수 없고 사람만 이해 가능. 운영체제가 이해할 수 있는 방법 : class
  • 인터프리터
    • java .class 코드 해석기, 운영체제가 읽은 바이트 코드를 기기(기계)가 실행할 수 있는 기계어로 번역
  • JIT 컴파일러
    • 빠른 java .class 코드 해석기, 빠르게 인터프리터의 효율을 높여줌

인터프리터와 JTP 컴파일러는 세트

  • 메모리 영역
    • Java 데이터를 저장하는 영역, OS로부터 JVM이 할당받은 메모리 영역
  • 클래스 로더
    • java .class 바이트 코드를 메모리 영역에 담는 운반기, JVM으로 .class를 불러와서 메모리에 저장함.

1

메모리 영역에 .class 파일을 class loader가 운반

  • Garbage Collection
    • Java 쓰레기 청소기, 메모리 영역에서 안 쓰는 데이터를 주기적으로 흡수해가는 청소기
  • JRE(Java Runtime Environment)
    • Java의 놀이터인 JVM을 설치하는 방법은 JRE를 설치

    • 자바 실행환경
    • JRE만 있다면 Java 프로그램을 실행’만’ 실킬 수 있음.
    • JRE는 .class 파일만 실행 가능
      • JDK가 javac 명령을 통해 .java 파일을 실행가능한 .class 파일로 변환해줌
1
2
ex) 1. java -> class ,   2. class 실행에서
JRE는 2번밖에 못함.
  • JDK(Java Development Kit)
    • 자바 개발 키트

    • JRE 기능 포함 -> JRK 자바 실행환경을 가짐(Runtime 환셩)
    • .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능이 있음 -> 컴파일러 역할
    • 코드를 디버깅하는 jdb 등의 기능

    • 디버그 : de+bug : 코드를 면밀히 살펴보는 과정을 통해 나쁜 것(벌레)을 없애는 것

IntelliJ 💻

1

  • FirstJava -> source 코드 약자 src -> Main.java

  • 디버깅 하는 방법 : 버그를 없애기 위해 면밀히 코드를 살펴보는 과정, 몇 번째 코드를 면밀히 살펴볼 것인지 언급해야 됨.

1

  • 8번째 줄을 면밀히 살펴보고 싶음

1

  • 해당 디버그 버튼 클릭 -> 결과로 변수가 무엇을 지칭하는지, 팝업 형태 등을 보여줌

1

  • .java 파일이 앞으로 .class 파일로 컴파일 됨.

  • 이 말은 java 파일을 만들었지만 안에 들어가는 실제 모양은 .class 파일로 됨. Main이라는 class를 만들고 class loader로 메모리 영역으로 실어가서 실행

  • 모든 프로젝트를 만들 때 main 메서드가 있어야 됨. java 프로젝트(앱)는 제일 먼저 클래스 Main 메서드를 실행시킴 -> JVM의 약속

  • public : 제어자, (공공의, 공통의), public 으로 Main 클래스를 만들어 놓으면 src 폴더의 Main 클래스는 어디서든 접근 가능함.

  • Main 클래스의 이름은 .java 클래스의 이름과 동일하게 일치 시켜줘야 됨.
  • static : 이 프로그램이 시작될 때 무조건 실행됨.

▶ output

  • void : 메서드의 출력값의 데이터 타입, void는 ‘아무것도 없다’ -> 출력이 없는 메서드

▶ input

  • String[] args : 매개변수 자리

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

  • 변수
    • 변하는 것(변수), 변하지 않는 것(상수)
  • 기본형 변수
    • 논리형 변수 : boolean -> true(1), false(0)

    • 문자형 변수 : char -> ‘A’, ‘1’ 와 같은 문자 하나만 저장, ‘ ‘ (따옴표 1개로 감싸줌)
    • 정수형 변수 : byte(1byte), short(2byte), int(4byte), long(8byte)
    • 실수형 변수 : float(4byte), double(8byte)
      • 실수는 표현 범위가 매우 넓어서 정수형 변수에 담지 못할 수 있음

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

컴퓨터 – 고정소수점, 부동소수점

  • 고정소수점 : 뒤에 나올 소수점의 길이를 미리 제한, 고정해 놓은 것

  • 부동소수점 : 부호, 지수부, 기수부를 저장해 놓고 이값들을 곱한 값을 저장(표현)하는 방식

float 형의 예시 float fnum = 0.123f

-> 여기서 데이터값(리터럴) 뒤에 붙이는 구분 값을 “접미사”라고 함

  • 참조형 변수

    • 문자열 변수 : String -> “Apple”,“텍스트”와 같은 문장을 저장 , 쌍따옴표사용

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

래퍼 클래스 변수 : weapper Class라는 말 그대로 “기본형 변수를 클래스로 한번 랩핑하는 변수”

  • 문자 : 문자 뒤에 \0(널문자)가 없음
  • 문자열 : 문자 끝에 \0(널문자)가 함께 저장.

자동 형변환 vs 강제 형변환

  • 작은 타입 > 큰 타입 형변환시 (자동 형변환)

  • 큰 타입 > 작은 타입 형변환시 (강제 형변환 = 캐스팅)

1

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

    동적 : 알 수 없을 때

This post is licensed under CC BY 4.0 by the author.