한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 - type 까지

김재현·2022년 11월 1일
0

FastCampus

목록 보기
5/9

프로그램이란?

  • 프로그램을 구현한다?
  • 프로그래밍 : 프로그래밍 언어를 이용해서 컴퓨터가 일을 수행하도록 만드는 것. 명령어 집합(프로그램)을 만드는 것.
  • 컴파일 : 프로그래밍 언어를 컴퓨터가 실행 가능한 기계어로 만드는 일
  • 컴파일러 : 기계어로 바꾸어주는 프로그램 (자바 컴파일러, gcc)

자바 특징

  • C, C++ : 안정성이 조금 부족함.

자바는 휴대용 장치에 사용되는 소프트웨어 언어로써, 안정성이 가장 큰 장점이다.

  • 기존의 언어가 갖고 있던, 모호함/불안 요소등을 과감히 제거함으로써 안정성을 확보했다.
  • java는 플랫폼의 영향을 받지 않는다.
    • 일반적인 경우, OS에 따라 실행파일 형식이 다르기때문에 컴파일하는 과정이 필요하다. windows에서 사용하는 실행파일이 linux에서는 사용할 수 없는 경우가 있는 것.
    • java의 경우 가상머신(JVM)위에서 바이트 코드를 실행하기 때문에 가상머신만 있다면 .class파일을 실행할 수 있다. OS에 관계 없이!
    • VM에 올려서 사용하는 만큼 초기에는 속도가 조금 느렸지만, 지금은 속도 이슈가 없다.
  • 자바는 객체지향적이라는 특징이 있다.
  • 자바는 풍부한 기능을 갖고 있는 오픈소스.

객체지향 프로그램밍이란?

  • 프로그램의 구현을 시간의 흐름순이 아닌, 객체간의 관계와 협력을 기반으로 프로그래밍 하는 것.
  • OOP(Object Oriented Programming)이라고 함.
  • 장점 : 재사용성, 유지보수, 코드관리, 신뢰도 높음

프로그래밍

  • 웹 서버 구현
  • 안드로이드 프로그래밍
  • 게임 프로그래밍

첫 자바 프로그램 만들고 실행하기

  • 패키지 이름은 소문자
  • 패키지 안에 HelloJava.java라는 클래스가 생성됨.
  • main 이라는 함수는 구동을 위한 함수. 항상 사용하지는 않는다. 자바는 일반적으로 웹서버에서 구동되기 때문에, main을 사용하지 않는 경우가 많다.
  • 자바에서 컴파일을 하면, .class라는 파일이 만들어지고, 그 파일이 실행되게 된다.
  • 컴파일된 파일은 binary에 가고, 거기에 .class 파일이 있게 된다.

컴퓨터에서 자료 표현하기

  • 컴퓨터는 2진수밖에 이해하지 못한다. 컴퓨터는 반도체 메모리로 구성되기 때문에 켜졌다, 꺼졌다(0과 1)밖에 인지하지 못한다.
  • 2진수와 8진수, 혹은 16진수를 쓰기도 한다.
  • int : 4byte = 32bit

변수는 변하는 수

  • 변수는 언제 사용하나?
    • 프로그램에서 변하는 값을 나타낼 때.
    • 표현하려는 값에 맞는 데이터 타입(자료형)을 이용해 변수 선언
    • 표현하려는 자료가 숫자, 문자, 문자열 등 다양할 수 있으므로 그에 맞는 자료형 사용
  • 중간에 선언해도 되지만, 중간중간 선언해도 된다. 선언과 동시에 초기화 할 수도 있음.
  • 데 이터 타입과 함께 변수를 선언한다. 변수선언은 데이터형에 맞는 메모리 크기를 선언하는 것.
  • 명령 규칙은 매우 프리하지만, 아예 없지는 않다.
    • 변수 이름은 영문자와 숫자를 사용할 수 있고, 특수문자 중 $_ 사용 가능하다.
    • 이름 시작은 숫자로 할 수 없다.
    • 자바에서 이미 사용하고 있는 예약어는 사용할 수 없다.
    • 프로그램 내에서 사용되는 것이므로 용도에 맞고 가독성이 좋게 만드는 것이 중요하다.
      EX) int ns; vs int numberOfStudent; 나중에 볼 때 이해하기 좋게끔 가독성 좋게, 이해하기 쉽게 정하는 것이 중요하다.

