티스토리 뷰
728x90
반응형
Class란?
- 객체지향 프로그래밍에서 로직과 데이터를 묶어둔 하나의 단위를 클래스라고 하며 현실 세계의 사물을 표현하기 위한 일종의 틀이라고 할 수 있습니다.
- 쉽게 표현하자면 비행기가 하나의 물건이고 이 비행기의 상태와 행동을 구체화하는 프로그래밍 방식이 객체지향 프로그래밍입니다.
- 자바에서 클래스란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용됩니다.
- 클래스는 객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메서드(method)로 구성됩니다.
인스턴스란?
- 자바에서 클래스를 사용하기 위해서는 해당 클래스 타입의 객체(Object)를 선언해야 합니다.
- 이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 합니다. 그리고 이렇게 선언된 해당 클래스 타입의 객체를 인스턴스라고 합니다.
- 하나의 클래스는 여러개의 인스턴스를 생성할 수 있습니다.
- 여러개의 인스턴스는 독립된 메모리 공간에 자신만의 필드를 가질 수 있습니다.
- 하나의 클래스로부터 파생된 인스턴스들은 해당 클래스의 메서드를 공유할 수 있습니다.
메서드란?
- 어떠한 특정 작업을 수행하기 위한 명령문의 집합이라고 할 수 있습니다.
- 메서드를 활용하면 중복되는 코드를 방지하고 모듈화를 통해 코드의 가독성을 높일 수 있습니다. 또한 기능의 변경이 필요한 경우 하나의 메서드만 수정하면 되므로 유지보수에 용이합니다.
접근제어자 반환타입 메서드이름(매개변수) {
// 로직
}
public int speed(int speed){
return speed;
}
메서드 오버로딩
- 반환 타입과 이름은 같게, 파라미터 유형과 갯수를 다르게 하여 사용할 수 있습니다.
- static 메서드를 오버로딩할 수 있습니다.
- 컴파일 시점에 동작합니다 -> 컴파일 타임 다형성
public class Car {
int add(int x, int y){
return x + y;
}
int add(Long x, Long y){
return (int) (x + y);
}
}
메서드 오버라이딩
- 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의하여 사용합니다.
- static 메서드는 재정의 할 수 없습니다. (static 메서드는 컴파일 시점에 메모리영역에 할당되기 때문입니다.)
- 런타임 시점에 동작합니다. -> 런타임 다형성
public class Car {
private int speed;
public void go() {
System.out.println("전진합니다.");
}
public void back() {
System.out.println("후진합니다.");
}
public int speed() {
return speed;
}
public static void isStaticMethod(){
System.out.println("static 메서드");
}
}
public class SuperCar extends Car {
@Override
public void go() {
System.out.println("슈퍼카는 전진합니다.");
}
@Override
public void back() {
System.out.println("슈퍼카는 후진합니다.");
}
@Override
public int speed() {
return 200;
}
}
public class CarExample {
public static void main(String[] args) {
SuperCar superCar = new SuperCar();
superCar.go(); // 슈퍼카는 전진합니다.
superCar.back(); // 슈퍼카는 후진합니다.
System.out.println(superCar.speed()); // 200
}
}
생성자란?
- 생성자는 new 키워드와 같이 사용되며 클래스로부터 객체를 생성할 때 호출되어 객체의 초기화를 담당합니다.
- 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되아야 할 작업을 위해서도 사용됩니다.
- 생성자의 특징
- 생성자는 반환값이 없지만 반환 타입을 void로 선언하지 않습니다.
- 생성자는 초기화를 위한 데이터를 인수로 전달 받을 수 있습니다.
- 하나의 클래스가 여러개의 생성자를 가질수 있습니다.(생성자 오버로딩)
- 생성자는 클래스의 이름과 같아야 하므로 오버라이딩은 불가능합니다.
- 생성자의 종류
- 기본 생성자 - 클래스 내부에 선언된 생성자가 없는 경우 객체 생성 시 컴파일러가 자동으로 추가해주는 생성자
- 묵시적 생성자 - 파라미터 값을 가지지 않는 생성자
- 명시적 생성자 - 파라미터 값을 가지는 생성자
public class Car {
private String modelName;
private String color;
private int speed;
// 기본 생성자
// 기본 생성자를 따로 선언하지 않고 오버로딩된 생성자가 있는경우
// 컴파일러가 따로 만들어 주지 않습니다.
public Car() {}
public Car(String modelName) {
this.modelName = modelName;
}
public Car(String modelName, String color) {
this.modelName = modelName;
this.color = color;
}
public Car(String modelName, String color, int speed) {
this.modelName = modelName;
this.color = color;
this.speed = speed;
}
}
this 키워드란?
this 참조 변수
- this 참조 변수는 인스턴스가 바로 자기 자신을 참조하는데 사용하는 변수입니다.
- 사용 방법
- 지역 변수와 이름이 같은 멤버 변수에 접근하는 경우
- 인스턴스 자신의 주소를 반환하는 경우
- 생성자에서 다른 생성자를 호츨하는 경우 -> this() 메서드
public class Car {
private String modelName;
// 멤버 변수에 접근하는 경우
public Car(String modelName) {
this.modelName = modelName;
}
// 자신의 주소를 반환하는 경우
public Car getSelfReference(){
return this;
}
}
this() 메서드
- this() 메서드는 생성자 내부에서만 사용할 수 있으며, 같은 클래스의 다른 생성자를 호출하는 경우 사용합니다.
- this() 메서드에 매개변수를 전달하면 생성자 중에서 매개변수의 리스트가 일치하는 다른 생성자를 찾아 호출해줍니다.
- 한 생성자에서 다른 생성자를 호출하는 경우 반드시 해당 생성자의 첫 줄에서만 호출할 수 있습니다.
public class Car {
private String modelName;
private String color;
private int speed;
// 기본 생성자
public Car() {
this("나도 타고 싶다 벤츠", "black");
}
public Car(String modelName) {
this.modelName = modelName;
}
public Car(String modelName, String color) {
this.modelName = modelName;
this.color = color;
}
public Car(String modelName, String color, int speed) {
this.modelName = modelName;
this.color = color;
this.speed = speed;
}
...getter
}
public class CarExample {
public static void main(String[] args) {
Car car = new Car();
System.out.println(car.getModelName()); // 나도 타고 싶다 벤츠
System.out.println(car.getColor()); // black
}
}
728x90
반응형
'JAVA > JAVA기본' 카테고리의 다른 글
JAVA - 다이나믹 메소드 디스패치란? (0) | 2022.01.11 |
---|---|
JAVA - 상속이란?(feat.extends, super) (0) | 2022.01.11 |
JAVA - Queue이란? 그리고 구현 (0) | 2022.01.01 |
JAVA - Stack이란? 그리고 구현 (0) | 2021.12.31 |
JAVA - LinkedList란? 그리고 구현 (0) | 2021.12.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 레이어드 아키텍처란
- 서비스 기반 아키텍처
- redis sorted set으로 대기열 구현
- spring boot excel download oom
- pipe and filter architecture
- java userThread와 DaemonThread
- transactional outbox pattern spring boot
- spring boot redisson sorted set
- spring boot 엑셀 다운로드
- @ControllerAdvice
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot redis 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링부트
- polling publisher spring boot
- redis sorted set
- spring boot redisson destributed lock
- pipeline architecture
- redis 대기열 구현
- 자바 백엔드 개발자 추천 도서
- space based architecture
- java ThreadLocal
- transactional outbox pattern
- 람다 표현식
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot redisson 분산락 구현
- 공간 기반 아키텍처
- spring boot poi excel download
- service based architecture
- microkernel architecture
- spring boot excel download paging
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함