1. 매개변수의 종류
-기본형 매개변수(값에 의한 전달): 기본 데이터 타입(int, double, boolean 등)에서 값을 복사하여 메서드에 전달한다. 메서드 내에서 매개변수 값을 변경해도 원본 값엔 영향이 없다.
-참조형 매개변수(참조에 의한 전달): 객체 타입(string, arraylist 등)을 전달할 때는 "값을 주소"가 전달된다. 메서드 내에서 객체의 상태를 변경하면 원래 객체에도 영향을 미친다. 반환 타입도 참조형이 될 수 있다.
2. 지역 변수와 지역 상수
-지역 변수: 메서드 내에서 선언된 변수. 해당 메서드 내에서만 사용 가능, 실행될때마다 독립적인 값을 저장하고 관리하게 된다. 내부에서 정의될 때 생성되어 메서드 종료 시 사라진다.
public void exampleMethod() {
int localVariable = 5; // 지역 변수
}
-지역 상수: final 키워드와 함께 선언된 지역 변수. 한 번 값을 할당하면 프로그램 실행 도중에는 절대 변경 불가능. 메서드 내에서 값이 변하지 않도록 보장하고자 할 때 사용. 반드시 초기값을 지정해야 한다.
public void exampleMethod() {
final int localConstant = 10; // 지역 상수
}
3. 생성자와 this
-생성자: 객체가 생성될 때 초기화 작업을 수행하는 메서드. 클래스 이름과 동일하며, 반환 타입이 없다. 생성자를 통해 객체의 초기 상태를 설정한다. new 연산자에 의해 객체가 생성되며, 생성자가 호출된다.
객체를 만들 때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화 할 수 있다.
ex) 만들어지는 자동차 마다 모델, 색상, 값이 다르다면 생성자를 사용해 필드의 값을 초기화.
반대로, 인스턴스마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋다.
ex) 자동차가 만들어질 때마다 기어의 상태를 'P'로 고정해야 한다면 초기값을 직접 대입하는 것이 좋다.
-기본 생성자: 선언할 때 괄호 안에 아무것도 넣지 않는 생성자. 모든 클래스는 반드시 생성자가 하나 이상 존재한다. 만약 클래스에 생성자를 하나도 선언하지 않았다면, 컴파일러는 기본 생성자를 바이트코드 파일에 자동으로 추가시켜준다. 따라서, 이러한 경우는 기본 생성자 생략이 가능하다. 반대로, 단 하나라도 생성자가 선언되어 있다면 컴파일러는 기본 생성자를 추가하지 않는다.
컴파일러에 의해 생성되는 기본 생성자는 해당 클래스의 접근 제어자(public, private...등)
public class Car {
private String model;
public Car(String model) { // 생성자
this.model = model;
}
}
-this: 현재 객체, 인스턴스 자신을 참조하는 키워드. 객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해, 주로 멤버 변수와 매개변수의 이름이 겹칠 때 이를 구분 하는 데 사용된다.
public class Car {
private String model;
public Car(String model) {
this.model = model; // this를 사용해 멤버 변수에 매개변수 할당
}
}
-this(): 인스턴스 자신의 생성자를 호출하는 키워드. 객체 내부 생성자 및 메서드에서 해당 객체의 생성자를 호출하기 위해 사용될 수 있다. 중복되는 코드를 줄여줄 수 있다.
4. 접근 제어자
-getter: 외부에서 객체의 private한 필드를 읽을 필요가 있을 때 사용하는 메서드
-setter: 외부에서 객체의 private한 필드를 저장/수정 할 필요가 있을 때 사용하는 메서드
-public: 모든 클래스에서 접근 가능
-protected: 같은 패키지와 상속받은 클래스에서 접근 가능
-default: (아무것도 명시하지 않은 경우) 같은 패키지 내에서 접근 가능
-private: 해당 클래스 내에서만 접근 가능
접근 제어자는 클래스 내부에 선언된 데이터를 보호하기 위해 사용된다. 유효한 값을 유지하도록, 함부로 변경하지 못하도록 접근을 제한하는 게 중요하다.
생성자에 접근 제어자를 사용함으로, 인스턴스의 생성을 제한할 수 있다. 일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다.
public class Example {
public int publicVar = 1; // 어디서든 접근 가능
protected int protectedVar = 2; // 같은 패키지와 자식 클래스에서 접근 가능
int defaultVar = 3; // 같은 패키지에서만 접근 가능
private int privateVar = 4; // 같은 클래스에서만 접근 가능
}
5. import와 package
-import: 다른 패키지에 있는 클래스를 현재 클래스에서 사용할 수 있도록 불러옴
-package: 클래스를 그룹화하는 개념. 관련 있는 클래스들을 묶어서 관리한다. 일반적으로 회사의 도메인 이름을 뒤집어서 패키지 이름을 짓는다.
6. 상속 관계와 포함 관계
-상속 관계(is -a): 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 관계. extends 키워드를 사용하며, 코드 재사용성과 확장성을 높이는 데 유용하다.
부모 클래스에 새로운 필드와 메서드가 추가되면, 자식 클래스는 이를 상속받아 사용 가능하다.
반대로 자식 클래스에 추가되면, 부모 클래스는 어떤 영향도 받지 않는다.
따라서, 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다.
public class Parent { }
public class Child extends Parent { } // Child는 Parent를 상속받음
-포함 관계: 클래스가 다른 클래스를 포함하는 관계. 보통 "has-a" 관계라고도 한다. 예를 들어, Car 클래스가 Engine 객체를 포함하는 경우, Car 는 Engine을 "가지고" 있는 관계다.
public class Engine { }
public class Car {
private Engine engine; // Car는 Engine을 포함함
}
7. 추상 클래스
-추상 클래스: abstract 키워드로 선언되며, 객체를 생성할 수 없는 클래스. 추상 클래스는 주로 공통 기능을 정의하고, 자식 클래스가 이를 상속받아 구현하도록 강제한다.
추상 클래스는 추상 메서드를 포함할 수 있으며, 추상 메서드가 없어도 추상 클래스로 선언 가능하다.
여러 개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있다.
public abstract class Animal {
public abstract void sound(); // 추상 메서드
}
public class Dog extends Animal {
public void sound() {
System.out.println("Bark");
}
}
8. default와 static
-default(접근 제어자): 접근 제어자를 명시하지 않았을 때 적용되는 접근 수준. 추상 메서드의 기본적인 구현을 제공한다. 같은 패키지 내에서 접근 가능하다(public임, 생략 가능). 메서드 앞에 default 키워드를 붙이며, {}가 존재해야 한다.
-static: 클래스 레벨에서 메서드나 변수를 정의할 때 사용된다. static으로 선언된 변수와 메서드는 클래스 자체에 속하게 되어, 객체를 생성하지 않고도 사용할 수 있다.
public class MathUtil {
public static int add(int a, int b) {
return a + b;
}
}
// static 메서드 호출
int result = MathUtil.add(5, 3);
static의 특징:
-모든 객체가 동일한 static 변수와 메서드를 공유한다.
-객체 생성 없이 클래스 이름을 통해 접근 가능하다.
-주로 유틸리티 메서드나 상수에 사용된다.
'웃음기 있는 글들 > JAVA' 카테고리의 다른 글
JAVA - 디자인 패턴 정리 (4) | 2024.11.12 |
---|---|
객체 지향 실습 - 게임에 적용 (5) | 2024.11.09 |
JAVA - 용어 정리<1> (0) | 2024.11.09 |