Notice
Recent Posts
Recent Comments
Link
컴퓨터는 잘못이 없다..
[JAVA]클래스와 객체 본문
Contents
접기
#개념 정리
- 클래스
- 클래스는 객체를 정의하는 설계도
- 클래스 - 객체변수, 메소드로 이루어짐
- 객체, 인스턴스
- 객체(Object) 는 실체
- 인스턴스(instance)는 클래스와 객체의 관계, 클래스를 인스턴스화 하면 객체, 객체는 클래스의 인스턴스
- 객체는 new로 생성
- 생성자
- 객체가 생성될 때 자동으로 호출됨
- 클래스명과 이름이 동일
- 리턴타입 없음
- this, this()
- 객체 자신을 의미
- this()는 생성자를 의미
- 오버로딩(overloading)
- 한 클래스 내에서 같은 이름의 메소드를 여러 개 정의
- 오버로딩 조건 - 메소드와 이름이 같아야 하고 동시에 메개변수 개수 또는 타입이 달라야 함 (리턴 타입의 차이는 오버로딩이 되지 않음)
- 접근제어자
- 클래스의 변수나 메소드의 접근에 제한을 두는 키워드
- 접근 제어자 종류
- private : 해당 클래스에서만 접근 가능
- public : 어디서든 접근 가능
- default : 해당 패키지 내에서만 접근 가능 (아무것도 적지 않은게 default)
- protected : 해당 패키지 및 상속받은 클래스에서 접근 가능
- Static
- 변수나 메소드의 특성을 바꾸는 키워드
- Static 특징
- 메모리에 딱 한 번 할당된다.
- static 변수나 메소드는 공유되는 특징을 가진다.
- static 클래스 변수 - 해당 클래스의 각 객체들이 값을 공유
- static 클래스 메소드 - 객체를 생성하지 않아도 호출 가능
#소스코드
1. 클래스와 객체 생성 방법
// Java 프로그래밍 - 클래스와 객체_1
class Car {
String name; //객체 변수
String type; //객체 변수
public void printCarInfo() { //메소드, void는 반환값이 없음을 의미
System.out.println("=== Car Info ===");
System.out.println("name: " + name);
System.out.println("type: " + type);
}
public void move() {
System.out.println("이동!");
}
public void brake() {
System.out.println("정지!");
}
}
class Car2 {
String name;
String type;
// Car2() {} //default 생성자
Car2(String name, String type) { //생성자
this.name = name; //this는 객체 자신을 의미, 즉 왼쪽 this.name 은 객체 자신의 변수 오른쪽 name은 파라메터 name을 의미
this.type = type;
System.out.println("생성자 출력!");
}
public void printCarInfo() {
System.out.println("=== Car Info ===");
System.out.println("name: " + name);
System.out.println("type: " + type);
}
public void load() {
System.out.println("짐을 주세요!");
}
public void horn() {
System.out.println("빵빵!");
}
}
public class Main {
public static void main(String[] args) {
//Car 클래스 사용
Car myCar1 = new Car();
myCar1.name = "a";
myCar1.type = "suv";
myCar1.printCarInfo();
myCar1.move();
myCar1.brake();
//Car2 클래스 사용
Car2 myCar2 = new Car2("b", "sedan"); //생성자를 만들 때, 데이터를 입력받게 만들었으므로 데이터를 넘겨줘야함
myCar2.printCarInfo();
myCar2.load();
myCar2.horn();
}
}
2. 클래스와 객체 생성방법 예제
// Practice
// 다음 클래스 직접 만든 후 객체 생성
// 클래스명: Animal
// 특성: 이름, 무게, 분류
// 기능: 먹기, 잠자기, 걷기, 뛰기
class Animal {
String name;
Double weight;
String classification;
Animal(String name, Double weight, String classification) {
this.name = name;
this.weight = weight;
this.classification = classification;
}
public void printInfo() {
System.out.println("name = " + name);
System.out.println("weight = " + weight);
System.out.println("classification = " + classification);
}
public void eat() {
System.out.println("냠냠!");
}
public void sleep() {
System.out.println("쿨쿨!");
}
public void walk() {
System.out.println("걷기!");
}
public void run() {
System.out.println("뛰기!");
}
}
public class Practice {
public static void main(String[] args) {
// Test code
Animal animal1 = new Animal("강아지", 5.0, "포유류");
Animal animal2 = new Animal("구피", 0.01, "어류");
animal1.printInfo();
animal2.printInfo();
}
}
3. 오버로딩 구현, 접근제어자, static 변수와 static 메소드
// Java 프로그래밍 - 클래스와 객체_2
import car.Car2;
class Car {
String name;
String type;
Car(String name, String type) { //생성자
this.name = name;
this.type = type;
}
//오버로딩 구현 s
//1. 파라메터가 없는 출력해주는 메소드
public void printCarInfo() {
System.out.println("=== Car Info ===");
System.out.println("name: " + name);
System.out.println("type: " + type);
}
//2. 날짜를 파라메터로 받아서 출력해주는 메소드
public void printCarInfo(String date) {
printCarInfo();
System.out.println("date: " + date);
}
//3. 숫자를 파라메터로 받아서 출력해주는 메소드
public void printCarInfo(int number) {
printCarInfo();
System.out.println("number: " + number);
}
//4. 날짜와 숫자를 파라메터로 받아서 출력해주는 메소드
public void printCarInfo(String date, int number) {
printCarInfo();
System.out.println("date: " + date);
System.out.println("number: " + number);
}
//오버로딩 구현 e
}
class Car3 {
static String name = "None"; //static변수 -> 객체가 만들어지기 전부터 메모리에 자동으로 변수가 생성됨
String type;
Car3(String name, String type) {
this.name = name;
this.type = type;
}
public void printCarInfo() {
System.out.println("=== Car Info ===");
System.out.println("name: " + name);
System.out.println("type: " + type);
}
public static void getName() { //static함수 -> 객체가 만들어지기 전부터 자동으로 함수가 생성됨, 당연히 staic메소드에서는 static변수만 사용가능
System.out.println("Car name: " + name);
// System.out.println("Car type: " + type);
}
}
public class Main {
public static void main(String[] args) {
Car myCar1 = new Car("a", "sedan");
myCar1.printCarInfo();
// 1. 오버로딩
myCar1.printCarInfo("2022");
myCar1.printCarInfo(1);
myCar1.printCarInfo("2022", 1);
// 2. 접근 제어자
System.out.println("=== 접근 제어자 ===");
Car2 myCar2 = new Car2("a", "b", "c", "d", "e", "f", "g"); //다른 패키지에 있는 클래스를 객체로 생성
System.out.println("name1: " + myCar2.name1);
System.out.println("name2: " + myCar2.name2);
System.out.println("name3: " + myCar2.name3);
System.out.println("name4: " + myCar2.name4);
// System.out.println("private name5: " + myCar2.name5); //접근 불가
// System.out.println("protected name6: " + myCar2.name6); //접근 불가
// System.out.println("default name7: " + myCar2.name7); //접근 불가
// 3. Static
System.out.println("=== Static ===");
Car3.getName(); //static함수는 클래스명을 통해서 메소드를 호출할 수 있다.
Car3 myCar3_1 = new Car3("a", "sedan");
Car3 myCar3_2 = new Car3("b", "suv");
Car3 myCar3_3 = new Car3("c", "rv");
//name은 모두 c로 출력된다. 왜 그럴까?
//static변수는 객체끼리 이 변수를 공유한다.
//따라서, static 특성때문에 다른 객체에서 static변수에 값을 변경하게 되면 가장 마지막에 변경된 값으로 저장된다.
myCar3_1.printCarInfo();
myCar3_2.printCarInfo();
myCar3_3.printCarInfo();
Car3.getName();
}
}
4. 오버로딩 구현, 접근제어자, static 변수와 static 메소드 예제
// Practice
// 오버로딩
class Calculator {
public int sum(int a, int b) {
return a + b;
}
public double sum(double a, double b) {
return a + b;
}
public double sum(String a, String b) {
return Double.parseDouble(a) + Double.parseDouble(b);
}
public int sum(int a, int b, int c) {
return a + b + c;
}
}
public class Practice {
public static void main(String[] args) {
// Test code
Calculator c = new Calculator();
System.out.println(c.sum(1, 2));
System.out.println(c.sum(1.0, 2.0));
System.out.println(c.sum("1", "2"));
System.out.println(c.sum(1, 2, 3));
}
}
'공부 > JAVA' 카테고리의 다른 글
[JAVA]상속 (0) | 2024.04.10 |
---|---|
[JAVA]다차원배열 (0) | 2024.04.07 |
[JAVA]반복문 (1) | 2024.04.07 |
Comments