[JAVA기초] Object, 참조변수

포키·2022년 10월 11일
0

국비과정

목록 보기
13/73

p. 135
기계어 | ... 어셈블리 -> C -> C++ -> java ... | 자연어
방법론: 절차지향 -> 객체지향 (단순 발전이라 보기는 어려움, 필요에 따라 사용)
(함수형은 방법론이라기보다 '표현법')

p. 149
기초 변수 (primitive variable) : 자바를 구성하는 기초 원소 같은 것. 속도, 효율이 이유라고 보기는 어렵다.

❗❗❗자바는 Object Oriented❗❗❗

Object란?

현실세계 : 개념, 이미지
(우리가 살고있는 세상을 구성하는 개념, 이미지를 서양에서는 Object라 한다.)

현실 -> 컴퓨터(물리)
문제 -> 해결

방법론 : '문제를 어떻게 해결할 것인가?'

  • 객체지향방법론 : 현실에 존재하는 객체들을 컴퓨터 세계로 옮겨서 문제를 대신 풀이 (시뮬레이션) 한다는 개념
    이를 위해서는 현실의 객체, 객체간의 관계를 컴퓨터 세상에서 표현할 수 있어야 한다.
    나아가서는, 현실에 존재하지 않는 객체 또한 필요에 의해 컴퓨터 세상에서 구현해볼 수 있다.

  • 객체 모델링 : 현실의 객체 -> 컴퓨터의 객체
    객체를 나누는 기준은 사람마다, 관점마다 다르다.
    ex) 아파트, 집, 부엌, 냉장고와 싱크대와 선반과 ...

객체지향방법론은 즉 객체간의 관계를 이용해서 문제를 해결하는 방법.

Object Oriented
1. OOPL (Object Oriented Programming Language) : java, c++, c#
2. OOAD (Object Oriented Analysis and Design) : 노하우 ~~> 경험 <- ★★★중요★★★
OOAD란

현실세계 > 논리세계 > 물리세계

현실 세계에 우리의 대상이 있다. – 핸드폰 (현실세계)
-> 현실의 대상을 물리세계로 옮기기 위해 논리적으로 구상하는 단계 - 핸드폰의 변수는 무엇? 내부 정보는 String? (논리세계)
-> 물리 세계에 구현된 대상(멤버) – 핸드폰 class (코드) (물리세계)

클래스(class)란?

클래스와 객체는 붕어빵틀과 붕어빵에 비유할 수 있다.
클래스는 객체를 생성한다.(객체화=인스턴스화) 이때 생성된 객체는 instance라 한다.

  • instance : 사용할 준비가 끝난 = 메모리에 올라간 객체

'자바는 클래스로 이루어진다'? -> 사실은 객체(인스턴스)로 이루어진다.

클래스의 목적은 객체를 만들기 위함. 재사용 가능.
클래스는 상태와 행위를 가진다 -> 객체(인스턴스)도 멤버변수와 메소드를 가진다.

우리는 객체를 눈으로 확인할 수 없다. (메모리에만 존재)
클래스를 대신 확인할 수 있다.

  • object와 instance는 구분하여 사용한다.
    instance는 메모리에 올라간 객체만을 의미한다는 점 유의!!

같은 클래스에서 생성된 객체라면 값의 종류는 같아도 실제 값은 다르다.

객체 생성 (객체화, 인스턴스화)

class Circle {
	public int radius;
	public String color;
	public double getArea(){
		return 3.14*radius*radius;
	}
}
class CircleTest {
	public static void main(String[] args){
		Circle obj;					//	참조변수 선언
		obj = new Circle();			//	객체 생성 (new 클래스명)
		obj.radius = 100;
		obj.color = "blue";
		double area = obj.getArea();
		System.out.println("원의 면적: " + area);
	}
}
  • . : 참조연산자 (안으로 들어간다는 의미)
Scanner sc = new Scanner(System.in);
sc.nextInt();				//	sc 안의 nextInt 메소드를 가져온다. (객체의 메소드 접근)
Circle obj = new Circle();
obj.radius = 100;			//	obj 안의 radius에 100 값을 잡아넣는다. (객체의 멤버변수 접근)
  • 클래스 내부의 순서는 뒤섞여도 실행에 문제가 없다.
    (클래스는 메모리에 올라가지 않는다, 객체화해야만 '객체instance'가 모두 메모리에 올라간다.
    따라서 멤버변수 선언보다 위에 해당 변수를 참조하는 메소드가 존재해도 괜찮다.
    인스턴스화하지 않으면 메소드 참조가 불가능하다 & 메소드를 참조할 때는 이미 멤버변수도 메모리에 올라가있다 (선언&초기화 끝))

heap memory: 객체가 사용하는 가상메모리 공간

참조 변수

우리는 왜 '참조'하는가? 양이 많아서 매번 직접 써줄 수 없어서

기초변수와 달리 참조변수는 양이 많다. 따라서 매번 써주는 게 아니라, 써져있는 '위치'를 알려준다.

int n = 5;									// 변수 n과 값 5는 일대일 대응된다.
Circle obj = radius; color; getArea();		// 변수 obj와 값은 일대일 대응되지 않는다.

int n은 5 값을 가진다.
Circle obj는 Circle 객체의 ★★★★★주소★★★★★를 가진다.
(참조형은 어떤 값/객체를 가리키는 주소인지 알려준다.)

class Circle {
	public int radius;
	public String color;
	public double getArea(){
		return 3.14*radius*radius;
	}
}
class CircleTest {
	public static void main(String[] args){
		Circle obj1 = new Circle();
		obj.radius = 100;
		obj.color = "red";
		Circle obj2 = new Circle();
		obj.radius = 200;
		obj.color = "blue";
	}
}
/*
	핸드폰
		기종
		운영체제
		회사
		무게
		색상

	Phone
		name:String
		os:String
		company:String
		weight:double
		color:String
*/

class Phone {
	String name;
	String os;
	String company;
	double weight;
	String color;
}

class UsePhone {
	public static void main(String[] args) {
		Phone p1 = new Phone();
		p1.name = "폴드3";
		p1.os = "android";
		p1.company = "Samsung";
		p1.weight = 271;	// 무게 단위는 g
		p1.color = "green";

		Phone p2 = new Phone();
		p2.name = "아이폰X";
		p2.os = "ios";
		p2.company = "Apple";
		p2.weight = 271;	// 무게 단위는 g
		p2.color = "blue";

		System.out.println(p1.name + "/" + p1.os + "/" + p1.company + "/" + p1.weight + "g/" + p1.color);
	}
}
profile
welcome

0개의 댓글