일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- styled components 설치 안됨
- js fetch
- styled-components 버전 문제
- carouselButton
- 브랜치 이름 변경 명령어
- Call Stack
- vscode extension
- react
- reading 'edgesOut'
- Styled Components
- Code Splitting
- reading 'useDebugValue'
- Javascript
- 네트워크 통신 요청
- likelion
- use-immer
- styled-compoents
- 1966 프린터큐
- java
- 최단거리알고리즘
- styled-components extension
- 단일링크드리스트
- javascript 비동기
- react-native-snap-carousel
- 테스크 큐
- styled-components 설치 오류
- fetch()
- git branch -m
- React 공식문서
- react immer
- Today
- Total
Keep Going
[Java] 클래스와 인스턴스 그리고 객체 본문
class instance object
클래스: 설계도(정의)
인스턴스 : 설계도에 따라 만들어진 구체적인 제품(호출)
[클래스와 인스턴스 이전의 프로그래밍]
package org.opentutorials.javatutorials.object;
public class CalculatorDemo {
public static void main(String[] args) {
// 아래의 로직이 1000줄 짜리의 복잡한 로직이라고 가정하자.
System.out.println(10 + 20);
System.out.println(20 + 40);
}
}
[메소드화]
package org.opentutorials.javatutorials.object;
public class CalculatorDemo2{
public static void sum(int left, int right) {
System.out.println(left+right);
}
public static void main(String[] args) {
sum(10, 40);
sum(20, 40);
}
}
* refactoring : 중복을 제거하여서 변화를 준 것!
[객체화1]
package org.opentutorials.javatutorials.object;
public class CalculatorDemo3 {
public static void avg(int left, int right) {
System.out.printlsn((left+right)/2);
}
public static void sum(int left, int right){
System.out.println(left+right);
}
public static void main(String[] args) {
int left, right;
left=10;
right=20;
sum(left, right);
avg(left, right);
left=0;
right=40;
sum(left, right);
avg(left, right);
}
}
로직이 커지고 양이 많아질수록 예측하지 못했던 요소들이 들어오고, 특히 협업을 하는 상황이라면 내가 의도한 바로 메소드가 정의되지 않을수도 있고 같은이름 다른기능의 메소드들이 생겨날 수 있다. 그래서 서로 연관된 변수들과 메소드들은 그룹핑해서 하나의 부품으로 만들어. 반복적으로 사용도 가능하겠지?
지금까지 배운걸로 생각을 한다면 연관된 부분들을 Cal(*, *)이라는 메소드로 묶어낼 수 있어. 그렇게하면 매번 Cal(*, *)을 호출할 때 마다 sum과 avg가 계산될거야.
나는 sum만 원해!! 라는 사람을 위한말 : "객체를 만들 때가 왔구나"
[객체화2]
package org.opentutorials.javatutorials.object;
class Calculator{
int left, right;
public void setOprands(int left, int right){
this.left = left;
this.right = right;
}
public void sum(){
System.out.println(this.left+this.right);
}
public void avg(){
System.out.println((this.left+this.right)/2);
}
}
public class CalculatorDemo4 {
public static void main(String[] args) {
Calculator c1 = new Calculator();
c1.setOprands(10, 20);
c1.sum();
c1.avg();
Calculator c2 = new Calculator();
c2.setOprands(20, 40);
c2.sum();
c2.avg();
}
}
로직의 기획의도를 봐야해(어떻게 사용하는가). 컴퓨터가 쭉 실행하는걸 생각하면서
[클래스]
: 연관되어 있는 변수와 메소드의 집합
: 클래스 Calculator는 {left, right 변수 & sum() avg() 함수} 가지고 있다.
[인스턴스]
클래스는 설계도야. 그 설계도를 가지고 구체적인 제품으로 만들어야해. 그때 사용하는 키워드가 new야!
Calculator c1 = new Calculator();
new Calculator()를 통해 만든 인스턴스를 c1변수에 담았어.
음! c1이 변수라면 데이터타입은 뭘까?
-> 데이터타입이 Calculator인거네..?
-> 클래스를 만든다는 것은 사용자 정의 데이터 타입을 만드는 것과 같은 의미야.(아직 어려우니까 차차 설명할게!)
** 기억해야 할 것 **
1. 클래스이름 변수이름 = new 클래스이름();
형식으로 인스턴스를 생성한다는 것!!
2. 새로 만든 클래스는 데이터타입이 클래스인 변수에 담아야한다는 것!
[객체화3]
하나의 Calculator라는 클래스를 기본으로
c1, c2 인스턴스가 탄생할 수 있었던 것은!!!!
객체 지향이 제공하는 가장 기본적인 재활용성인거지~!~!
'Study > JAVA' 카테고리의 다른 글
[Java] 생성자 (0) | 2019.08.23 |
---|---|
[Java] 클래스 멤버와 인스턴스 멤버 (0) | 2019.08.23 |
[Java] 객체 지향 프로그래밍 (0) | 2019.08.19 |
입력과 출력 (0) | 2019.08.19 |
메소드 (0) | 2019.08.14 |