2023.01.17 - 안드로이드 앱개발자 과정

CHA·2023년 1월 17일
0

JAVA



C언어의 한계

C언어는 플랫폼에 종속적입니다. 즉, 운영체제 마다 컴파일 과정이 다르게 해석됩니다. 그러다 보니 C로 프로그램을 만들게 되면 OS 마다 다르게 만들어 주어야 했습니다. 이는 아주 비효율적인 부분이었고 그래서 JAVA 라는 언어가 나오게 되었습니다. 그래서 Java 는 바로 기계어로 변환하지 않고, .class 파일, 즉 바이트 코드를 먼저 생성한 뒤, 이 바이트 코드를 JVM 으로 구동을 시킵니다. 그래서 각각의 OS 에서 JVM 을 설치만 하면 개발을 할 때에는 OS 에 맞춰서 할 필요가 없어지게 됩니다.


개발환경 구축

  • 자바 개발도구 : JRE(Java Runtime Environment) 와 JDK(Java Developement Kit) 설치

    Oracle 에서 JRE 와 JDK 를 다운로드 받을 수 있습니다. 현재 자바의 버전은 19버전까지 나와있는데, 8과 11은 무료로 배포되고 있으니 11을 사용하면 됩니다. 인스톨러를 다운로드 받아 설치하면 JRE 와 JDK 가 설치됩니다.
  • 코드편집기 eclipse 설치

    Eclipse 에서 이클립스를 다운받을 수 있습니다. 보면 이클립스를 다운받는 방법이 두 가지가 있습니다. 하나는 컴퓨터에 바로 설치하는 방법과 패키지로 다운받는 방법입니다. 패키지로 다운받아 압축을 풀게 되면 이게 바로 프로그램으로 동작합니다. 그리고 버전관리도 쉽기 때문에 패키지로 다운받도록 하겠습니다. 그리고 이클립스의 경우는 VS 와 다르게 단순 편집기의 역할만 할 뿐 컴파일러는 아닙니다. 그렇기 때문에 JDK 를 꼭 받아주어야 컴파일을 할 수 있게 됩니다. 또한 JRE 는 작성된 코드를 실행하고자 할때 필요하기 때문에 JDK,JRE,eclipse 모두 설치를 해줘야 자바로 프로그래밍이 가능해집니다. 또한 이클립스에서 JDK 의 버전을 적용하라는 부분이 있는데 우리는 자바 11을 이용하기 때문에 11로 설정해줍니다. 설치가 끝나면, 이클립스로 프로젝트를 만들어 봅니다. 그러면 파일탐색기에서 이클립스의 프로젝트 파일로 가면 하위 폴더에 src와 bin 폴더가 만들어집니다. 각각의 폴더들에는 소스파일과 컴파일된 클래스 파일이 존재합니다.

자바로 출력

  • 메인함수 만들기

    이클립스도 다 설치가 완료됐으니, 이클립스로 출력을 한번 해봅시다. 프로젝트 폴더 안에 src 파일안에 class 파일을 만들어줍시다. 클래스 이름은 Hello로 하겠습니다. 그러면 다음과 같이 클래스 하나가 자동완성 되어있습니다.

    public class Hello {
    
    }

    자바는 완전한 객체지향에 가까운 언어이기 때문에 모든 코드를 객체를 통해 작성해야합니다. 모든 함수와 변수 등은 클래스 안에 들어가야 하고, 실행시킬 메인함수도 만들어 주어야합니다. 또한 이 메인함수도 함수이기 때문에 Hello 클래스 안쪽에 작성해주어야 합니다. 다음과 같이 만들겠습니다.

    public class Hello {
        public static void main(String[] args) {
    
        }
    }
  • 화면출력 객체

    위 코드에서 main 메소드(자바에서는 함수를 메소드라고 합니다.) 안쪽에 System.out.print("Hello World"); 를 작성하면 화면에 출력할 수 있습니다. 그리고 이클립스는 저장과 동시에 .class 파일이 만들어줍니다. 즉, 이클립스는 컴파일이 저장과 함께 이루어진다는 이야깁니다. 원래 이클립스는 JDK 의 능력은 없습니다. 앞서 말했듯, 자바 컴파일러는 JDK, JRE 입니다. 그런데 이클립스는 컴퓨터에 설치되어 있는 JDK 와 연동시킬 수 있습니다. 그래서 우리는 따로 cmd 를 사용하지 않고 바로 컴파일이 가능합니다. 또한 이클립스는 JRE와도 연동이 되었기 때문에 바로 실행이 가능합니다.

    public class Hello {
        public static void main(String[] args) {
            System.out.print("Hello World");
        }
    }
    결과 : Hello World

    그리고 Systemout 또한 객체의 일종입니다. 그렇기 때문에 아래 그림과 같이 . 연산자로 객체의 데이터에 접근할 수 있습니다.

    여러가지 출력과 관련한 예제들을 한번 보고 넘어가겠습니다.

        System.out.println("Hello"); 	// 줄바꿈 메서드 println()
		System.out.print("Nice\n");		// C언어와 같이 \n 으로도 줄바꿈 가능

		System.out.print(10);			// 정수형 데이터도 바로 출력가능!
		System.out.print("\n");			// \n 단일로 사용도 가능!
		System.out.print(10.112345643); // 실수형 데이터도 바로 출력가능!
		System.out.print('A');			// 한문자도 가능!

		System.out.print(true);			// boolean 형 데이터도 가능!
		System.out.print(false);
		
		System.out.println(10 + 3);		// 연산도 가능!
		System.out.println("10+3");		// 문자열안쪽 연산은 불가능!

		// C언어와 마찬가지로 서식문자를 이용하여 출력모양을 만들수도 있음.
		System.out.printf("%d + %d = %d\n", 10, 3, 10 + 3);

