2023-12-12 (4일차) - 메모리, 객체, 배열

·2023년 12월 12일

📅 2023-12-12 4일차

전위연산, 후위연산

  • preincrement
  • predecrement
  • postincrement
  • postdecrement

전위연산 i++

  • b의 값을 1을 증가한 후에, 증가한 b의 값을 a에 대입
    • 증가시키고 집어넣을게

후위연산 ++i

  • b의 값을 a에 대입 후에 b의 값을 증가
    • 집어넣고 증가시킬게

💡 전위연산 후위연산 차이점과 서로 바꿔 사용하면 어떻게 달라지는지 차이점 알기

  • 할당할때 값이 달라진다.
    • 전위 연산과 후위 연산 둘의 결과에 차이가 없다면 할당을 하지 않아서이다.

10진수 2진수

정확한 계산을 하기 위해서는 정수를 사용하자.

  • 실수는 우리 생각대로 값이 안나올 수 있음

10 진수

  • 10의 거듭제곱으로 표현가능

2진수

  • 2의거듭제곱으로 표현가능

메모리

JVM

  • 모든 자바 프로그램은 JVM을 통해서 실행된다
  • JVM은 OS로부터 메모리를 할당받는다
    • OS -> 운영체제

💡메모리는 할당 받는것이다. 창조X

JVM 메모리 구조(JVM Memory Structure)

  • 메소드영 역
  • 힙 영역
  • 스텍 영역
  • JVM은 OS로부터 할당받은 메모리를 위 그림과 같이 구분해서 관리한다.
  • 개발자들이 신경서야 하는 부분은 RAM(Random Access Memory)
  • RAM은 한계가 정해져있다
  • 메모리를 아껴쓰자!
  • 자료형 데이터타입을 보면 각각 메모리 크기가 다르다.
    • 메모리크기에 따라 표현 범위가 달라짐
    • 메모리크기가 작으면 표현 범위가 작아짐
1 -> 1bit -> 2
2 -> 2bit -> 4
4 -> 4bit -> 16
8 -> 8bit -> 1byte -> 256
16 -> 16bit -> 2byte -> 65536
32 -> 32bit -> 4byte -> 4,294,967,296

연산방법 :
short = 2byte
2byte -> 16bit -> 65,536
고로 short는, 65,536의 반인 32,768를 +,-로
-32,768 ~ +32,767 사이의 수만 담을 수 있음!

객체

자바는 객채지향 프로그래밍 언어

객체지향이란 개체를 지향하는 언어이다

  • 먼저, 변수에는 값을 1개만 넣을 수 있다.
    int a = 10;
  • 이렇게도 값을 넣을 수 있다.
    int[] arr = new int[3];
    arr[0] = 10;
    arr[1] = 20;
    arr[2] = 30;
  • "변수에는 값을 1개만 넣을 수 있다."라는 개념과 충돌한다..???
    정말일까? (to be continued..)
  • 나중에 절차지향도 한번 찾아보자!

객체란?

  • 연관성이 있는 복수개(여러개)의 데이터를 다룰 때 사용하는 문법

  • 객체 -> 폴더 라고 생각하면 됨 - 파일을 담는 그릇
    관련있는 파일들을 정리할 때 사용
    폴더안에 파일들 개개인은 관련이 없어보여도, 폴더명에 따라 관련있는 데이터가 될 수 있음
    예: 홍길동 개인정보 폴더 ) 통장사본.jpg, 재직증명서.pdf, 건강검진결과지.jpg

  • 관련있는 데이터들끼리만 객체로 다룬다.

  • 관련이 있을때는 객체를 사용하는게 엄청난 효율이다!

  • 실체: 실제로 존재하는 것
    주체: 내(실체)가 나(실체)를 가리킬 때
    객체: 내(실체)가 다른거(실체) 가리킬 때

  • But, 프로그래밍에선 유/무형을 가리지 않음. 실체가 명확할 수도 있고 아닐 수도 있다 -> 데이터 저장방식의 차이

배열객체

  • 배열(Array)이란 여러 개의 값을 순차적으로 나열한 자료구조

int[ ] arr = new int[3];

배열객체의 기본꼴이다

  • [] ➡️ ~들
  • int[ ] ➡️ 정수들 (복수)
  • int[ ] arr -➡️ 정수'들'을 담을 변수 arr
  • int ➡️ 정수 (단수)
  • arr ➡️ 정수'들'만 넣을 수 있는 객체와 연결 될 변수 arr
  • new ➡️ 객체 하나를 만들겠다
  • int[3] ➡️ new를 통해 만들어질 객체의 모양
    객체 안에 방3개가 있고 그 안데 int 3개가 들어갈 수 있다
  • Index란? 배열안에 방은 번호가 정해져있다. 0번방, 1번방, 2번방, etc.

