[Java] Class

Walter Mitty·2022년 10월 24일
0

KOSTA

목록 보기
13/33
post-custom-banner
  • 자바는 뭘까? 객체지향언어
  • 그럼 객체지향언어는 뭘까? 객체지향 프로그래밍 => 객체를 중심으로 프로그램을 한다.
    • 객체지향 프로그램은 중대형 프로그램이 많다.(사이즈가 크다!)
    • 객체와 객체 사이의 관계를 명시하는게 객체지향 프로그래밍이다.
      • 포함 관계
      • 상속 관계
  • 객체 : 프로그램으로 표현한 하나의 사람이나 사물의 샘플
    • 만약 수강신청 프로그램을 짠다고 했을 때 강의가 객체가 된다.
    • 객체를 저장하려면 메모리에 저장해야하는데, 그러려면 변수를 선언해서 값을 담아줘야 한다.
    • type이 여러가지 있는 이유
      • 데이터를 표현하는 방법이 다르다(정수를 표현하는/문자를 표현하는..)
      • 똑같은 정수라고 하더라도 표현하려는 숫자에 따라서 메모리의 byte가 다르다.
  • 객체를 표현하는 방법
    • 표현할 객체를 담을 타입을 정의해준다 => Class(클래스)
    • 클래스를 만든이유는 모델링을 할 객체를 표현하기위해!
    • 사람 객체를 만든다고 생각했을 때, 사람 이름만 필요할까? 필요한 이름, 나이, 키 등 여러 변수들이 필요!
    • 어떤 프로그램을 만드느냐에 따라 변수는 달라진다! (당연..ㅎ)
class 클래스명(타입){
 int age; // 기본타입처럼 보이지만 클래스 객체 타입
 String name; // 클래스 객체 타입
}
  • type을 정의한것. 즉, int 타입을 만들듯이 새 타입을 정의 한거다.
  • 왜 정의? 변수 만들어서 활용하려고
  • 왜 변수 만들어? 값을 담아서 메모리에 저장하려고
  • 왜 메모리에 저장해? 데이터 정보를 활용해야하니까
class Person{ // 타입명: Person //int, String을 담을 수 있는 타입을 만들어준것.
  int age;
  String name;
}
// 하나의 타입에 여러 값을 넣을 수 있게 된다.

// 변수선언 (이유: 메모리를 할당해서 값을 저장하려고)
// 타입이름 변수명
Person p1; // 타입이름이 Person 이니까. 그 객체가 할당받은 메모리를 담을, 주소값을 담을 변수만 할당해 놓은것

//객체 생성
// 클래스 모양으로 `heap`에다가 메모리를 할당 받는다.
// new 생성자이름
p1 = new Person(); // ⭐️기본타입과 다른 점! 이렇게 객체 생성을 한다.
//램에는 담는 값에 따라 메모리영역 Static/Stack/Heap 에 저장이된다.
  • stack 메모리의 특징
    • 변수 이름으로 접근 가능
  • heap 메모리의 특징
    • 변 이름으로 접근 불가능
    • 주소로 접근 가능
    • new 라는 연산자로 힙에 메모리 할당. 뒤에 또 나오면 새롭게 heap에 또 메모리 할당함
// 객체 선언과 생성을 한번에~
Person p2 = new Person();

옛날에는 delete 를 사용해서 지웠는데,
현재는 GC사용되지 않는 메모리를 heap 영역에서 없애줌
heap 에 접근하려면 주소를 알아야 하고, 찾아갈 수 있게 클레스로 만든 변수(객체/참조변수)의 이름을 알아야 한다.
따라서 데이터에 바로 접근은 불가능 하지만, 접근 가능한 주소값을 가질 수 있다.

// 객체이름.멤버변수이름 = 값
p1.age = 10; // 여기서 .은 멤버 접근 연산자이다. 따라서 100번지.age
//p1 - 100번지에 있는 객체의 age 변수에 10을 할당해라. (heap-p1.age에 10이 저장된다)
p1.name = "asdf";

p2.age = 20;
p2.name = "bbb";

System.out.println("p1.age:" + p1.age); // 출력값 p1.age:10
System.out.println("p1.name:" + p1.name); // p1.name:asdf
System.out.println("p2.age:" + p2.age); // p2.age:20
System.out.println("p2.name:" + p1.name); // p2.name:bbb
post-custom-banner

3개의 댓글

comment-user-thumbnail
2022년 10월 24일

heap 이랑 stack은 다시한번 찾아보셔요!!
저번주 면접 볼 때 나왔었어요!!

1개의 답글
comment-user-thumbnail
2022년 10월 24일

덕분에 클래스 복습하고 가요~
멋집니다!

답글 달기