1.객체생성
1-1.new
객체를 생성할때 사용하는 연산자를 사용하여 생성자로 생성한다.
new 연산자를 이용하여 생성한 객체가 위치하는 메모리 공간을 쓰레기 수집가능 힙이라고한다.
Person person = new Person("Alice");
1-2.String?
String의 경우 예외적으로 new연산자 없이 객체를 생성한다. (new로 할수도있음)
Java는 메모리 효율성을 위해 문자열을 String Pool이라는 힙 내의 고정된 메모리 영역에 저장한다다.
이 풀에서는 동일한 내용의 문자열을 재사용합니다.
String greeting = "Hello, World!";
2.객체 참조변수
생성한 객체를 유지하는변수임 (여러개가 하나의 객체를 참조하게할수도있다.)
C++과 달리 자바의 참조타입은 객체만가능(원시타입 참조 불가능)
3.다중정의(overloading)
한 클래스에 같은이름의 메소드를 여러개 정의하는것
public static int add(int a, int b) {
return a + b;
}
// 실수 두 개 더하기
public static double add(double a, double b) {
return a + b;
}
// 정수 세 개 더하기
public static int add(int a, int b, int c) {
return a + b + c;
}
4.클래스
4-1.맴버 변수
객체의 상태를 나타냄 (보통 private)
private String model; // 자동차 모델
private int year; // 제작 연도
4-2.메소드
객체의 행동을 나타냄
객체의 멤버변수와 인자를 함께사용
// 4-2. 메서드 (객체의 행동)
public void displayInfo() {
System.out.println("모델: " + model + ", 연도: " + year);
}
4-3.생성자
메소드의 이름이 클래스 이름과같으며 반환타입 기술X
외부에서 new로 생성자를 통해 객체생성자가능하게함
public Car(String model, int year) {
this.model = model; // 멤버 변수를 초기화
this.year = year; // 멤버 변수를 초기화
}
5.불변 객체
수정자 메소드가 하나도 없는 클래스
맴버변수들을 final(한번 정해지면 못바꿈)수식어를 이용하여 정의
public final class ImmutablePerson {
private final String name; // 멤버 변수는 final로 선언
}
6.생성자에서 다른생성자 호출
this 키워드를 사용하여 호출함
public class Person {
private String name;
private int age;
public Person() {
this("Unknown"); // 다른 생성자 호출
}
public Person(String name) {
this(name, 0); // 다른 생성자 호출
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
7.인자 전달 방식
자바는 값전달(call by value) 방식만을 지원한다.
기본 데이터의 경우 값 자체를 복사하여 전달한다.
참조데이터의 경우 객체가 통으로 전달되지않고 레퍼런스 값만 복사되어 전달된다. 즉 참조데이터일때도 레퍼런스값을 Call by value 로 받는다고 할수있다.
// 기본형 인자를 변경하려는 메서드
public static void changeValue(int num) {
num = 20; // 매개변수 num은 새로운 값으로 변경
// 원본 변수에는 영향 없음
}
// 참조형 인자를 변경하려는 메서드
public static void changeName(Person p) {
p.setName("Bob"); // 참조를 통해 객체의 상태 변경
}
7-1.C++과 차이
C++은 Call by Reference를 지원한다. C++에서 참조인자로 받은 객체를 다른 객체를 바꾸면 원본 참조또한 변하지만
Java는 참조 데이터도 Call by value로 전달받아서 주소값만 받기때문에 메소드 내에서 매개변수를 다른 객체로 변수하여도 원본참조는 변하지않는다.
객체 변경없이 객체내부의 수정은 가능하다(그 객체의 주소를 가지고있으니까!)
8.반환
자바는 원시타입과 참조타입(주소만 반환함) 두종류를 반환할수있다.
즉 객체그 자체같이 무거운걸 반환하는건없다.
9.static 맴버 변수,메소드
개별 객체가 유지하고있는 변수나 클래스가 아니다.( this 사용이 불가능하다)
객체소유가 아니므로 클래스를 통하여 접근이 가능하다.
private static int count = 0; // 클래스 전체에서 공유되는 변수
10.상수 final
final로 변수를 선언하면 한번값 할당후 변경할수없게된다. (보통 변수이름 대문자)
이런 상수는 public static 을 포함하여 클래스 변수로 만드는것이 적절하다. (public static final)
(객체상수로 하고싶으면 말고)
private final int value; // final 변수
'Language > JAVA' 카테고리의 다른 글
[JAVA] 상속,구체화 (0) | 2024.10.14 |
---|---|
[JAVA] 자바 기초 (0) | 2024.10.14 |
[Java] 제네릭(Generic) (0) | 2024.09.11 |