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

민짱·2024년 1월 7일
post-thumbnail

📅2023. 12. 12 4일차


🎨 Java

📖객체

  • 모든 변수는 메모리에 저장된다.

  • int 변수는 4바이트 이다.

  • 변수에는 오직 8바이트 이하의 값만 넣을 수 있다.

  • 객체가 필요한 이유

    • 변수에는 오직 값 1개만 넣을 수 있다.
    • 프로그래밍을 하다보면 변수에 값을 여러개 넣을 필요가 있을 때가 있다.
    • 그래서 고안된 것이 객체이다.
    • 객체는 커피 캐리어에 비유될 수 있다.
    • 커피 캐리어에는 커피를 여러잔 담을 수 있다.
    • 커피 캐리어는 용도에 따라 종류가 여러가지 있다.
    • 프로그래밍을 할 때 상황에 따라 서로 다른 종류의 객체 여러개가 필요하다.
    • 객체를 일종의 제품으로 보았을 때 객체를 만들기 위해서는 설계도 즉 클래스가 필요하다.
    • 객체는 너무 커서 변수에 담을 수 없다.
    • 그래서 또 고안된 것이 리모콘 시스템이다.
    • 클래스로는 3가지를 할 수 있다.
    • 클래스로는 객체도 만들 수 있고 그 객체를 조종할 수 있는 리모콘도 만들 수 있다. 그리고 또 객체리모 콘을 담을 변수도 만들 수 있다.
  • 변수에는 오직 1차원적인 값만 저장 할 수 있다.

    • 1차원 적인 값(데이터)
      • 5
      • 3.14
      • 'a'
      • true
    • 복잡한 값
      • 객체
  • 변수에는 객체를 저장할 수 없다.

    • 객체가 너무 크고 변수는 작다.
    • 객체는 여러가지 값(데이터)의 조합이다. 그게 변수에 들어가면 한 덩어리로 해석된다.
      • 즉 변수에 1과 2를 넣으면, 다른 사람들은 그것을 1과 2의 조합이 아닌 12로 본다.
  • new 사람();을 하면 아래 2가지가 만들어진다.

    • 객체
    • 객체가 자기자신을 조종할 수 있는 리모콘
      • 그 리모콘을 객체 스스로는 this 라고 부른다.
  • for문의 초기화 값은 미리 값이 정해져있으면 생략가능.

  • 전위 연산, 후위 연산

    • 전위 ( a = ++b)
    • 후위 ( a = b++)
  • 부동소수점

📖객체란?

  • 클래스의 인스턴스나 배열을 말한다.
  • 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미한다.
  • 객체지향 프로그레밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그레밍에서 클래스를 기반으로 한 변수를 클래스 인스턴스라고 지칭한다.

클래스란?

  • 맴버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식이다.
  • 객체를 찍어내기 위한 틀, 설계도이다.

인스턴스란?

  • 설계도(클래스)를 바탕으로 실체화되어 메모리에 할당된 실체를 말한다.

  • 객체는 소프트웨어 세계에 구현할 대상이고, 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스이다.

  • 인스턴스는 객체에 포함된다고 볼 수 있다.

  • 객체 지향에 대해 아는 거 설명;

    • 객체 -> 폴더
    • 관련있는 데이터
    • 데이터를 묶는데 관련있는 것을 묶으면 객체
    • 유/무형을 가리지 않는다.
  • -3줄 요약-

      1. 객체 : 소프트웨어 세계에 구현할 대상이며 속성과 기능을 가지는 프로그램 단위를 뜻함.
      1. 클래스 : 객체에 속성과 기능을 넣어줄 설계도를 뜻한다.
      1. 인스턴스 : 클래스에 따라 메모리상에 구현된 실체를 뜻한다.

null이란?

  • null은 자바의 키워드다.
    • null은 접근 지정자인 private이나 상수 선언을 위한 final과 같이 대소문자를 구분하는 키워드이다. 따라서 Null이나 NULL과 같이 선언할 수 없고 오로지 null로만 선언할 수 있다.
  • null과 참조형
    • null은 참조형 타입의 기본 값이다. 모든 기본형 타입(Primitive type)이 기본(default)값을 갖는 것처럼 참조형 타입(Reference type)은 기본 값으로 null을 갖는다.
  • 실체 : 실제로 존재하는 것
  • 주체 : 내(실체가)가 나(실체)를 가리킬 때
  • 객체 : 내(실체)가 다른거(실체) 가리킬 때
 int[] arr = new int[3];

