원시 변수와 레퍼런스 변수에 대해 알아봅니다. 변수가 저장되는 힙에 대해 알아봅니다. 배열에 대해 알아봅니다.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Part 03 상수, 변수, 자료형 ©우균, 창병모 © 우균, 창병모.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
인스턴스 변수와 메소드의 상호 관계에 대해 알아봅니다. 매개변수와 리턴값에 대해 알아봅니다. 객체의 동치에 대해 알아봅니다.
최윤정 Java 프로그래밍 클래스 상속 최윤정
4장 자바 기본 구조 4.1 자바 응용 프로그램 분석 4.2 자바 애플릿 프로그램 분석
제 9 장 구조체와 공용체.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
스택과 힙 지역변수와 인스턴스 변수 객체 생성과 생성자 객체 제거 (가비지 컬렉션)
Lesson 5. 레퍼런스 데이터형.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
4.1 자바 응용 프로그램 분석 4.2 식별자(identifier)와 예약어 4.3 변수와 자료형
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Lesson 6. 형변환.
명품 Java Programming.
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
레퍼런스 타입에 대하여 열거 타입의 선언과 이용
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
패키지와 접근 제어 패키지에 대하여 접근 제어에 대하여.
Java 6장. 클래스 : 속성 public class SumTest {
자바 5.0 프로그래밍.
11장. 1차원 배열.
C 8장. 포인터 #include <stdio.h> int main(void) { int num;
C#.
제1장 서론.
13. 연산자 오버로딩.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
7장 인터페이스와 추상 클래스.
JA A V W. 03.
Lesson 4. 수식과 연산자.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
C 3장. 변수와 데이터형 #include <stdio.h> int main(void) { int num;
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터공학실습(I) 3주 인공지능연구실.
Chapter 02. 자바 기본 문법.
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
JAVA 프로그래밍 2장 자바의 데이터타입.
JA A V W. 06.
Choi Seong Yun 컴퓨터 프로그래밍 기초 #03 : 변수와 자료형 Choi Seong Yun
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
객체기반 SW설계 팀활동지 4.
[ 단원 04 ] 반복과 배열.
자바 5.0 프로그래밍.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
어서와 C언어는 처음이지 제21장.
2장 자바의 기본문법(1).
자바 프로그래밍 입문 : 객체지향적 사고법 chapter 03. 데이터형과 클래스.
Visual Basic .NET 기초문법.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

원시 변수와 레퍼런스 변수에 대해 알아봅니다. 변수가 저장되는 힙에 대해 알아봅니다. 배열에 대해 알아봅니다. 3장. 네 변수를 알라 원시 변수와 레퍼런스 변수에 대해 알아봅니다. 변수가 저장되는 힙에 대해 알아봅니다. 배열에 대해 알아봅니다.

네 변수를 알라 변수의 용도 객체의 상태 지역변수 인자 리턴 유형

변수 선언 유형 안전성 (type-safety) 자바에서는 유형을 철저하게 따집니다. Rabbit hopper = new Giraffe(); hopper.hop(); Rabbit 변수

변수 선언 변수를 선언하는 데 있어서 필요한 것 유형 이름 변수 유형 (int, double, String 등) 변수 이름 (count, size, name, myDog 등) int count; 유형 이름

원시 유형 변수를 컵에 비유해봅시다. 모 커피 가게에서 파는 컵 크기 자바 원시 정수 변수의 크기 small short tall grande long int short byte

원시 유형 정수와 부동소수점 유형 정수 유형 부동소수점 유형 byte short int long 8 16 32 64 8 16 32 64 float double 32 64

원시 유형 유형 비트 수 범위 부울과 문자 숫자 (모두 부호가 있음) 부동소수점 소수 boolean JVM에 따라 다름 true, false char 16 비트 0 ~ 65535 숫자 (모두 부호가 있음) 정수 byte 8 비트 -128 ~ 127 short -32768 ~ 32767 int 32 비트 -2147483468 ~ 2147483467 long 64 비트 -아주 큰 값 ~ 아주 큰 값 부동소수점 소수 float 다양함 double

원시 유형 원시 변수 선언 및 대입 예 int x; x = 234; byte b = 89; boolean isFun = true; double d = 3456.98; char c = ‘f’; int z = x; boolean isPunkRock; isPunkRock = false; boolean powerOn; powerOn = isFun; long big = 3456789; float f = 32.5f;

원시값 대입 넘치게 하지 마세요. 변수에 값을 대입할 때는 유형을 잘 맞춰야 합니다. 해당 유형의 변수에 들어갈 수 없는 너무 큰 값을 대입하면 (컵의 크기에 비해 너무 많은 양을 집어넣으려고 하면) 넘치고 말 테니까요. int x = 24; byte b = x; 이와 반대로 큰 컵에 적은 양의 내용물을 집어넣는 것은 가능합니다. byte b = 24; int x = b;

원시값 대입 변수에 값을 대입하는 방법 등호 옆에 리터럴 값 입력 한 변수의 값을 다른 변수에 대입 x = 12, isGood = true 등 한 변수의 값을 다른 변수에 대입 x = y 위의 두 가지 방법을 결합한 방법 x = y + 43 int size = 32; char initial = ‘j’; double d = 456.709; boolean isCrazy; isCrazy = true; int y = x + 456;

키워드와 변수명 명명 규칙 (클래스, 메소드, 변수) 알파벳, 밑줄(_), 달러 기호($)로 시작해야 합니다. 두 번째 문자부터는 숫자를 쓸 수도 있습니다. 하지만 숫자로 시작할 수는 없습니다. 예약어는 이름으로 쓸 수 없습니다. boolean char byte short int long float double B C B S I L F D Be Careful! Bears Shouldn’t Ingest Large Furry Dogs.

예약어 예약어에는 다음과 같은 것이 있습니다. 이런 예약어를 클래스, 메소드, 변수 이름으로 사용하면 반드시 문제가 생깁니다. 절대 쓰지 마세요. boolean byte char double float int long short public private protected abstract final native static strictfp synchronized transient volatile if else do while switch case default for break continue assert class extends implements import instanceof interface new package super this catch finally try throw throws return void const goto

객체 레퍼런스 객체란 무엇일까? 객체 변수라는 것은 없습니다. 객체 레퍼런스라는 것만 있습니다. 객체 레퍼런스에는 객체에 접근하는 방법을 알려주는 비트가 들어있습니다. 객체 레퍼런스에는 실제 객체가 들어있는 것은 아니고 그 객체를 가리키는 무언가가 있을 뿐입니다.

객체 레퍼런스 Dog d = new Dog(); d.bark(); Dog 레퍼런스 변수는 Dog 객체에 대한 리모컨이라고 생각하면 됩니다. 이 리모컨을 가지고 해당 객체에 어떤 일을 지시할 수 있습니다.

객체 레퍼런스 레퍼런스 (비트 수는 중요하지 않음) byte short int long 8 16 32 64

객체 레퍼런스 원시 변수 레퍼런스 변수 Dog 객체 00000111 Dog byte byte x = 7; Dog myDog = new Dog(); 00000111 Dog 객체 byte Dog

객체 선언, 생성 및 대입 1. 레퍼런스 변수 선언 Dog myDog = new Dog();

객체 선언, 생성 및 대입 2. 객체 생성 Dog myDog = new Dog(); Dog 객체

객체 선언, 생성 및 대입 3. 객체와 레퍼런스 연결 Dog myDog = new Dog(); Dog 객체

바보 같은 질문은 없습니다 레퍼런스 변수의 크기는 얼마인가요? 알 수 없습니다. 레퍼런스의 내부적인 표현 방식은 공개되어있지 않고, 프로그래머 입장에서 굳이 알 필요도 없습니다. 메모리 할당과 관련된 문제를 생각할 때도 중요한 것은 객체 레퍼런스의 개수가 아니라 객체의 개수, 그리고 객체의 크기입니다.

바보 같은 질문은 없습니다 그러면 모든 객체 레퍼런스의 크기가 객체의 실제 크기와는 상관없이 똑같은가요? 예. 같은 JVM에서는 객체의 크기와는 상관없이 레퍼런스의 크기는 모두 같습니다. 다만, JVM에 따라서 레퍼런스의 크기가 다를 수는 있습니다.

바보 같은 질문은 없습니다 레퍼런스 변수에 대해 C에서처럼 증가 연산 같은 것을 적용시킬 수 있나요?

힙과 가비지 컬렉션 1 2 힙 레퍼런스: 2개 객체: 2개 Book b = new Book(); Book c = new Book(); 1 b Book 객체 Book 2 Book 객체 c 힙 Book 레퍼런스: 2개 객체: 2개

힙과 가비지 컬렉션 1 2 힙 레퍼런스: 3개 객체: 2개 Book d = c; Book 객체 Book 객체 b Book c

x 힙과 가비지 컬렉션 1 2 힙 레퍼런스: 3개 객체: 2개 c = b; Book 객체 Book 객체 b Book c d

힙에서의 삶과 죽음 1 2 힙 활성 레퍼런스: 2개 접근할 수 있는 객체: 2개 Book b = new Book(); Book c = new Book(); 1 b Book 객체 Book 2 Book 객체 c 힙 Book 활성 레퍼런스: 2개 접근할 수 있는 객체: 2개

힙에서의 삶과 죽음 1 2 힙 활성 레퍼런스: 2개 접근할 수 있는 객체: 1개 버림받은 객체: 1개 b = c; Book 객체 Book 2 Book 객체 c 힙 활성 레퍼런스: 2개 접근할 수 있는 객체: 1개 버림받은 객체: 1개 Book

x 힙에서의 삶과 죽음 1 2 힙 활성 레퍼런스: 1개 널 레퍼런스: 1개 접근할 수 있는 객체: 1개 버림받은 객체: 1개 c = null; 1 b Book 객체 Book 2 x 힙 Book 객체 c 활성 레퍼런스: 1개 널 레퍼런스: 1개 접근할 수 있는 객체: 1개 버림받은 객체: 1개 Book

배열 1. int 배열 변수 선언 2. 길이가 7인 int 배열을 만들어서 변수에 대입 3. 각 원소에 int 값 대입 int[] nums; 2. 길이가 7인 int 배열을 만들어서 변수에 대입 nums = new int[7]; 3. 각 원소에 int 값 대입 nums[0] = 6; nums[1] = 19; nums[2] = 44; nums[3] = 42; nums[4] = 10; nums[5] = 20; nums[6] = 1; int 배열 객체 (int[]) nums int[]

배열 1. Dog 배열 변수 선언 2. 길이가 7인 Dog 배열을 만들어서 변수에 대입 3. 각 원소에 Dog 레퍼런스 대입 Dog[] pets; 2. 길이가 7인 Dog 배열을 만들어서 변수에 대입 pets = new Dog[7]; 3. 각 원소에 Dog 레퍼런스 대입 Dog 객체 Dog 객체 pets[0] = new Dog(); pets[1] = new Dog(); Dog 배열 객체 (Dog[]) pets Dog[]

레퍼런스 변수를 이용한 객체 조작 Dog fido = new Dog(); fido.name = “Fido”; bark() eat() chaseCat() Dog fido = new Dog(); fido.name = “Fido”; fido.bark(); fido.chaseCat(); Dog 객체 fido Dog

배열과 객체 레퍼런스 배열에 들어있는 객체 레퍼런스를 사용할 때도 똑같은 식으로 사용하면 됩니다. Dog[] myDogs = new Dog[3]; myDogs[0] = new Dog(); myDogs[0].name = “Fido”; myDogs[0].bark(); 92 페이지에 있는 예제를 직접 돌려봅시다.

핵심 정리 변수에는 원시 변수와 레퍼런스 변수가 있습니다. 변수를 선언할 때는 이름과 유형이 필요합니다. 원시 변수의 값은 그 값을 표시하는 비트로 구성됩니다. 레퍼런스 변수의 값은 힙에 들어있는 객체를 건드릴 수 있는 방법을 나타내는 비트입니다. 레퍼런스 변수는 리모컨과 같습니다. 레퍼런스 변수에 대해 점 연산자(.)를 사용하는 것은 리모컨의 버튼을 눌러서 메소드나 인스턴스 변수를 액세스하는 것과 비슷합니다. 모든 배열은 객체입니다.