💡 조금전에 "변수에는 값을 1개만 넣을 수 있다."라는 개념과 충돌한다..??? 라고 생각했지만,
실제로는 공간 '1개' 만들어서 그 '1개'의 안에 값을 3개를 넣은 것이다.
그렇다고 해서 3개의 값이 들어있는 그 1개의 공간이 arr변수 안으로 들어갈 수 없다.
공간안에는 바로 내장리모컨이 들어있고 그 리모컨을 변수안에 복사해넣은 것이다.
그래서 "변수에는 값(사실상 리모컨)을 1개만 넣을 수 있다"라는 말이 맞게 된다.

객체의 장점: 복수개의 데이터를 한번에 다룰 수 있음!

  • For example,
    데이터 200개를 만들어야 한다면,
변수만 사용했을 때:
int b;
int b2;
int b3;
...
int b200;
.
.
객체를 사용했을 때:
int[ ] arr200 = new int[3];

// 오직 정수형 데이터들만 들어갈 수 있는 arr라는 변수(공간)를 만들고
int[3]의 모양으로 객체 하나를 만들어서 객체를 컨트롤할 수 있는 리모컨을 넣고 연결시키겠다.
[3] <- ‘객체안에 3개의 방이 있다‘라고 생각하면 됨.

객체의 장점: 복수개의 데이터를 한번에 다룰 수 있음!

  • For example,
    데이터 200개를 만들어야 한다면,
변수만 사용했을 때:
int b;
int b2;
int b3;
...
int b200;
.
.
객체를 사용했을 때:
int[ ] arr200 = new int[3];

// 오직 정수형 데이터들만 들어갈 수 있는 arr라는 변수(공간)를 만들고
int[3]의 모양으로 객체 하나를 만들어서 객체를 컨트롤할 수 있는 리모컨을 넣고 연결시키겠다.
[3] <- ‘객체안에 3개의 방이 있다‘라고 생각하면 됨.

유한집합

  • 복습하자

2차원배열의 예시

class Main {
	public static void main(String[] args) {
		
		int[] arr = new int[6]; // 1차원배열
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
		arr[5] = 6;

		
		int[][] arr2 = new int[2][3]; // 2차원배열 // int 3개씩 2묶음
		
		arr2[0][0] = 1;
		arr2[0][1] = 2;
		arr2[0][2] = 3;
		arr2[1][0] = 4;
		arr2[1][1] = 5;
		arr2[1][2] = 6;
		// 2차원배열
	}
}
  • 3차원 4차원 객체도 자바로 만들 수 있다고 함

사용자 정의 객체

  • 사용자 정의 객체에서는 방(데이터) 안에 index개념이 없어서 배열객체처럼 자동으로 인덱스번호가 생성되지 않음.
  • 배열객체와 사용자정의객체의 다른점은 인덱스의 존재 유무.
  • 인덱스가 없기 때문에 해당 방에 접근하기 위한 고유한 이름이 있을 것이다.
    • 그 이름은 변수명이다.
    • 그 변수명은 클래스(새롭게만든클래스-붕어빵틀)에서 만든다.
  • 클래스는 꼭 하나씩 만들 수 있다.

    철수 데이터(이름, 나이, 키) 만들고싶다면?

    1. 철수 타입 + 객체와 연결 할 변수(공간) 으로 철수 객체만들기
    2. 철수 클라스 만들기 (설계도)
    3. 철수 클라스 안에 필요한 데이터의 타입을 사용해서 변수선언하기
    4. 변수명으로 클라스안에있는 타입호출해서 데이터 값 넣기


class Main {
	public static void main(String[] args) {
		
		//철수의 개인정보 -> 나이, 이름, 키
		철수 a = new 철수();
		a.이름 = "김철수";
		a.나이 = 10;
		a.= 160.5;
		
	}
}

class 철수 {//설계도. 
			//붕어빵틀이라고 생각하면 됨. 설계도 하나를 기반으로 여러개의 붕어빵 만들수있음
			//내용이 다른 붕어빵 만들 수 있음. (팥붕어빵, 슈크림붕어빵)
            
            
	String 이름;
	int 나이;
	double;
}

강사님 says 👨‍💻💬

  • 객체란.. 누군가가 설명해준다고 될일이 아님.. 본인이 스스로 이해를 해야 함.
  • 메모리를 아껴써야된다. (여러번 말씀하셔서 제일 기억에 남았다)
  • intel에 들어가서 RAM에 대해 읽어보라.
  • 지금 당장 이해가 가지 않더라도 몇달 후엔 그런거구나 하고 점점 알아가게 된다.
profile
hello world

0개의 댓글