- new -> 나는 객체 하나 만들겠다.
- int[3] -> int \* 3 의 객체

배열이란?

  • 배열은 같은 타입의 데이터를 연속된 공간에 나열하고, 각 데이터에 인덱스(index)를 부여해놓은 자료구조이다.

  • 배열 1번 방 = 0 2번방 = 1 3번방 =2

  • 리모콘으로 원격제어

int [] arr = new int [6];
  - 선 배열, 1차원
int [][] arr2 = new int [2][3];
  - 면 배열, 2차원
  • type이 다를 때 배열 기본 type x
    • 철수 a = new 철수(); -> 철수 만들어야 함. 컴퓨터는 인식 못함. 설계도를 만들어야 함(class).
class 철수 {string 이름; int 나이; double;}

- a.이름 = "김철수";
- a.나이 = 10;

컴파일타임(compile time)

  • 개발자에 의해 C, JAVA 등과 같은 개발 언어로 소스코드가 작성되며, 컴파일 과정을 통해 컴퓨터가 인식할 수 있는 기계어 코드로 변환되어 실행 가능한 프로그램이 되는 과정을 의미한다.
  • Template 프로그래밍은 모두 컴파일 타임에 결정 또는 실행된다.
  • 컴파일타임 에러(compile time error)
    • 소스코드가 컴파일 되는 과정 중에 발생하는 Syntax error, 파일 참조 오류 등과 같은 문제들로 인해 컴파일이 방해되어 발생하는 오류들을 의미한다.
    • 컴파일에러 발생 시, 현재 문제가 되는 소스코드를 알려준다.
      1. Syntax error
      2. Type check error

런타임(Run time)

  • 컴파일 과정을 마친 응용 프로그램이 사용자에 의해서 실행되어 지는 '때(time)'를 의미한다.

  • 런타임 에러(Run time error)

    • 이미 컴파일이 완료되어 프로그램이 실행중임에도 불구하고, 의도치 않은 예외상황으로 인하여 프로그램 실행 중에 발생하는 오류 형태를 의미한다.
      1. 0 나누기 오류
      2. 널(NULL) 참조 오류
      3. 메모리 부족 오류

부동 소수점이란(floating point)?

  • 실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수로 나누어 표현한다.
  • 부동 소수점으로 표현한 수가 실수를 정확히 표현하지 못하고 부동 소수점 연산 역시 실제 수학적 연산을 정확히 표현하지 못하는 것은 여러 가지 문제를 낳는다.

📋 문제 풀이

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

class Main {
	public static void main(String[] args) {
		// 철수나이, 영수 나이, 영희 나이
		int[] ages = new int[3]; 
		// 얘는 이미 만들어져 있다.
		ages[0] = 10;
		ages[1] = 11;
		ages[2] = 12;

		// 철수의 개인정보 -> 나이, 이름, 키, 몸무게, 전화번호, 결혼여부
		철수 a = new 철수(); 
		// 철수는 만들어 있지 않아 -> 만들어야해!
		a.이름 = "김철수";
		a.나이 = 10;
		a.= 160.5;

	}
}

class 철수 { // blueprint(도면 같은 것)

	String 이름;
	int 나이;
	double;

}
  • 다양한 타입으로 구성되어 있는 객체를 만들고 임의의 값(데이터)를 넣은 후 객체 내부의 데이터를 전부 출력해 주세요.\
class Main {
	public static void main(String[] args) {
		장민영 Ob = new 장민영();
		Ob.이름 = "장민영";
		Ob.성별 = "남자";
		Ob.나이 = 26;
		Ob.= 178;
		Ob.전공 = "생명과학과";


		System.out.println("이름 : " + Ob.이름);
		System.out.println("성별 : " + Ob.성별);
		System.out.println("나이 : " + Ob.나이);
		System.out.println("키 : " + Ob.);
		System.out.println("취미 : " + Ob.전공);

	}
}

class 장민영 {
	String 이름;
	String 성별;
	int 나이;
	double;
	String 전공;
}

🔔 TODO

  • 런타임과 컴파일타임
  • RAM
  • 메모리
  • 객체

💡느낀점

객체와 배열이 너무 헷갈리고 머리에 잘 안들어왔다. 잘 복습하여 마스터하자!

0개의 댓글