객체란 무엇인가?
객체는 세상에 존재하는 모든 것. 프로그래밍에서 속성과 기능을 가지는 프로그램 단위이다.
ex)날씨 프로그램 속성)온도,미세먼지 기능)날씨예보
클래스란 무엇인가?
객체를 생성하기 위한 틀이다. 붕어빵 기계
필요에 따라 객체를 만든다. 소형차, 대형차,, 용도에 따라 객체가 달라짐.
클래스는 다양한 객체 만들기 위한 하나의 틀을 만드는 것이다, 붕어빵 기계
팥이든 붕어빵 만들어주세요. 나는 거기에 팥 넣어.. 다른 재료 넣어
이때 붕어빵의 틀은 변하지 않아. 그 안의 속성과 기능이 달라지는거,
그랜져.. 공장에서 그랜져 생상 틀. 기능으로 배기량. 속성으로 색상, 바퀴
소비자. 검정, 일반바퀴, 배기량 2000cc이렇게 원하면 저렇게 출시
틀은 그대로 있고 상품을 그 틀에서 똑같이 제작
틀을 만들고 사용자 입맛에 맞게 변형해서 사용
그래서 객체가 하나더라도 클래스가 있어야함. 객체의 부모역할=클래스
개발자들은 클래스를 만들고, 클래스로부터 객체를 뽑아내고, 뽑아낸 객체는 메모리에
자바는 가비지 컬렉터 필요에 따라 객체를 많이 만들었을 때 안쓰는 객체는 자바가 메모리에서 날려버린다.
쓰고있는 객체는 손대지 않는다. 누구와도 연결되어있지않고 사용하지 않으면 가비지 컬렉터가 회수
클래스는 틀. 객체를 만드는건 클래스. 클래스가 반드시 있어야한다. 개발자는 클래스를 만들어야한다.
클래스의 구성요소 속성(멤버 변수),기능(메서드)
자전거에서 속성:안장, 헨들, 바구니,기어, 페달. 바퀴
기능:기어 변속, 가속, 브레이크
객체지향 프로그램 장점:부품 하나하나를 모듈 할 수 있다.
자전거를 만들었는데 안장이 맘에 안들어. 안장을 다른 회사거 사와서 합치면됨
내가 다 만들필요 없고 만들어진거 조합해서 내거를 만들 수 있다.
금융 프로그램. 지금까지 있던거 가져와서 내가 만든거 붙여서 새로운거 만듦.
내가 하나하나 다 만들 필요가 없어서 좋다.
언어의 확장성이 좋아진다.
12강 학습목표: 클래스 제작, 객체 생성, 생성자
멤버변수 (c에서 변수같고)메서드(c에서 함수인듯?)
public class Grandeur{ :클래스 이름:첫글자는 대문자 얘를 만들거야!
public String color; :멤버 변수(속성)
public String run(){ :public은 접근 제한자. void는 반환값이 없다는 말
System.out.println("--run--");//메서드는 일반적으로 소문자로 만든다.
return "hello" //반환 String
}
public Granduer(){//생성자는 대문자로 시작. 클래스 이름과 동일한 이름을 가진 메소드.
클래스 만드는 목적=>객체 생성 위해서
외부에서 이 클래스 이용해 객체 만들 떼 가장 먼저 호출 되는 부분 생성자.
생성자의 위에서 메모리의 객체가 올라간다. 생성자는 클래스 이름과 동일하고 반환이 없다.
그 안에는 생성을 할 때 필여한 기능을 넣어주면 된다.
필요한 기능없으면 빈공간이어도 됨.
}
메서드의 형태
접근 제한자, 호출한 곳에 데이터 반환 해줄때의 반환 형태,메서드 이름,
메서드 호출 시 실행해야하는 기능
프로그램 실행->제일먼저 메인 메소드 실행
객체 생성
클래스로부터 new를 이용해서 객체를 생성한다.
Granduer mycar1(닉네임)=new Grandeur();//생성. 객체 생성하여 메모리에 업로드
mycar1.color="red";//도트 접근자 이용해 접근
mycar1.run();//기능 호출
메모리상에는 두개의 객체.
찐 그랜져 객체, 마이카 1이라는 객체
객체 있는곳의 메모리 주소를 마이카1에 담아놓은 것. 거기에 객체가 있지 않음
걔를 가르키는 메모리 주소만 마이카 1에 놓음. ==레퍼런스
오늘 새롭게 알게 된 것.
메인 메소드에 public static void main(String[] args)가 꼭 있어야 한다. !
생성자=클래스와 이름이 같고, 가장 먼저 실행되는 메소드
매서드는 클래스가 객체를 생성했을때 객체가 하는 일,기능
기능을 선언하고 정의하는 방법. 메소드가가진 특징
배울것 메서드 선언과 호출 매개변수 중복 메서드 접근자
메소드도 선언 및 정의 후 호출해서 사용한다.
메소드 이름은 소문자로 시작 메소드 이름 정할때 동사 앞, 뒤에명사 getInfo()같이.
호출할때는 도트 접근자.
중복 메소드. 똑같은 이름으로 여러개 만들 수 있음 단. 여러개 만들때는 매개변수의 변화가 있어야함
매개변수 차이 없다면 컴파일 안됨. 매개변수 두개, 없거나. 속성이 다르거나.. 이렇게 매개변수가 달라야함
==overloading 동일한 매소드를 파라미터 차이를 두고 쓸 수 있다.
접근자.
private 메소드 호출부에서 (외부에서)호출 할 수 없음 내부에서는 호출가능. 객체 안에서는 사용 가능.
public 이부분만 호출가능.
14강
객체지향에서는 객체가 메모리에서 어떻게 이용되는지가 굉장히 중요.
어떻게 생성, 이용되는지를 정확히 알아야함.
동적생성, 레퍼런스(가리킨다),자료형이 같아도 다른 객체, null과 nullpointexception
메모리에서 객체생성. 객체는 메모리에서 동적으로 생성.
메모리 영역
GC
ChildClass child(레퍼런스)=new ChildClass();
레퍼런스는 메모리에 생성 된 객체에 주소를 가지고 있음. 객체는 메모리 공간 어딘가에. 그 주소값만 차일드에 들어있음. 이게 레퍼런스. 레퍼런스 주소를 담고.. 가르키다가 필요없게되면 관계를 끊어버림.
그 객체 가르키는 레퍼런스 없음. 가비지컬렉터가 어떠한 레퍼런스와도 관계가 없다면,
그런거를 회수한다. 그 객체를 메모리에서 지운다. 메모리가 넉넉해진다.
개발자는 클래스로 부터 생성, 객체쓰고 , 필요없는 시점에 가비지컬렉터가 회수해서 효율적으로 쓴다.
주소값을 담는 상자= 레퍼런스
객체 생성, 그 객체들은 모두 동일한 메모리공간 생성된게 아니고 별도로 .
각 레퍼런스 주소가 다 다름. class가 같다고 해서 동일한 객체가 아님. 다 다른 공간에 존재하는 객체
가진 속성.. 이런거도 다 다름.
자료형이 같아도 다르 객체
객체 생성, 클래스 같아도 다 다른 공간에 있음. 레퍼런스가 다 다름.
널과 널포인트
객체 생성=>객체 가르킨걸 레퍼런스. 레퍼런스에 널을 저장. (객체가 더이상 쓰이지 않을 때 )
객체와 레퍼런스 관계 끊기고. sysout 했을때 널출력. 관계 끊겼음에도 또 메소드 호출하면. 가르키는 곳이 없으니 익셉션 발생. 널포인트 익셉션. 가르키고있는고싱 없다. 라는 뜻의 에러,
레퍼런스와 객체는 new라는 키워드로 이어져 있지만 거기다 null을 넣으면 끊어짐. 레퍼런스는 객체를 가르키고 있지 않다. 레퍼런스는 사라지지 않는다. 객체만 사라진다.
댓글