정수는 프로그램에서 어떻게 표현할까?

  • 자료형은 새로 선언해서 사용하지 않지만, 참조 자료형은 새로 선언해서 사용한다.
  • 정수와 실수는 사용 메모리가 다르기 때문에 사용하는 종류가 다르다.
  • 정수 자료형의 종류와 크기
    • byte
    • short
    • int
    • long
  • byte와 short
    • byte : 1바이트 단위의 자료를 다룰 때 사용. 동영상, 음악 파일, 실행 파일의 자료 등을 처리할 때 사용.
    • short : 2바이트 단위의 자료형 C/C++ 언어와 호환시 사용. 많이 사용하지 않음.
  • int
    • 자바에서 사용하는 정수에 대한 기본 자료형
    • 4바이트 단위의 자료형
    • 프로그램에서 사용하는 모든 숫자(리터럴)은 int로 저장됨.
    • 32비트를 초과하는 숫자는 long 자료형으로 처리.
    • 숫자 중 정수는 4byte의 int(Integer)로 잡히게 된다.
      EX) 10이라는 값을 사용했을 때 이미 10이라는 값은 메모리에 잡혀 있다. 그리고 그 메모리가 4byte이다.
  • long
    • 8바이트 자료형
    • 숫자 뒤에 알파벳 L 또는 l 사용해 long 형임을 표시한다.
    • 예) int num = 123456789; // 오류
    • long lnum = 1235467890; // 오류
    • long lnumber = 123456789L; // ok.
      기본적으로 int로 인식하기 때문에 큰 숫자를 선언할 경우 long 타입의 숫자인 것을 알려줘야한다.

실수의 표현

부동소수점 방식

  • 지수부와 가수부로 표현.
  • 컴퓨터에서는 밑수로 2를 사용.
  • 정규화 : 가수가 밑수보다 작은 한 자리까지 가수로 표현되는 것.
  • 컴퓨터에서 밑수가 2이므로 정규화를 하게 되면 가수부분의 첫 번째 자리 숫자는 항상 1.
  • float 형과 double 형

부동소수점 방식의 오류.

  • 지수부가 0을 표현할 수 없기 때문에 약간의 오차가 발생할 수 있다.
  • 하지만 장점이 더 많기 때문에 이 방식을 사용하고 있다.

문자의 표현

문자도 정수로 표현한다!

  • 어떤 문자를 컴퓨터 내부에서 표현하기 위해 특정 정수 값을 정의한다. 예 : A = 65
  • A → 인코딩 → 65. 65 → 디코딩 → A
  • 문자세트 : 각 문자를 얼마로 표현할 것인지 코드 값을 모아둔 것을 문자세트(character set)이라고 함.
    • ASKII, euc-kr, 유니코드(utf-8, utf-16)

자바에서의 문자 표현.

  • 자바는 문자를 나타내기 위해 세계 표준인 UNICODE를 사용.
  • utf-16 인코딩을 사용한다.(모든 문자를 2바이트로 표시.)
  • 문자형 변수 선언과 사용.
    • 문자를 위한 데이터 타입 char ch='A';
      • 문자를 쓸 때는 'A' 작은따옴표를 사용한다. "A" 큰따옴표와 전혀 다르다.
      • 'A'는 2byte짜리 문자. "A"는 문자열.
      • String에서 문자열을 제공한다. String은 A와 \0 이 같이 존재한다.
    • 내부적으로 숫자로 표현되므로 숫자를 넣어도 문자가 출력될 수 있음.
      • 양수만 사용할 수 있고, 음수는 사용할 수 없다.

자료형(data type) - 논리형과, 자료형 없이 변수 사용하기

  • 논리형 자료형
  • 기존에는 변수를 선언하기 위해서는 그에 맞는 자료형을 사용해야 했다. 하지만 자바 10부터는 자료형 없이 변수를 사용할 수 있게 되었다.
    • 모든 경우에 사용할 수 있는 것은 아니고, 지역 변수라는 것에 사용할 수 있다.
    • JS나 python 같은 경우에는 자료형이 없다.

논리형

  • ture(참), false(거짓) 두 가지만 나타냄.
  • 1byte 사용.
  • 값이 존재하는지, 배열이 비었는지, 결과가 참/거짓인지 표현
  • 플래그나 메서드(함수)의 반환값으로 사용하는 경우가 맞다.
  • boolean으로 선언.

지역변수 : 자료형 없이 사용하기

  • Local variable type inference
  • 추론 가능한 변수에 대한 자료형을 선언하지 않음.
  • 한 번 선언하여 추론된 변수는 다른 타입의 값을 대입할 수 없음.
  • 지역 변수만 사용 가능.
    • 지역변수란 블럭 { } 안에서 선언한 변수.
    • 함수 안에서 사용되는 변수. 함수의 매개변수(parameter)로 사용되는 변수.
    • 해당 지역에서만 사용된다.
