자바 세상은 데이터 privacy 중요하게 생각한다.. 그래서 속성값 웬만해서
private임. 값에 접근하고 싶을 때 직접하는 게 아니라 메소드를 통해 "너 누구야?"하고 물어보는 것! 또 조건을 줄 것이기 때문에 바꿀 수 있는 메소드를 설정했다고 하더라도 속성 보호 가능
main(String[] args)매개변수가 몇 개 들어올지 모르니까 들어오는 개수에 따라 배열을 만들어 넣어주겠다
static"객체를 생성하지 않았는데도 접근해서 쓰고 싶어요"
gettersetter는 다른 프로그램에서도 쓰기 때문에 이름에 대한 약속이 있음
java에서 제공해주는 객체들이 바로 api다.
- 해야 할 게 많으니까 전기밥솥, 냉장고, 세탁기 같은 객체들을 통한 편리한 사용 가능
- 이 중 만들어진 전기밥솥을 가져다쓰는 경우가 있고 직접 객체를 만드는 경우가 있다. 이미 만들어진 객체들을 사용하고 필요한 객체들을 만들어 사용하기가 자바의 핵심!
- 클래스 "
Arrays" : 배열을 편하게 쓸 수 있는 기능 제공하는 클래스
↳ 기능만 가지고 있고 값은 없으므로 배열 아님!
Arrays클래스 내copy메소드
for
- 세미콜론이 기준
cf. 무한반복 돌릴거면 현실적으로 while 쓰지..- "있니 꺼내줘"
🅱️efore :iterator→ 있니 꺼내줘
🆕ow : 이제는for each를 통해서 → 있니 꺼내줘
- 묶어서 관리하기 좋은 유사한 데이터들이 존재 → 배열
- 기본 데이터 값은 그냥 값이 바로 들어가지만 배열은 레퍼런스 데이터 타입이므로 배열에 들어 있는 데이터 자체가 아니라 배열의 주소값이 들어간다. 배열: ~번째 인덱스에 있는 값~~
cf. 특이 케이스:string
↳String클래스: 추후에~- 그래서 배열 이용 복붙 코드에서도 복사되는 값은 데이터가 아니라 주소값임! 값을 복사해줄 거냐 주소를 복사해줄 거냐에 따라 결과가 완전히 달라짐!
...
System.out.println("i::"+i);
System.out.println("j::"+j);
int[] iarr = {10};
int[] iarr2 = iarr;
iarr[0] += 10;
System.out.println("iarr::"+iarr[0]);
System.out.println("iarr2::"+iarr2[0]);


⌈ 미녀와 야수 ⌋ 속 야수의 성이야말로 대표적인
객체 지향 세상이라고 볼 수 있다. 먼지떨이가 청소하고, 주전자가 차를 끓인다. 이들은 서로 협력하며 일을 효과적으로 진행해 나간다.
객체- 🧍🏻♂️사람, 🏈사물, 🗽장소, 💡개념- 객체는 자기의 속성을 알고, 행위를 할 수 있다.
"객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다."
Wikipedia
자바에서 가장 중요한 것은 객체다. 자바는
객체 지향 프로그래밍 언어이다.객체에 대해 먼저 이해해보자.
우리는 그동안main에서 모든 것들을 진행하고 있었다.
이제는 객체들이 각각 어떻게 존재하고 있고 어떻게 서로 상호작용하며 일들을 진행해나가는지를 살펴보자.우리는 뭔가를 할 줄 안다고 했을 때 사람만 떠올릴 것이다. 그러나 자바가 속한 객체 지향 세상에서는 객체들이 각기 자기 할 일을 할 줄 안다고 믿는다. 대표적인 예로 로봇청소기가 있다.
e.g.) ~ 서점에서 ~
| object | 행위 | 이유 |
|---|---|---|
| 책장 | 대출•반납•폐기 | 책을 가지고 있기 때문에 책을 관리한다고 본다. |
| 명부 | 단골고객 관리 | ~ |
| 금고 | 돈관리 | ~ |
세상을 둘러보면 pretty much everything을 객체로 도출해낼 수 있다~
그렇다.
각각의 객체들은 자기가 잘할 수 있는 일을 갖고 있다.
청소기, 세탁기, 식기세척기를 사용하면 집을 관리하는 것이 훨씬 편리할 것이다. 이처럼 객체지향 프로그래밍은 프로그래머가 처음부터 끝까지 기능을 다 짜는 게 아니라 객체들이 자기 속성과 할 수 있는 행위(기능)들이 있기 때문에 이들이 서로 상호작용할 수 있도록 하는 것이다.
자바는 객체를 어떻게 설계하는지가 중요하다.
프로그램을 짤 때 "어떤 객체가 필요할까?"하고 생각해야 한다.e.g.) ~ 🎰로또 시스템 구현 ~
🤔 어떤 객체가 필요할까?
↳ 로또머신, 로또볼, ...필요한 데이터와 기능들이 뽑히면 이것을 객체 단위로 묶을 수 있을 것이다.
처음부터 보이지는 않지만 연습하다보면 차츰차츰 잘 할 수 있을 것이다!
• 생각하기
이 기능을 어떤 객체가 갖고 있게 하는 것이 좋을까?
객체 지향 프로그래밍은 설계에 정성을 더 들여야 하는 프로그래밍임을 알 수 있다.
📚 참고 도서
📘"object" 📘"객체지향의 사실과 오해"
는 중요한 정보만 남기고 나머지는 버리는 것이다.
펜은 어떤 속성을 가질까?
정말 다양한 속성을 가질 수 있겠다.
그런데 펜이 어디서 사용되냐에 따라 도출되는 중요한 속성이 변하는데 이것이 바로 추상화이다.
개념이 중요한 언어이기 때문에 개념을 잘 파악하고 용어를 잘 알아두자.
꽃
new pen하면 실체가 만들어져서 메모리에 올라온다고 생각하면 된다.필드: 속성메소드 : 기능p를 통해 하면 된다.쫌쫌따리 지식
lang에 존재하는 건 따로import없이 사용할 수 있다.
↳Math클래스도 여기random은static한 클래스 아니기 때문에new로 생성되어야 하지만,Math가 가지고 있는random은static하기 때문에 바로 접근하여 사용 가능하다. 기능은 같다.api잘 알면Math갖다 쓰자.main을 클래스의 구성요소라고 보기는 어렵다.main메소드는 여타 다른 클래스 내 메소드들과는 다르게 특이성을 띠는 것이다. 단지 그 클래스를 테스트하는 용도일 뿐이다. 다른 데서TV를 썼다고TV의main을 다른 메소드 가져다쓰듯 할 수 없다.
return은 '메소드를 호출한 쪽으로 돌아가' 라는 뜻Dice dice = new Dice();
에서 Dice()가 생성자!
Dice 내에 생성자 public Dice(){}가 없었다 하더라도 컴파일러가 자동으로 생성자를 만들었을 것이므로 위 예시 코드에서 Dice의 객체 dice를 만들 때 Dice()가 이미 있다고 가정하고 "new" + "Dice()"라고 쓸 수 있는 것이다. 즉, 컴파일러가 만들어둬서 디폴트 생성자를 "이용"할 수 있는 거임!!!메소드는 기능을 가지고 있으면서 언제든지 불러서 쓸 수 있지만, 생성자는 처음 객체가 만들어질 때 가지는 값들 초기화하는 초기값만 가지고 있기 때문에 바뀌거나 다시 쓸 수는 없음
메소드와 다르게 생성자는 return값이 없음

입력값만 있는 경우도 있고~~ 다양!

"메모리에 올라온 애들만 쓸 수 있다?"