Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 그리디 알고리즘
- 알고리즘
- FCF
- object
- 주린이
- 미국주식
- 백준
- mco
- S&P500
- 다형성
- 프로그래머스
- 접근제어자
- 오버라이딩
- StringBuffer
- 배당성장
- 무디스
- 주식
- javascript
- XLF
- etf
- 제태크
- 객체지향
- 현금흐름표
- 자바
- Java
- 잉여현금흐름
- 인플레이션
- 금리인하
- 기업분석
- 금리인상
Archives
- Today
- Total
오늘의하루
[JAVA 공부 4일차] 객체지향 Part 2 본문
1. 생성자(constructor)
생성자 생성하는 방법 : 클래스명( ){ }
생성자와 기본 생성자를 깐부로 생각해서 꼭 같이 작성해주는게 나중에 에러를 줄일 수 있다.
- 생성자란 인스턴스 생성 시 호출되는 "인스턴스 초기화 메서드"이다.
- 모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.
- 생성자가 없다면 컴파일러가 기본 생성자를 추가해준다.
class를 사용해봤다면 이미 우린 기본 생성자를 호출한 적이 있습니다.
public class Myclass{
public ...{
Test a = new Test();
// 연산자 new에 의해 메모리에 Test클래스의 인스턴스가 생성된다.
// 생성자 Test()가 호출되어 수행된다.
// 생성된 Test인스턴스의 주소가 참조변수 a에 저장된다
}
}
class Test{ }
1-1. 기본 생성자 사용방법
public class Myclass{
public static void main(String[] args){
// 생성자 없을때
Car c1 = new Car();
c1.color = "white";
c1.gearType = "auto";
c1.door = 4;
// 생성자 있을때
Car c2 = new Car("red", "auto", 4);
// ⭐ 위 두개 모두 초기화 하는것이다.
}
}
class Car{
String color;
String gearType;
int door;
Car(){} // 기본 생성자
Car(String c, String g, int d){ // 생성자
color = c;
gearType = g;
door = d;
}
}
1-2. 기본 생성자 활용
기본 생성자를 통해 디폴드 값을 지정해줄 수 있다.
public class Myclass{
public static void main(String[] args){
}
}
class Box{
int width;
int height;
String use;
// =======================================
Box(){ // 기본 생성자
// ⭐ 첫줄에만 사용할 수 있다!!!
this(150,100,"packing"); // 생성자 this는 Box 생성자를 가리킨다.
// == BOX(150,100,"packing")
}
⭐ 위와 아래가 같은 역할을 하는것이다.
// 빠른 개발을 위해서는 위에꺼를 쓰는게 좋다.
Box(){ // 기본 생성자
width = 150;
height = 100;
use = "packing";
}
// =======================================
// =======================================
Box(int a, int b, String c){ // 생성자
width = a;
height = b;
use = c;
}
⭐ 위와 아래가 같은 코드이다.
// 인스턴스 변수와 지역변수의 구별을 위해 this를 사용한다.
Box(int a, int b, String c){ // 생성자
this.width = a;
this.height = b;
this.use = c;
}
// =======================================
}
2. 기본형 매개변수 & 참조형 매개변수
기본형의 경우 ReadOnly이며 참조형은 Read & Write가 가능하다.
// 기본형 매개변수
public class Basic{
public static void main(String[] args){
Data d = new Data();
d.x = 10;
System.out.println("d.x = " + d.x); // d.x = 10
change(d.x);
System.out.println("main() : x = " + d.x); // main() : x = 10
}
static void change(int x){ // int 값을 받는다.
x = 1000; // 매개변수 x에 1000을 넣는다.
// ⭐ 여기 있는 x는 위에있는 d.x와 다른 것이다.
System.out.println("change() : x = " + x ); // change() : x = 1000
}
}
class Data{
int x;
}
실행 순서 알아보기
- main 함수 호출
- 참조 변수 d에 Data 인스턴스 주소(예 : 주소 0X100) 저장
- 참조 변수 d (예 : 주소 0X100)에 있는 x에 10을 대입한다.
- System.out.println() 실행한다.
- change(d.x) 함수를 호출한다.
- int x의 값을 전달한다.
- change() 함수 실행 => int 타입 x에 1000을 대입한다.
- 이때 x는 위에 있는 x와 아예 다른 주소 값을 가진 변수이다.
- System.out.println() 실행 후 void이기 때문에 자동 return 된다.
- System.out.println() 실행한다.
- 프로그램 종료
// 참조형 매개변수
public class Basic{
public static void main(String[] args){
Data d = new Data();
d.x = 10;
System.out.println("d.x = " + d.x); // d.x = 10
change(d); // 주소 값을 넣는다.
System.out.println("main() : x = " + d.x); // main() : x = 1000
}
static void change(Data d){ // 주소값이 들어간다.
d.x = 1000; // d의 주소에 x값을 1000으로 바꿔준다.
System.out.println("change() : x = " + d.x ); // change() : x = 1000
}
}
class Data{
int x;
}
실행 순서 알아보기
- main 함수 호출
- 참조 변수 d에 Data 인스턴스 주소(예 : 주소 0X100) 저장
- 참조 변수 d (예 : 주소 0X100)에 있는 x에 10을 대입한다.
- System.out.println() 실행한다.
- change(d) 함수를 호출한다.
- 참조 변수 d의 주소(예 : 주소 0X100)를 전달한다.
- change() 함수 실행 => 참조 변수 d의 주소에 있는 x에 1000을 대입한다.
- System.out.println() 실행 후 void이기 때문에 자동 return 된다.
- System.out.println() 실행한다. = > 참조 변수 d의 주소에 있는 x값이 1000이다.
- 프로그램 종료
// 참조형 반환타입
public class Re{
public static void main(String[] args){
Data a = new Data();
a.x = 10;
Data b = copy(a);
System.out.println("d.x = " + a.x);
System.out.println("b.x = " + b.x);
}
public static Data copy(Data z){
Data tmp = new Data();
tmp.x = z.x;
return tmp;
}
}
class Data{
int x;
}
실행 순서 알아보기
- main 함수 호출
- 참조 변수 a에 Data 인스턴스 주소(예 : 주소 0X100) 저장
- 참조 변수 a (예 : 주소 0X100)에 있는 x에 10을 대입한다.
- 참조 변수 b에 copy(a) 결과 대입
- copy() 함수에 매개변수로 참조 변수 a의 주소 값 전달
- 참조 변수 tmp에 인스턴스 주소 (예: 주소 0X200) 저장
- tmp에 있는 x값에 a에 있는 x값 대입
- tmp의 주소 값 리턴
- 참조 변수 b의 주소는 0X200이 된다.
- System.out.println() 실행
- System.out.println() 실행
- 프로그램 종료
3. 참조 변수 this & 생성자 this()
참조 변수 this에 대해 몇 가지 알아보자
- 참조 변수 this의 경우 호출한 자기 자신을 의미하기 때문에 호출 전에는 무엇을 의미하는지 알 수 없다.
- 인스턴스 메서드(생성자 포함)에서 사용 가능하다
- 지역변수와 인스턴스 변수를 구분할 때 사용한다.
참조 변수 this와 생성자 this()는 아예 다른 개념이기 때문에 묶어서 이해하지 말아야 한다.
구분 | 설명 |
this | 참조변수 이기 때문에 인스턴스의 주소가 저장되어 있다. |
this(), this(매개변수) | 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용한다. |
'JAVA' 카테고리의 다른 글
[JAVA 공부 5일차] 객체지향 Part 3 (0) | 2022.07.27 |
---|---|
[JAVA 복습] 객체지향, 배열, 연산 (0) | 2022.07.26 |
[JAVA 공부 3일차] 객체지향 Part 1 (0) | 2022.07.25 |
[JAVA 공부 2일차] if문, 반복문, 배열 (0) | 2022.07.22 |
[JAVA 공부 1일차] JAVA 실행 순서 및 타입, 연산, 문자열 (0) | 2022.07.21 |
Comments