본문 바로가기

전체 글112

[JAVA] 상속 - 메소드 오버라이딩, 다형성 ◆ 메소드 오버라이딩 (method overriding) 일반적으로 상속 관계에서 부모 클래스의 메소드를 자식 클래스에서 조건 없이 사용 가능합니다. 그런데 자식 클래스에서 부모 클래스의 메소드를 재정의해서 사용할 수도 있는데, 이를 메소드 오버라이딩(method overriding)이라고 합니다. 메소드 오버로딩(method overloading : 이름은 같으나 매개변수가 다른 함수를 여러번 정의)과는 다른 개념입니다. 메소드 오버라이딩을 사용하기 위해서 우선 상속이 전제되어야 합니다. 그리고 부모 클래스에서 선언된 형식 그대로 자식 클래스에서 선언되어야 합니다. 즉, 메소드 이름, 리턴타입, 매개변수, 접근지정자 등이 동일해야 합니다. (더 작은 타입의 리턴타입과 더 넓은 범위의 접근지정자로 재정의.. 2022. 5. 27.
[JAVA] 상속 (Inheritance) 부모가 자식에게 물려주듯, 객체들 간 관계에서 부모 클래스(상위 클래스)가 자식 클래스(하위 클래스)에 클래스의 멤버를 물려주는 관계가 있는데, 이를 상속(Inheritance)이라고 합니다. 다음과 같은 형식으로 상속을 표현합니다. public class 자식클래스 extends 부모클래스 { } 상속이 적용되기 위해서는 객체들 간 is a 관계가 성립해야 합니다. 또한, 자바는 단일 상속만 지원하므로 extends 뒤에 부모클래스는 한 개만 올 수 있습니다. 이렇게 상속 관계를 표현해 주면 부모 클래스의 멤버(인스턴스 변수, 메소드)를 자식 클래스가 선언 없이 사용할 수 있게 됩니다. 가장 상위에 있는 최상위 클래스는 Object 클래스입니다. 모든 클래스는 Object 클래스를 묵시적으로 상속받습니.. 2022. 5. 26.
[JAVA] 클래스들의 관계 - has a 관계, is a 관계 ◆ has a 관계 한 객체와 다른 객체가 포함관계인 경우 has a 관계에 있다고 할 수 있습니다. 하나의 클래스 안에 다른 클래스가 인스턴스 변수로 선언된 경우입니다. 예를 들어 자동차 객체는 엔진 객체, 바퀴 객체와 같은 객체들로 구성되어 있습니다. 자동차 has a 엔진, 자동차 has a 바퀴 자동차 클래스 안에 엔진 클래스가 포함되어 있는 경우를 표현해 보겠습니다. public class Engine { String sn; //시리얼넘버 String year; //생산연도 public Engine() {} public Engine(String sn, String year) { super(); this.sn = sn; this.year = year; } public String getSn() {.. 2022. 5. 26.
[JAVA] 싱글톤 디자인 패턴 (Singleton Design Pattern) 싱글톤 디자인 패턴(Singleton Design Pattern)은 단 하나의 인스턴스만 생성하고자 할 때 사용하는 디자인 패턴입니다. 예를 들어 은행에서 계좌를 관리하는 프로그램을 만든다고 생각해 봅니다. 이때 계좌는 사용자마다 각각 존재해야 하지만, 이 계좌들을 관리하는 은행 객체는 단 하나만 있으면 됩니다. 이때 은행 객체를 단 하나만 생성하도록 제약을 걸 때 사용할 수 있는 것이 싱글톤 디자인 패턴입니다. 싱글톤 디자인 패턴을 적용하는 방법은 다음과 같습니다. (1) private 생성자 외부에서 객체를 생성하지 못하도록 생성자의 접근제한자를 private으로 지정합니다. private 접근제한자는 같은 클래스에서만 접근을 허용합니다. (2) static 키워드 이용, 객체 생성 단 하나의 객체는.. 2022. 5. 25.
[JAVA] 객체와 클래스 - static 키워드 static 키워드는 클래스, 변수, 메소드의 지정자로 사용할 수 있습니다. 지금까지 main 함수를 만들 때 항상 보았던 static 키워드입니다. 자바 프로그램은 일반적으로 다음과 같은 과정을 거쳐서 결과값이 출력됩니다. 클래스가 로딩될 때 static 키워드를 사용한 static 변수와 메소드가 메모리에 자동으로 로딩됩니다. 이렇게 미리 만들어진 여러 static 메소드들 중에서 시작점 기능을 하는 main 메소드가 실행된 후, 필요에 따라 객체를 생성하여 인스턴스 변수와 메소드를 메모리에 로딩하고, 메소드를 호출하면 메소드 안에서 선언된 로컬변수가 생성됩니다. static 변수와 메소드는 프로그램이 실행될 때 단 한 번 생성되고 프로그램이 종료될 때 삭제됩니다. 프로그램이 실행될 때 자동으로 로딩.. 2022. 5. 25.
[JAVA] call by value 와 call by reference 메소드를 호출해서 특정 인자를 전달할 때 자바는 call by value 방식으로 전달됩니다. 즉, 값 복사를 통해서 인자가 전달됩니다. 그런데 이때 기본형 데이터인 경우와 참조형 데이터인 경우 각각 인자로 전달되는 값이 달라집니다. ◆ 기본형 데이터 - call by value 값에 의한 호출 기본형 데이터는 call by value 방식으로 값이 전달됩니다. 즉, 메소드를 호출해서 특정 값을 전달할 때 변수에 저장된 실제 데이터 값을 복사하여 전달합니다. 다음의 예시를 살펴보겠습니다. public class Test { private static void change(int x) {//xxx변수 값을 x(매개변수)가 받음 System.out.println("in change 함수 x= "+ x); x.. 2022. 5. 24.