package chapter2.clazz;
public class Person {
// 1. 속성 - 변수 선언으로 표현할 수 있습니다
String name;
int age;
String address;
// 2. 생성자
// Person() {}
// 1. 클래스와 이름이 같습니다.
// 2. 반환 타입이 존재하지 않습니다
// 3. 여러 개가 존재할 수 있습니다.
Person(String name, int age) {
this.name = name;
this.age = age;
}
// 3. 기능(메서트 부분)
int sum(int value1, int value2) {
int result = value1 + value2;
return result;
}
// 게터 - 속성을 가져오는 기능
String getName() {
return this.name;
}
// 세터 - 속성을 설정할 수 있는 기능
void setAddress(String address) {
this.address = address;
}
}
package chapter2.clazz;
public class Main {
public static void main(String[] args) {
// 객체 생성(인스턴스화)
/// --- personA ---;
/// - name = "gygim"
/// - age = 20;
/// - address = XXXX
Person personA = new Person("gygim", 20);
Person personB = new Person("Steve", 15);
// 속성에 직접 접근
// System.out.println("설정 전 personA 이름: " + personA.name);
// System.out.println("설정 전 personB 이름: " + personB.name);
// personA.name = "gygin";
// personB.name = "Steve";
// System.out.println("설정 후 personA 이름: " + personA.name);
// System.out.println("설정 후 personB 이름: " + personB.name);
// 기능 활용
int result1 = personA.sum(1, 2);
int result2 = personB.sum(2, 4);
System.out.println("result1 = " + result1);
System.out.println("result2 = " + result2);
// 게터 활용
String name = personA.getName();
System.out.println("name = " + name);
// 세터 활용
System.out.println("personA의 주소: " + personA.address);
personA.setAddress("서울");
System.out.println("personA의 주소: " + personA.address);
}
}
객체는 실제로 존재하는 것, 어떤 개념이나 논리 같은 것들도 객체가 될 수 있다
객체를 만드는 과정을 인스턴스화라고 표현하며 new라는 키워드를 사용한다
클래스 ㅡ 속성, 생성자, 기능(메서드) ㅡ 속생기
과제 실습
package chapter2.clazz;
public class Car {
// 1. 속성
String name;
String carMode1;
// 2. 생성자
public Car(String name, String carMode1) {
this.name = name;
this.carMode1 = carMode1;
}
// 3. 기능
public void drive() {
System.out.println(name + "[" + this.carMode1 + "]을(를) 주행합니다 출바알~");
}
public void accelerate() {
System.out.println(name + "[" + this.carMode1 + "]을(를) 가속합니다 부아아앙~");
}
}
package chapter2.clazz;
public class CarMain {
public static void main(String[] args) {
// 자동차 객체 생성
Car myCar = new Car("나의 자동차", "제네시스");
myCar.drive();
myCar.accelerate();
}
}
이렇게 순서를 볼 수 있게 해 주는데 엄청 좋다..... 정처기 공부할 때 알았으면 좋았을 텐데
🚩 레퍼클래스(기본형 참조형)
기본 자료형 (Primitive Type)
래퍼 클래스 (Wrapper Class)
`byte`
`Byte`
`short`
`Short`
`int`
`Integer`
`long`
`Long`
`float`
`Float`
`double`
`Double`
`char`
`Character`
`boolean`
`Boolean`
참조형
package chapter2.wrapper;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 기본형 변수
int a = 1;
System.out.println("a = " + a);
// 참조형 변수
Person personA = new Person();
System.out.println("personA = " + personA);
int[] arr = {1, 2, 3, 4, 5};
System.out.println("arr = " + arr);
// 래퍼클래스(기본형 변수를 감싸고 있는 클래스)
// 참조형 변수입니다.
Integer num = 100;
System.out.println("num = " + num);
String numStr = num.toString();
// 직접 만들 래퍼 클래스
CustomInteger myInteger = new CustomInteger(10);
String myStrInteger = myInteger.toString();
// 오토박싱 (기본형 -> 래퍼)
Integer num3 = 10;
// Integer num3 = Integer.valueOf(10);
// 오토 언박싱
int num4 = num3;
// int num4 = num.intValue();
}
}
래퍼클래스
기본형은 객체처럼 속성, 기능을 가질 수 없다. 하지만 객체는 기능을 제공할 수 있다
기본형을 감싼 객체를 만들어 기능을 제공하면 편리하게 데이터처리를 할 수 있다
오토박싱, 언박싱
'오토박싱' ㅡ 기본형 -> 래퍼형으로 변환하는 과정
'오토 언박싱' ㅡ 래퍼형 -> 기본형으로 변환하는 과정
🚩static - 클래스가 공유하는 공간
package chapter2.staticexample;
public class Person {
// 인스턴스 변수
String name;
// static 변수
static int population = 0;
Person() {
population++;
}
// 인스턴스 메서드
void printName() {
System.out.println("나의 이름은: " + this.name + "입니다.");
}
// static 메서드
static void printPopulation() {
System.out.println("현재 인구 수: " + population);
}
}
package chapter2.staticexample;
public class Main {
public static void main(String[] args) {
// static 변수, 메서드 활용
System.out.println("static 변수 활용: " + Person.population);
Person.printPopulation();
// 인스턴스 멤버 활용
Person p1 = new Person();
Person p2 = new Person();
// 인스턴스 변수 활용
p1.name = "gygim";
p2.name = "Steve";
// 인스턴스 메서드 활용
p1.printName();
p2.printName();
Person.printPopulation();
}
}
`static` 변수와 메모리는 프로그램이 종료될 때까지 메모리에 유지되기 때문에 너무 많이 남용하면 메모리 낭비가 됨
🚩 final -변하지 않는 값
package chapter2.finalexample;
public class Circle {
// 속성
final static double PI = 3.14159;
final double radius;
// 생성자
Circle(double radius) {
this.radius = radius;
}
// 기능
Circle changeRadius(double newRadius) {
return new Circle(newRadius);
}
}
package chapter2.finalexample;
public class Main {
public static void main(String[] args) {
// final 활용 방법
final int a = 1;
// a = 2;
System.out.println("a = " + a);
// 상수 활용 방법
System.out.println("상수 활용: " + Circle.PI);
// 불변 객체 활용
final Circle c1 = new Circle(2);
// 참조 변경을 막지만 내부 상태 변경은 막지 않음
// c1 = new Circle(5);
// c1.radius = 5;
System.out.println("c1 = " + c1);
// 불변 객체의 내부 상태가 변경이 필요한 경우
Circle c2 = new Circle(10); // 생성자
Circle c3 = c2.changeRadius(20); // 기능을 활용
}
}