public class LocalVariableType {
  public static void main(String[] args) {
    
      var i = 10;         // 10은 정수            var 은 int 가 된다.
      var j = 10.0;       // 10.0은 실수          var 은 double 이
      var str = "hello";  // hello는 문자열. 따라서 var 은 String 이
        // 이렇게 당연한 경우 자료형을 선언하지 않고 사용할 수 있다.
        // JS와 같은 스크립트 언어의 경우 자료형(타입)을 적지 않고 사용할 수 있었지만, java 와 같은 컴파일 언어는 꼭 자료형을 선언하게 되어 있었다. 
        // 하지만 지역변수 정도는 추론해서 자동으로 컴파일 할 수 있기 때문에 이렇게 사용해도 된다.
    System.out.println(i);
    System.out.println(j);
    System.out.println(str);
    
    str = "test";   
    // str = 3;      str 은 String 으로 컴파일을 시작했기 때문에 중간에 Integer 로 형변환을 할수는 없다.
  }
}

변하지 않는 상수와 리터럴, 변수의 형 변환.

상수(constant) 선언하기

  • 상수 : 변하지 않는 수.
  • 각종 변하지 않는 값. 1년은 12달. 원주율 3.14 등등..
  • final 예약어를 사용하여 선언.
  • 상수를 선언하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고, 혹 변하더라도 선언한 부분만 변경하면 되므로 여러 부분을 수정할 필요가 없음.
    • method 에도 class 에도 사용할 수 있다.
    • 선언과 동시에 초기화를 하는 경우가 많지만, 그렇지 않을 수도 있다.
    • 한번 초기화를 해서 값을 지정해주면, 값을 변경할 수 없다.
    • 상수의 경우 대문자로 많이 사용한다.

상수의 장점 예시

  • 학생 관리를 하는 프로그램을 가정해보자. 우리 학급 총 수는 30명인데, 코드가 길어지다보면 일일이 STUDENT_NUM = 30; 을 선언하는 것이 번거롭고 헷갈릴 것이다.
    • 그럴 때 final int STUDENT_NUM = 30; 으로 상수로 선언해두면, STUDENT_NUM 을 사용해주는 것으로 학급 인원 수 30명을 사용하는 것과 같은 효과를 볼 수 있다.
  • 만약 5명이 전학을 와서 학급 인원수가 35이 되는 경우에 대해서도 대응하기 쉽다.
    • 내가 이전에 STUDENT_NUM = 30; 을 일일이 하드코딩 해뒀다면 수정하기 번거로울 것이다.
    • 하지만 상수로 선언해두었다면 final int STUDENT_NUM의 값을 35로 변경하는 것으로 간단하고 코드를 수정할 수 있다.
  • 가독성도 좋다.

리터럴(literal)

  • 프로그램에서 사용하는 숫자, 문자, 논리값을 뜻함.
  • 리터럴은 상수 풀(constant pool)에 있다.
  • 정수 리터럴은 int, 실수 리터럴은 double 로 저장.
    정수의 범위가 넘어가는 경우는 L,l 을 float 로 사용하는경우는 F,f 식별자를 써줘야한다.

상수 풀?

  • 숫자는 언제 메모리에 잡히게 되는가?
  • 디스크에 있는 프로그램을 실행하면, 디스크에 있는 프로그램이 메모리로 load 된다. 실행이 되며 메모리를 할당받는 것들이 있고, 프로그램이 메모리로 로드되는 순간 영역을 차지하는 것들이 있다.
    • 프로그램이 메모리로 로드되는 순간 영역을 차지하는 것들 : 상수(literal), static 변수 등.
    • 이런 것들이 자리잡는 영역을 Data Area, Constant pool 등으로 부른다.
    • 프로그램이 실행이 끝나고 메모리에서 unload 될 때 사라지게 된다. 이런 것들을 리터럴이라고 부름.

형변환 (type conversion)

  • 서로 다른 자료형 간 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것. 다른 형끼리는 연산이 불가능하다.
  • 묵시적 형 변환(explicit type conversion, 자동 형 변환)과 명시적 형 변환(implicit type conversion, 강제 형 변환)이 있음.
  • 바이트 크기가 작은 자료형에서 큰 자료형으로의 변환은 자동으로 이루어지지만, 반대의 경우 그렇지 않음.
    • Integer → long (자동, 문제 없음) long → Integer (자동으로 되지 않음.)
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환은 자동으로 이루어짐.
    • Integer → double (자동, 문제 없음) double → Integer (자동으로 되지 않음. 실수 부분이 잘려나갈수도 있음.)

0개의 댓글