자료형과 변수

자바에서의 자료형은 크게 두 종류로 나뉩니다. 기본형과 참조형 입니다.


  • 자료형의 종류

    • 기본형(Premitive) : 데이터를 저장하는 변수
    • 참조형(Reference) : 주소를 저장하는 변수 ( 포인터 변수! 즉, 메모리는 8바이트)
      • String, Scanner, System, Random, Double 등 ... 2000여개 정도의 Class로 만든 자료형


  • 기본형 자료형의 여러가지 연산

    • 산술 연산자 +

       System.out.println(5 + 3);
        System.out.println(10 + 3.14);
        System.out.println('G' + 1);
        결과
        8
        13.14
        72
        

      산술연산자 + 를 이용하면 더하기 연산이 가능합니다. 또한 자료형의 크기가 큰것과 작은것을 연산하면, 작은 것이 큰것으로 형변환 되어 연산이 됩니다. char 의 경우 한문자 연산 또한 가능합니다.

    • 결합 연산자 +

      System.out.println("Hello " + "World");
      		// 문자열 + 다른 자료형
      String str = "";
      System.out.println("aaa" + 10);
      System.out.println(str + 3.14 + 3);
      
      		// Java 는 출력형식을 만들때 printf 보다는 문자열의 + 결합연산으로 처리
      System.out.println(5 + "+" + 3 + "=" + 5 + 3);
      System.out.println(5 + "+" + 3 + "=" + (5 + 3));
      결과
      Hello World
      aaa10
      3.143
      5+3=53
      5+3=8

      결합연산자 + 를 이용하면 문자열 붙이기 연산이 가능합니다. 문자열 끼리는 합쳐진 문자열이 결과값으로 나오며, 다른 자료형과 합쳐질 경우 다른 자료형들은 모두 문자열로 바뀌어 합쳐지게 됩니다. 이는 String 객체의 concat() 이라는 메소드에 의해 다른 자료형들이 문자로 바뀌게 됩니다.

      자료형의 크기에 따른 형변환은 숫자형 자료형에서만 적용되며, 문자열과는 상관없습니다!

    • 자료형의 크기에 따른 데이터 대입

      int b = 3.14;
      error : 자료형이 큰것을 작은 변수에 대입할 수 없습니다.

      byte d = 128;
      error : byte 는 -128~127까지의 범위를 넘어가면 에러!

      short e = 32767
      양수,음수 각 32768개 씩 가능

      int f = 2100000000;
      양수,음수 각 약 21억까지 가능

      float h = 3.14f;
      long g = 81000000000000L;
      양수,음수 약 900경까지 가능,

      double i = 3.14;
      char j = 'G';
      boolean k = true;

      double l = 10;
      작은 값은 큰 변수에 대입이 가능함. -> 자동형변환이 이루어짐.

      long m = 3.14f;
      error : 무조건 실수가 정수보다 큰 자료형!

      byte n = 10;
      short r = 100;
      byte,short 은 별도의 접미사 없이 int 형 상수값을 대입 가능하다!

      short x = 10;
      short y = 50;
      short t;
      t = x + y;
      error : byte 나 short 변수끼리 연산은 자동 int 로 변환되어 계산됨.

      위 예시에서는 나머지는 어느정도 읽어보면 될것같습니다. long 과 float 만 조금 보겠습니다. 분명 long 형의 경우 900 경까지 가능하다고 하였습니다. 그런데 위 코드를 실행시켜보면 오류가 납니다. 이는, 대입 연산자 오른쪽에 있는 데이터는 상수형 데이터 이며, 상수형 데이터의 기본형은 int 형 입니다. 자료형 int 는 약 21억 정도 까지 가질 수 있다고 했기 때문에 오류가 났던것입니다. 그래서 long 형의 경우 L 을 붙여 long 형 변수임을 명시해주어야 합니다. double 과 float 도 마찬가지 입니다. 실수형 상수의 경우 기본형은 double 형 입니다. 그렇기 때문에 float 형 변수를 만들 때에는 f 를 붙여 float 형 변수임을 명시해야 합니다. 대입 연산자를 사용할 때 오른쪽에 리터럴 상수가 들어가게 되면 그냥 값으로 인식하는 경우가 많습니다. 하지만 값이 아닌 리터럴 상수이며, 이들의 기본값은 정수 실수 각각 intdouble 임을 잊지맙시다.


  • 자바의 상수 : literal 상수와 final 상수

    • literal 상수
      값 자체를 의미 합니다 : 10,3.14,'G',true 등등
    • final 상수
      상수화된 변수를 의미합니다.
      `final int MAX_HEIGHT = 100;
  • 참조형 맛보기

    String 은 객체 입니다. 그렇기 때문에 참조변수를 통해 이 객체를 사용해야 합니다. 원래 우리는 String 을 사용할 때 다음과 같이 사용합니다.
    String str = "Hello World";
    다시 말하지만, String 은 객체 입니다. 무언가 이상합니다. 객체를 사용할 때는 new 를 통해 Heap 메모리에 공간을 확보해두고 포인터 변수와 같은 참조변수로 주소값을 받아와 사용해야 할텐데 위 코드는 그렇지 않습니다. 사실 생략된 부분이 있습니다. 다음 코드를 봅시다.
    String str = new String("Hello World");
    String 객체는 너무 자주 사용이 되는 객체이기 떄문에 문자열 데이터를 변수에 넣는 과정을 생략해주었습니다.
profile
Developer

0개의 댓글