자바 공부 기록 2회독(2) - 2024.1.17

동준·2024년 1월 17일
0

개인공부(자바)

목록 보기
4/16

2. 클래스

1) 객체 지향 프로그래밍

(1) 기본 개념

객체 = 속성동작으로 분류

  • 속성 : 특정할 수 있는 개체(이름, 나이 등등...) -> 필드
  • 동작 : 영어 구문의 동사 같은(달리다, 먹다 등등...) -> 메소드

객체와 객체 간의 상호작용은 메소드가 담당

  • 메소드는 매개변수를 요구할 수도 있다.
  • 메소드의 리턴값은 변수에 대입 저장 가능.

객체 간의 관계

  • 사용 관계 : 자동차사람
  • 집합 관계 : 자동차엔진, 타이어, 핸들
  • 상속 관계 : 자동차기계

객체 지향 프로그래밍의 특징

  • 캡슐화 : 접근 제어자
  • 상속 : 코드 재사용성 및 유지 보수시간 향상
  • 다형성 : 타이어의 규격 -> 한국타이어, 금호타이어... (인터페이스)

(2) 디자인 패턴

추가로 공부할 부분, 대신 MVC 패턴이나 팩토리 메서드 패턴, 싱글톤 패턴 등은 공부하다가 필요시 기재.

2) 클래스 개념

클래스 선언 후, 객체를 생성하려면 new 연산자와 생성자를 사용한다.

ClassExample classExample = new ClassExample();

이때, 스택 영역에는 변수가 바라보는 객체의 주소가 담기고, 힙 영역에는 생성된 객체가 담기게 된다.

(1) 생성자 오버로딩

코드 중복이 발생할 수 있는 생성자 오버로딩 중복 사례

Car(String model) {
	this.model = model;
    this.color = "은색";
    this.maxSpeed = 250;
}

Car(String model, String color) {
	this.model = model;
    this.color = color;
    this.maxSpeed = 250;
}

Car(String model, String color, int maxSpeed) {
	this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
}

// 무수한 생성자 오버로딩....

이것을 해결할 수 있는 this()를 통한 생성자 체이닝

Car(String model) {
	this(model, "은색", 250); // 맨 밑의 생성자 호출
}

Car(String model, String color) {
	this(model, color, 250); // 맨 밑의 생성자 호출
}

Car(String model, String color, int maxSpeed) {
	this.model = model;
    this.color = color;
    this.maxSpeed = maxSpeed;
} // 공통 초기화 코드

// 생성자 체이닝

(2) 오버로딩

메소드 오버로딩의 조건

  • 메소드 이름은 동일해야 한다.
  • 리턴 타입은 동일하든, 다르든 상관 없다.
  • 매개변수의 타입, 개수, 순서가 달라야 한다.

대표적인 오버로딩 예시는 System.out.println()

System.out.println("오버로딩");
System.out.println(1);
System.out.println(1.1);

(3) 인스턴스와 this 키워드

인스턴스 멤버 == 객체에 소속된 멤버 (필드, 메소드)

객체에 소속된이라는 말이 객체에 포함됐다는 말은 아니다.
만약 객체마다 메소드를 저장한다면 생성되는 객체마다 중복해서 저장되므로 메모리 효율이 떨어져서 메소드 코드는 메소드 영역에 두면서 공유하여 사용하고, 객체 없이 사용하지 못하도록 제한을 건다.

this를 주로 쓰는 경우는, 대표적으로 생성자와 메소드의 매개변수명이 인스턴스 멤버인 필드명과 같을 때 사용한다.

(4) 정적 멤버

정적 멤버는 메소드 영역의 클래스에 고정적으로 위치하는 멤버다. 그래서 객체 생성 없이 클래스를 통해서 바로 사용이 가능한 것.

보통은 객체마다 가지고 있을 필요성이 없는 공용적인 내용을 정적 필드와 정적 메소드로 선언한다.

public class Calculator {
	String color; // 계산기마다 색이 다를 수 있다.
    static doublc pi = 3.14159; // 계산기에 쓰이는 원주율 값은 동일
    
    static double calculateCircle(double radius) {
    	return Math.pow(radius, 2) * pi
    } // 계산기에 쓰이는 원 넓이 구하는 메소드는 동일   
}

(5) final 키워드

final 키워드는, 최종 필드 선언상수 선언에 쓰인다.

final 타입 필드 [=초기값]; 
// 프로그램 실행 중에 수정 불가

static final 타입 상수 [=초기값]; 
// 초기값이 너무 복잡하면 정적 블록을 사용할 것
profile
scientia est potentia / 벨로그 이사 예정...

0개의 댓글