배열의 복사
배열은 주소값을 복사하므로 copy 변수가 original의 값을 복사하는게 아니라 주소를 복사해와서
원본 값이 변경되면 복사된값도 변경됨(복사당시에는 1,2,3이었지만 변경후 값인 99,2,3을 가져오게 됨)
이러한 문제를 해결하려면 깊은 복사를 사용해야 함.
메서드 오버로딩 (Method Overloading)
같은 클래스에서 이름이 같은 메서드를 여러 개 정의하는 것.
메서드 오버라이딩(Method Overriding)
부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하는 것.
오버로딩과 오버라이딩의 차이
특징 | 오버로딩 (Overloading) | 오버라이딩 (Overriding) |
목적 | 같은 이름의 메서드를 다양한 방식으로 호출 | 부모 메서드를 자식 클래스에서 재정의 |
클래스 관계 | 같은 클래스 | 부모-자식 클래스 |
메서드 이름 | 동일 | 동일 |
매개변수 | 다름 | 동일 |
리턴 타입 | 관계없음 | 부모 메서드와 동일 |
접근 제한자 | 제한 없음 | 부모 메서드보다 좁게 설정 불가 |
다형성과 관련성 | 무관 | 다형성을 구현하기 위해 사용 |
결론
- 오버로딩: 같은 이름의 메서드를 매개변수 다르게 정의하여 편의성 제공.
- 오버라이딩: 부모의 메서드를 재정의하여 다형성과 확장성 구현.
제한 없는 아규먼트(Argument)
리턴타입 메서드이름(타입... 변수명) { // 가변 인자를 배열처럼 처리 가능 } |
내부적으로 가변 인자는 배열로 처리됨.
가변 인자의 특징
- 배열처럼 동작:
- 가변 인자는 내부적으로 배열로 처리되므로, 배열과 동일하게 순회 가능.
- 0개 이상의 값 전달 가능:
- 전달된 값이 없을 경우 길이가 0인 배열로 처리됨.
- 하나만 선언 가능:
- 가변 인자는 매개변수 중 가장 마지막에만 선언 가능.
void method(int fixed, String... varargs) { } // 가능void method(String... varargs, int fixed) { } // 오류 - 다른 매개변수와 혼합 가능:
- 고정된 매개변수와 함께 사용 가능.
객체지향
1. 클래스(Class): 설계도
- 정의: 클래스는 객체를 만들기 위한 설계도.
- 클래스에는 객체의 속성(필드)과 동작(메서드)이 정의되어 있음.
비유 : 가장 유명한 자동차
- 클래스는 자동차의 설계도:
- 설계도에는 자동차가 어떻게 만들어질지, 어떤 부품을 가지고 있는지 정의되어 있음.
- 하지만 설계도만으로는 자동차가 실제로 존재하지 않음.
2. 객체(Object): 실체화된 클래스
- 정의: 객체는 클래스를 기반으로 실제 메모리에 생성된 실체(Instance).
- 클래스에 정의된 속성과 동작을 가진 구체적인 존재.
비유
- 객체는 설계도로 만든 실제 자동차:
- 설계도(클래스)를 따라 만들어진 각각의 자동차가 객체.
- 동일한 설계도를 사용해 여러 대의 자동차(객체)를 만들 수 있음.
- 예: 빨간색 자동차, 파란색 자동차 등.
3. 개체(Entity): 객체의 존재
- 정의: 개체(Entity)는 현실 세계에서 특정 고유성을 가진 존재.
- 객체(Object)와 개체(Entity)는 프로그래밍에서 거의 같은 의미로 사용됨.
비유
- 개체는 특정 자동차의 고유한 실체:
- 빨간색 BMW 자동차 하나가 개체.
- 자동차는 객체(Object)일 수 있지만, 특정 자동차는 개체(Entity).
4. 클래스, 객체, 개체의 관계
- 클래스는 설계도.
- 클래스를 기반으로 객체를 생성.
- 개체는 객체 중 특정 고유성을 가진 존재.
요약
- 클래스:
- 객체를 만드는 설계도.
- 객체:
- 클래스를 기반으로 생성된 실체.
- 개체:
- 객체 중 고유한 속성을 가진 특정 존재.
비유:
- 클래스: 자동차 설계도.
- 객체: 설계도로 만든 여러 자동차.
- 개체: 그중 고유성을 가진 하나의 자동차.
자바로 구현한 계산기