컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review 최 윤 정 cris@konkuk.ac.kr Dept. of Computer Science&Engineering
지난 시간 review 및 feedback 지난 시간 review & 어려웠거나 이해가 힘든 부분 질문 사탕줄께요
지난주 질문 : 콘솔창에서 컴파일-실행하기 자바 컴파일러 (javac.exe) 자바 인터프리터 (java.exe) 예) javac DataType.java 자바 인터프리터 (java.exe) java [옵션] 클래스파일이름 [인수, …] java [옵션] –jar JAR파일이름 [인수, …] 예) java DataType
오늘은 변수 / 데이터타입 타입변환 JVM 메모리 사용 영역 참조 변수의 ==, != 연산 자동 타입 변환(Promotion) 강제 타입 변환(Casting) JVM 메모리 사용 영역 참조 변수의 ==, != 연산 null과 NullPointerException String 타입 배열 타입 열거 타입
변수와 자료형 변수(variable) : 데이터 값들이 저장되는 메모리 공간 자료형(data type) 변수와 예약어 기본형 : 문자형, 수치형, 논리형 레퍼런스형(참조형) : 클래스, 인터페이스, 배열 변수와 예약어 변수 선언과 데이터 할당 상수 : 리터럴 논리상수, 문자상수, 정수상수, 실수 상수
변수의 선언과 초기화
변수의 선언과 초기화 실행문 설명문(주석문) 컴파일러가 해당 명령어를 해석하고 기계어로 번역하여 실행되는 문장 ‘;’으로 실행문 종료시킴 설명문(주석문) 컴파일러가 해석하지 않는 문장 한 줄 설명문 : ‘//’ 기호 사용 여러 줄 설명문 : ‘/*’과 ‘*/’사이에 설명문 삽입 javadoc 설명문 : ‘/**’과 ’*/’사이에 설명문 삽입
예약어(Keyword) abstract assert boolean break byte case catch char class const continue default do double else extends false final finally float for goto if implements Import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws transient true try void volatile while enum
기본형(primitive type) 기본정수, 실수, 문자, 논리 리터럴을 직접 저장하는 타입 메모리의 최소 기억단위인 bit가 모여 byte 형성 1 byte = 8 bit
Quiz
타입변환 데이터 타입을 다른 타입으로 변환하는 것 자동(묵시적) 타입 변환: Promotion 예) byte ↔ int, int ↔ double 자동(묵시적) 타입 변환: Promotion 강제(명시적) 타입 변환: Casting
자동 타입 변환: Promotion 프로그램 실행 도중 작은 타입은 큰 타입으로 자동 타입 변환 가능 C에서도 에러없이 warning정도. 예) 큰 크기 변수 = 작은 크기 변수 short s=10; int d = s short s=‘a’ 연산식에서의 자동타입 변환 연산은 피연산자가 같은 타입일 경우에만 수행되지만, 서로 다를 경우 큰 쪽으로 자동 변환 7 + 5.5 7.0 + 5.5 12.5
강제 타입 변환 : Casting (클래스와 인터페이스 변환에서 다시 보겠으나) 일반적으로 큰 타입을 작은 타입 단위로 예) byte b=128 //b의 최대값은 127이므로 int 128은 overflow. 컴파일 에러유발 예) byte b=(byte)128 //128을 byte 범위로 변환(-128저장) Byte b는 8 bit 변수 데이터의 범위는 : -2^7~ 0 ~ 2^7-1 , 즉 -128 -127 -126 -125 … 0 …125 126 127 까지. 따라서, 128은 저장할 수 없음. 다시 맨 왼쪽의 값 -128을 저장 B=-129 도 에러, 이 경우에도 에러, casting 후에는 127 로 저장 굉장히 큰 값을 넣어도 이 과정은 같습니다. b를 256으로 나눈 나머지로 확인해봅니다. byte b= (byte)103029777; System.out.println(103029777%256); System.out.println(b);
참조형 (Reference type) 기본형과 참조형의 차이는 변수의 메모리 사용에 있어요. 기본 타입 변수 – 실제 값을 변수 안에 저장 참조 타입 변수 – 주소를 통해 객체 참조 C 에서는 포인터, java에서는 new로 생성된 모든 것
메모리 사용 영역 JVM이 사용하는 메모리 영역 OS에서 할당 받은 메모리 영역(Runtime Data Area)을 세 영역으로 구분 Reflect 기능 클래스의 메타정보를 가져옵니다.
메모리 사용 영역 JVM이 사용하는 메모리 영역 메소드 영역 JVM 시작할 때 생성 로딩된 클래스 바이트 코드 내용을 분석 후 저장 모든 스레드가 공유 힙 영역 객체/배열 저장 사용되지 않는 객체는 Garbage Collector 가 자동 제거 JVM 스택 스레드 별 생성 메소드 호출할 때마다 Frame을 스택에 추가(push) 메소드 종료하면 Frame 제거(pop)
참조 변수의 ==, != 연산 변수의 값이 같은지 다른지 비교 기본 타입: byte, char, short, int, long, float, double, boolean 의미 : 변수의 값이 같은지 다른지 조사 참조 타입: 배열, 열거, 클래스, 인터페이스 의미 : 동일한 객체를 참조하는지 다른 객체를 참조하는지 조사
null과 NullPointerException 변수가 참조하는 객체가 없을 경우 초기값으로 사용 가능 참조 타입의 변수에만 저장가능 null로 초기화된 참조 변수는 스택 영역 생성 ==, != 연산 가능
null과 NullPointerException 지난 학기 C에서 포인터를 잘 못 사용하면 runtime error가 발행했지만 Java에서는 예외를 사용하여 처리할 수 있습니다. NullPointerException의 의미 예외(Exception) 사용자의 잘못된 조작 이나 잘못된 코딩으로 인해 발생하는 프로그램 오류 NullPointerException 참조 변수가 null 값을 가지고 있을 때 객체의 필드나 메소드를 사용하려고 했을 때 발생
String 타입 String 타입 문자열을 저장하는 클래스 타입 유용하고 편리한 메소드가 많으므로 기본 메소드를 많이 알아두도록 하세요
String 클래스의 메소드
String 메소드 사용의 예
String 타입 문자열 리터럴 동일하다면 String 객체 공유 new 연산자를 이용한 String 객체 생성
배열 타입 같은 타입의 데이터를 연속된 공간에 저장하는 자료구조 각 데이터 저장 위치는 인덱스 부여해 접근 중복된 변수 선언 줄이기 위해 사용 반복문을 이용해 요소들을 쉽게 처리 항목 접근: 배열이름[인덱스] ex) score[0], score[3]
배열 타입 배열을 사용하기 위해 우선 배열 변수 선언 배열 변수는 참조 변수 - 배열 생성되기 전 null로 초기화 가능 NullPointerException 발생
배열 타입 : 값 목록으로 생성하기 변수 선언과 동시에 값 목록 대입 변수 선언 후 값 목록 대입
배열 타입 : new 로 생성하기 배열 생성시 값 목록을 가지고 있지 않음 향후 값들을 저장할 배열을 미리 생성하고 싶을 경우
배열 타입 타입 별 항목의 기본값
배열 타입 : 기본 메소드들을 살펴보세요 배열의 길이 배열에 저장할 수 있는 전체 항목 수 코드에서 배열의 길이 얻는 방법 배열의 길이는 읽기 전용 배열의 길이는 for문의 조건식에서 주로 사용됩니다.
배열 타입 : String args [] 커맨드 라인에서 배열의 선언과 사용
배열 타입 : 다차원 배열 2차원 배열 이상의 배열 1차원 배열을 이용해 2차원 배열 구현 수학의 행렬과 같은 자료 구조 1차원 배열을 이용해 2차원 배열 구현 C에서 **포인터 할당구조와 같습니다.
배열 타입 : 객체참고 객체를 참조하는 배열 기본 타입(byte, char, short, int, long, float, double, boolean) 배열 각 항목에 직접 값을 저장 참조 타입(클래스, 인터페이스) 배열 - 각 항목에 객체의 주소저장
배열 타입 : 복사 배열 복사 배열 복사 방법 배열은 한 번 생성하면 크기 변경 불가 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사 배열 복사 방법 for문 이용 System.arrayCopy() 메소드 이용 Arrays 클래스 이용
배열 타입 : for each 향상된 for 문 : for each 배열 및 컬렉션의 항목 요소를 순차적으로 처리 인덱스 이용하지 않고 바로 항목 요소 반복
열거 타입 열거 타입(Enumeration Type) 한정된 값만을 갖는 데이터 타입 한정된 값은 열거 상수(Enumeration Constant)로 정의
열거 타입 : 선언 파일 이름과 동일한 이름으로 다음과 같이 선언 (첫 글자 대문자) 한정된 값인 열거 상수 정의 열거 상수 이름은 관례적으로 모두 대문자로 작성 다른 단어가 결합된 이름일 경우 관례적으로 밑줄( _ )로 연결
열거 타입 : 변수선언 열거 타입 변수 선언 열거 상수 값 저장 - 열거 타입 변수값은 열거 상수 중 하나 열거 타입 변수는 참조 타입 열거 타입 변수는 참조 타입이므로 null 값 저장 가능
열거 타입 : 열거객체의 메소드 열거 객체는 열거 상수의 문자열을 내부 데이터로 가지고 있음 열거 타입은 컴파일 시 java.lang.Enum 클래스를 자동 상속 열거 객체는 java.lang.Enum 클래스의 메소드 사용 가능
Quiz