본문 바로가기

Java/Basic

(15)
[Java] 다형성(polymorphism) 다형성이란? - 객체지향개념에서 다형성이란 '여러 가지 형태를 가질 수 있는 능력'을 의미하며, Java에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. - 조상 클래스의 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다. 클래스 Tv와 클래스 CaptionTv는 서로 상속관계에 있으며, 이 두 클래스의 인스턴스를 생성하고 사용하기 위해서는 다음과 같이 할 수 있다. - 생성된 인스턴스를 다루기 위해서, 인스턴스의 타입과 일치하는 타입의 참조변수만을 사용했다. Tv인스턴스를 다루기 위해서는 Tv의 타입의 참조변술르 사용하고, CaptionTv 인스턴스를 다루기 위해서는 CaptionTv타입의 참조변수를 사용했다. - ..
[Java] 오버라이딩(overriding) - 'override'의 사전적 의미는 '~위에 덮어쓰다(overwrite)'이다. - 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. - 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩한다. 오버라이딩의 조건 - 오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다. - 선언부가 서로 일치해야 한다. 다만 접근 제어자(access modifier)와 예외(exception)는 제한된 조건 하에서만 다르게 변경할 수 있다. 조상 클래스의 메서드를 자손 클래스에서 오버라이딩 할때 1. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경..
[Java] 상속(inheritance) 상속의 정의와 장점 - 상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. - 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. - 상속의 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다. - 자바에서 상속을 구현하는 방법은 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만하면 된다. - Childe 클래스와 Parent 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라 한다. - ..
[Java] 오버로딩(overloading) 오버로딩이란? - 오버로딩(overloading)의 사전적 의미는 '과적하다'. 즉, 많이 싣는 것을 뜻한다. - 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져아 한다. - 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다. - 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩(method overloading)' 또는 간단히 '오버로딩(overloading)'이라고 한다. - 보통 하나의 메서드 이름에 하나의 기능만을 구현해야하는데, 하나의 메서드 이름으로 여러 기능을 구현하기 때문에 붙여진 이름이..
[Java] 생성자(Constructor) 생성자란? - 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다. - 인스턴스 초기화란, 인스턴스 변수들을 초기화하는 것을 뜻한다. - 생성자 역시 메서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다. - 그렇다고해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지는 않고, 단지 아무것도 적지 않는다. - 생성자의 조건 + 생성자도 메서드이기 때문에 리턴값이 없다는 의미의 void를 붙여야 하지만, 모든 생성자가 리턴값이 없으므로 void를 생략을 할 수 있게 하였다. - 연산자 new 가 인스턴스를 생성하는 것이지 생성..
[Java] 클래스 메서드(satic메서드)와 인스턴스 메서드 - 변수와 마찬가지로 메서드 앞에 static이 붙어 있으면 클래스 메서드이고 static이 붙어있지 않으면 인스턴스 메서드이다. - 클래스 메서드도 클래스변수처럼, 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능하다. - 인스턴스 메서드는 객체를 생성해야만 호출할 수 있다. - 클래스는 '데이터(변수)'와 데이터에 관련된 메서드의 집합'이므로, 같은 클래스 내에 있는 메서드와 멤버변수는 아주 밀접한 관계가 있다. - 인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다. 그런데 인스턴스 변수는 인스턴스(객체)를 생성해야만 만들어지므로 인스턴스 메서드 역시 인스턴스를 생성해야만 호출할 수 있는 것..
[Java] 기본형 매개변수, 참조형 매개변수 + 참조형 반환타입 기본형 매개변수와 참조형 매개변수 - 자바에서는 메서드를 호출할 때 매개변수로 지정한 값을 메서드의 매개변수에 복사해서 넘겨준다. - 매개변수의 타입이 기본형(primitive type)일 때는 기본형 값이 복사되겠지만, 참조형(reference type)이면 인스턴스의 주소가 복사된다. - 메서드의 매개변수를 기본형으로 선언하면 단순히 저장된 값만 얻지만, 참조형으로 선언하면 값이 저장된 곳의 주소를 알 수 있기 때문에 값을 읽어 오는 것은 물론 값을 변경하는 것도 가능하다. 기본형 매개변수 변수의 값을 읽기만 할 수 있다. (read only) 참조형 매개변수 변수의 값을 읽고 변경할 수 있다. (read & write) example1) - change메서드에서 main메서드로부터 넘겨받은 d.x의..
[Java] JVM의 메모리 구조 응용 프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JMV은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다. 1) 메서드 영역(Method Area) - 프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 떄, 그 클래스의 클래스변수(class variable)도 이 영역에 함께 생성된다. 2) 힙(Heap) - 인스턴스가 생성되는 공간, 프로그램 실행 중 생성되는 인스턴스는 모두 이 곳에 생성된다. - 즉, 인스턴스 변수(intance variable)들이 생성되는 공간이다. 3) 호출 스택 (Call Stack 또는 Executio..
[Java] 메서드(Method) - method는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것이다. - 기본적으로 수학의 함수와 유사하며, 어떤 값을 입력하면 이 값으로 작업을 수행해서 결과를 반환한다. - 예를 들어 제곱근을 구하는 메서드 'Math.sqrt()'는 4.0을 입력하면, 2.0을 결과로 반환한다. - 수학의 함수와 달리 메서드는 입력값과 또는 출력값이 없을 수도 있으며, 심지어는 입력값과 출력값이 모두 없을 수도 있다. - 그저 메서드가 작어븡ㄹ 수행하는데 필요한 값만 넣고 원하는 결과를 얻으면 될 뿐, 메서드가 내부적으로 어떤 과정을 거쳐 결과를 만들어내는지 전혀 몰라도 된다. - 메서드에 넣을 값과 반환하는 결과만 알면 된다. 그래서 메서드를 내부가 보이지 않는 '블랙박스'라고도 한다. 메서드를 사용하는 이..
[Java] 변수(Variable) 선언위치에 따른 변수의 종류 - 변수는 클래스변수, 인스턴스변수, 지역변수 모두 3종류가 있다. - 변수의 종류를 결정짓는 중요한 요소는 '변수의 선언된 위치'이므로 변수의 종류를 파악하기 위해서는 변수가 어느 영역에 선언되어있는지 확인해야 한다. - 멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스 변수이다. 변수의 종류 선언위치 생성시기 클래스 변수 (class variable) 클래스 영역 클래스가 메모리에 올라갔을 때 인스턴스 변수 (intance variable) 인스턴스가 생성되었을 때 지역 변수 (local variable) 클래스 영역 이외의 영역 (메서드, 생성자, 초기화 블럭 내부) 변수 선언문이 수행 되었을..