클래스, 메서드, 생성자
클래스 → 속성(멤버변수)과 기능(메서드)으로 구성되어 있으며, 객체를 생성하기 위한 틀
객체 → 클래스를 기반으로 만들어진 실제
인스턴스 → 클래스로부터 만들어진 객체
클래스변수, 인스턴스변수, 지역변수
클래스 내에 선언된 변수는 클래스 영역 내에 선언된 멤버 변수, 그 밖의 영역에서 선언된 지역변수가 있다. 클래스 영역 내의 변수인 멤버 변수는 다시 클래스 변수, 인스턴스 변수로 나눌 수 있다.
- 클래스 변수
:: 클래스 변수는 선언된 변수 앞에 static 키워드를 붙임으로써 선언할 수 있으며, 모든 인스턴스에서 저장공간을 공유한다. 클래스에서 모든 인스턴스들이 공통된 속성을 가져야 하는 경우 클래스 변수를 사용할 수 있다. 클래스가 메모리에 올라가는 시점에 생성되며, 별도의 인스턴스 없이도 클래스명.클래스변수 형식으로사용한다.
- 인스턴스 변수
:: 인스턴스 변수는 클래스 영역 내의 클래스 변수를 제외한 모든 변수이며, 각 인스턴스별로 별도의 저장공간을 가진다. 인스턴스마다 고유한 속성값을 가져야 하는 경우 사용할 수 있다. 인스턴스의 생성 시점에 선언되고 초기화되며, 인스턴스를 통해서만 사용할 수 있다.
- 지역변수
:: 멤버변수 외의 모든 변수를 지역변수라고 하며, 일반적으로 메서드 내에서 선언되어 선언된 메서드 내에서만 유효하다. for문이나 while 문과 같은 블록 내에서 선언된 지역변수의 경우, 선언된 블록 내에서만 사용이 가능하다.
클래스, 인스턴스, 멤버변수 예제
class Phone { // Phone 이라는 클래스
String model; // 멤버 변수, 메서드 등이 포함될 수 있음
String color; // 변수, 메서드 등의 요소들 포괄하여 멤버라고 함
int price;
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone(); // galaxy 라는 인스턴스 -> 참조변수이므로 객체의 주소를 담고있음
galaxy.model = "Galaxy10";
galaxy.color = "Black";
galaxy.price = 100;
Phone iphone =new Phone();
iphone.model = "iPhoneX";
iphone.color = "Black";
iphone.price = 200;
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
메서드(method)
:: 메서드 = 함수와 같다고 이해
메서드 예제
class Calculation{
int adddd(int x, int y){
return x+y;
}
int subtract(int x, int y){
return x-y;
}
}
public class Main {
public static void main(String[] args) {
// write your code here
Calculation calculation = new Calculation();
int a = 2;
int b = 3;
int res = calculation.adddd(a, b);
System.out.println(res);
}
}
static 메서드와 인스턴스 메서드
static 메서드
:: 클래스 변수와 마찬가지로 인스턴스와 관계없이 호출할 수 있는 메서드
→ 인스턴스를 생성하지 않고 클래스 이름으로 호출할 수 있음
:: static 메서드는 인스턴스 변수에 접근할 수 없음 → 인스턴스와 상관없이 호출할 수 있기 때문
:: static 메서드는 상속되거나 오버라이딩 되지 않음
:: 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려
→ 메서드 호출시간이 짧아지므로 성능 향상
:: static 메서드에서는 this 키워드를 사용할 수 없음
why?→ static 메서드는 객체 생성과 관계없이 클래스 이름만으로 호출하기 때문에 객체 자신을 가리키는 키워드인 this 는 사용할 수 없음
인스턴스 메서드
:: 인스턴스 변수와 인스턴스 메서드를 사용하여 그와 관련된 작업을 하는 메서드
생성자(constructor)
:: 클래스에 기본적으로 내장된, 멤버변수 초기화 메서드 (new와 함께 실행)
(생성자를 만들지 않아도, 객체 내에 빈 생성자를 자동으로 만들어 놓음 )
:: 생성자를 정의할 때는 항상 클래스 이름으로 함
:: 클래스 내에서 파라미터와 함께 여러 생성자를 구현할 수 있으며, 파라미터의 종류, 개수에 따라 어떤 생성자가 호출될 것인지 결정됨(오버로딩)
오버로딩
:: 오버로딩이란? → 같은 이름의 메서드를 중복해서 정의하는 것
:: 같은 이름의 메서드일지라도 파라미터의 종류와 개수에 따라 적절한 원형을 호출할 수 있게 됨
→ 객체지향의 특징 중 다형성을 구현하는 방법 중 하나
→ 다형성 이란 :: 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
:: IntelliJ Tip: Alt + Insert 로 생성자, getter, setter 등 코드를 자동 생성할 수 있다.
생성자 예제
class Phone {
String model;
String color;
int price;
// Tip: Alt + Insert로 생성자, getter, setter 등 코드를 자동 생성할 수 있다
// public : 접근 제어자 :: 모든 클래스에서 접근 가능하도록 열어놓는다는 의미
public Phone(String model, String color, int price) {
this.model = model;
this.color = color;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
Phone galaxy = new Phone("galaxyX", "cyan", 1100000);
Phone iphone = new Phone("iphone14", "black", 1400000);
System.out.println("철수는 이번에 " + galaxy.model + galaxy.color + " + 색상을 " + galaxy.price + "만원에 샀다.");
System.out.println("영희는 이번에 " + iphone.model + iphone.color + " + 색상을 " + iphone.price + "만원에 샀다.");
}
}
this, this()
this
:: 객체 내에서 자신을 참조하는 데 사용되는 키워드. this 를 사용하면 클래스 내에서 현재 객체의 변수 또는 메서드를 참조할 수 있음
this()
:: 클래스 내에서 다른 생성자를 호출할 때 사용 → 코드의 재사용성을 높일 수 있음
:: 생성자 오버로딩에 주로(또는 생성자 오버로딩에만) 사용됨
:: 클래스 내에서 다른 생성자를 호출할 때 this()를 사용하지 않고 클래스명(); 과 같이 생성자를 호출하면 에러가 발생
인스턴스 멤버 변수의 기본값(default value)
:: 인스턴스 멤버 변수를 초기화하지 않았을 때의 기본값
→ 기본 자료형의 기본값은 0, 논리 자료형의 기본값은 false, 참조 자료형(string)의 기본값은
null(아무것도 없다)인 것을 확인
'Study' 카테고리의 다른 글
나는 Soolo 프로젝트 회고 (2) | 2023.07.05 |
---|---|
인텔리제이 한글 인코딩 오류(UTF-8) (0) | 2023.04.29 |
배열, String (0) | 2023.03.09 |
Java 기초문법 : 연산자 (0) | 2023.03.08 |
Java 기초 문법 : 변수, 자료형 (0) | 2023.03.08 |