유용한 클래스(2) - Random class
·
자바/유용한 클래스들
1. Random class - 난수를 얻기 위해서는 Math.random()을 통해 받을 수 있지만, 아래의 코드처럼 Random class를 사용해도 얻을 수 있다. - 차이점은 아래와 같다. - 또한 Random class는 종자값(seed)을 설정할 수 있는데, 만약 같은 종자값을 가진 객체들이 생성된다면, 똑같은 난수의 값을 가질 것이다. - 그러나 종자값을 설정하지 않고 객체를 생성하면, 종자값은 System.currentTimeMillis()로 하기 때문에 다른 난수의 값을 가질 것이다. - 아래의 코드를 보고 종자값을 이해하자. 1-1. Random class의 예제(1) : 1~10 사이의 100개의 난수를 발생시키고 각 숫자의 빈도를 파악하는 예제이다. 1-2. Random class의..
[3] 두 개의 이미지 주고 받기.
·
안드로이드 with 자바/자잘한 문제들
1. 구현해야 할 것 2. java 소스코드 ( 아래는 MainActivity.java의 코드이다. ) public class MainActivity extends AppCompatActivity { ImageView img1,img2; Button btn1, btn2; BitmapDrawable bd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img1 = findViewById(R.id.img1); img2 = findViewById(R.id.img2); btn1 = findViewById(R.id..
[4] SMS 입력 화면 만들고 글자의 수 표시하기
·
안드로이드 with 자바/자잘한 문제들
1. 구현해야 할 것 2. 제약조건 3. java 소스코드 ( 아래는 MainActivity.java의 소스코드이다. ) public class MainActivity extends AppCompatActivity { EditText ed1; TextView tv1; Button btn1, btn2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed1 = findViewById(R.id.ed1); tv1 = findViewById(R.id.tv1); btn1 = findViewById(R.id.btn1)..
유용한 클래스(1) - Objects class
·
자바/유용한 클래스들
1. java.util.Objects 클래스 - Object 클래스의 보조 클래스로 Math 클래스처럼 모든 메서드가 static이다. - 객체 비교나 null 체크에 유용하다. - 메서드들은 다음과 같다. (1) static boolean isNull(Object obj) : null이면 true, 아니면 false 반환 (2) static boolean nonNull(Object obj) : isNull의 반대 (3) static T requireNonNull(T obj) or (T obj, String message) or (T obj, Supplier messageSupplier) : 해당 객체가 널이 아니어야 하는 경우, 만약 널이면, NullPointerException을 발생 (두 번째 매개..
java.lang패키지(7) - 래퍼(Wrapper) 클래스
·
자바/java.lang 패키지
1. 래퍼(Wrapper) 클래스 - 때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 할 때, 기본형 값들을 객체로 변환하여 작업을 수행해야 한다. 이때, 사용되는 것이 래퍼 클래스이다. - 래퍼 클래스를 이용하면 기본형 값을 객체로 다룰 수 있다. - 래퍼 클래스의 생성자는 매개변수로 문자열이나 각 자료형의 값들을 인자로 받는다. 이 때, 주의해야 할 것은 각 자료형에 알맞은 문자열을 사용해야 한다는 것이다. - 예를 들어, new Integer("1.0")을 실행하면 NumberFormatException이 발생한다. 1-1. 래퍼 클래스의 생성자들 - Boolean, Character, Byte, Short, Integer, Long, Float, Double 이 있는데, 모두 생성자를 만들 수 ..
java.lang패키지(6) - Math 클래스
·
자바/java.lang 패키지
1. Math 클래스 - 기본적으로 Math 클래스는 생성자가 private으로 되어 있기 때문에 만들 수 없다. 그 이유는 인스턴스 변수가 없고 모두 다 static으로 되어 있기 때문이다. - 상수로는 다음과 같다. (1) E: 자연로그의 밑 (2) PI: 원주율 1-1. round() 메서드 - round() 메서드는 항상 첫째 자리에서 반올림을 해서 정수값(long)을 결과로 돌려준다. - 그러나 그렇게 되면 두번째 자리 이상에서는 반올림을 할 수 없으므로, 아래의 순서를 따른다. (1) 해당 N자리에서 반올림 한다면, 해당 자리수만큼 10^(N-1)을 곱한다. (2) Math.round()를 사용한다. (3) 10^(N-1)만큼 다시 나눠준다. - 예를 들어, 90.7552에서 셋째 자리 반올림..
java.lang패키지(5) - StringBuffer 클래스와 StringBuilder 클래스
·
자바/java.lang 패키지
1. StringBuffer 클래스 - String 클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer 클래스는 변경이 가능하다. - 내부적으로 문자열을 편집을 위한 공간(buffer)이 있으며, 인스턴스 생성 시, 그 크기를 지정할 수 있다. - 이때, 크기는 충분히 잡는 것이 좋다. - StringBuffer(int length) 생성자를 통해 크기를 지정하는데, 만약 무시한다면, 16개의 문자를 저장할 수 있는 크기의 버퍼를 생성한다. - 아래의 코드는 StringBuffer에 대한 클래스 생성자 구조이다. public final class StringBuffer implements java.io.Serializable{ private char[] value; ..
java.lang패키지(4) - String 클래스(2)
·
자바/java.lang 패키지
1. join()과 StringJoiner 클래스 - join()은 split()과 반대의 역할을 한다. - 아래의 코드를 보자. - 또한 java.util.StringJoiner 클래스를 사용해서 문자열을 결합할 수 있다. - 아래의 코드를 보자. 2. 문자 인코딩 변환 ( getBytes()를 사용하여 해당 문자열의 문자 인코딩을 바꿔준다. ) ( 또한 byte[] 코드를 다시 문자열로 바꿔줄 수 있다. ) - 아래의 코드를 보자. ( "가"에 대한 UTF-8은 0xEAB080 이고, CP949는 0xBOA1이다. ) ( String.format() 메서드는 c언어에서의 printf()이다. ) 3. 기본형 값과 String 값과의 변환 ( 아래는 기본형 값 -> String 값으로 변환하는 코드이다..
java.lang패키지(3) - String 클래스(1)
·
자바/java.lang 패키지
1. 변경 불가능한(immutable) 클래스 - 변경 불가능한 클래스는 아래의 예시를 통해 이해하자. (1) String 클래스의 참조변수 a와 b가 있는데, 각각 "a"와 "b"를 가지고 있다고 가정한다. (2) 이 둘을 합쳐서 참조변수 a에 저장하면 "ab" 문자열이 저장된다. ( 그러나 이것은 변경된 것이 아니라 새로운 인스턴스를 생성된 것이고 기존에 "a"가 저장된 주소공간을 가리키는 것이 아니라 새로 생성된 인스턴스 공간을 가리키게 되는 것이다. ) ( 단, 이러한 작업은 메모리 공간을 더욱 늘리게 되므로, 결합횟수를 줄이는 것이 좋다. ) ( 만약 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많은 경우에는 String 클래스 대신 StringBuffer 클래스를 사용하는 것이 좋다. ..
java.lang 패키지(2) - Object 클래스(2)
·
자바/java.lang 패키지
1. 얇은 복사와 깊은 복사 - clone()은 단순히 객체에 저장된 값을 그대로 복제할 뿐, 객체가 참조하고 있는 객체까지 복제하지 않는다. - 기본형 배열인 경우는 오버라이딩을 해서 문제가 되지 않지만, 객체 배열을 clone()으로 복제하는 경우에는 원본과 복제본이 같은 객체를 공유하므로 완전한 복제가 아니다. 이러한 것을 shallow copy라고 부른다. - 반면에 원본이 참조하고 있는 객체까지 복제하는 것을 deep copy라고 한다. - 아래의 코드는 shallow copy를 보여준다. ( c1의 객체 p의 x를 4로 바꿨지만 c2의 객체 p의 x도 영향을 주어 출력값이 4가 나왔다. ) ( 그러므로, 확실하게 deep copy를 통해 옮겨주어야 한다. ) - 아래의 코드는 deep copy..
java 코드에서 화면 구성
·
안드로이드 with 자바/자잘한 문제들
1. setContentView - 이 메서드가 호출되면 자신의 레이아웃 파일을 파라미터로 전달하여 액티비티라 불리는 소스 파일과 연결이 된다. 2. java 코드에서 레이아웃 추가하기 - 따로따로 분리하여 작성하면, 레이아웃의 구성을 바꿀 때 java 소스 코드를 건들 필요가 없는 장점이 있다. - 그러나 화면 레이아웃을 미리 못 만들거나 바로바로 필요할 때마다 레이아웃을 만들어야 할 경우 java 소스 코드에서 구성할 수도 있다. - 예를 들면, 어떤 이벤트가 일어날 경우, 유형에 따라 화면 구성을 바꾸는 것이 있다. - 아래의 코드를 보자. package com.example.exercise001; import android.content.Intent; import android.net.Uri; i..
java.lang 패키지(1) - Object 클래스(1)
·
자바/java.lang 패키지
1. Object 클래스 - Object 클래스는 멤버변수는 없고 오직 11개의 메서드만 가지고 있다. - 아래의 중요한 메서드 몇가지만 알아보자. 1-1. equals(Obejct obj) - 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean으로 알려주는 역할을 한다. - 그렇기 때문에 같은 클래스의 객체라도 서로 다를 수밖에 없다. - 아래의 코드를 보고 이해해보자. - 또한 아래의 코드처럼 오버라이딩을 통해 또 다른 비교를 할 수 있다. 1-2. hashCode() - 이 메서드는 해싱 기법에 사용되는 '해시 함수'를 구현한 것이다. - 해싱은 데이터 관리 기법 중의 하나인데, 대량의 데이터를 저장하고 검색하는 데 유용하다. - 일반적으로 해시코드가 같은 두 객체가 존재할 수 있..
예외처리(2)
·
자바/기본적인 개념
1. 예외 처리의 두 가지 방법 : main과 method()가 호출 스택에 있다고 가정하자. (1) main에서 호출한 method()에서 try-catch문으로 예외 처리하기. (2) main에서 호출한 method()에서 예외가 발생되어, main으로 넘겨서 try-cathc문으로 처리하기. 2. finally 블럭 - finally 블럭은 try-catch문과 함께 예외의 발생여부에 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다. - 순서는 다음과 같다 (1) try -> catch -> finally (2) try -> finally - finally는 try에서도 꼭 실행되어야 되는 구문과 catch에서도 꼭 실행되어야 되는 구문을 넣어야 할 때 활용된다. 3. 이해를 돕기 위한 예..
예외처리(1)
·
자바/기본적인 개념
1. 자바에서의 에러 종류 3가지 (1) 컴파일 에러 : 컴파일러가 빨간줄로 표시해주며 자바 문법에 어긋날 경우 발생하는 에러이다. ( 예) 명시적 형변환이 없을 경우 등 ) (2) 런타임 에러 : 컴파일 에러는 발생하지 않지만 프로그램 실행 후 발생하는 에러이다. ( 예) 범위에 벗어나는 인덱스 참조 등 ) (3) 논리적 에러 : 실행은 잘 되지만, 의도와 다르게 동작하는 것을 말한다. 2. 에러 vs 예외 (1) 에러: 메모리 부족(OutOfMemoryError)와 스택오버플로우(StackOverflowError) 같은 복구할 수 없는 심각한 오류 (2) 예외: 발생하더라도 수습될 수 있는 덜 심각한 예외 3. 예외 클래스의 계층 구조 ( Exception 클래스들은 주로 외부의 영향으로 발생하는 것..
익명 클래스(anonymous class)
·
자바/기본적인 개념
1. 익명 클래스란? - 클래스의 선언과 객체의 생성을 동시에 하기 때문에, 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다. - 특이하게도 다른 내부 클래스들과는 달리 이름이 없어서 ①생성자도 가질 수 없고, ②하나의 클래스로 상속받는 동시에 인터페이스를 구현하거나, ③둘 이상의 인터페이스를 구현할 수 없다. - 오로지 하나의 클래스를 상속받거나 단 하나의 인터페이스만을 구현할 수 있다. 2. 이해를 돕기 위한 예제(1) (위 코드를 컴파일 한다면, 아래처럼 4개의 클래스 파일이 생성된다.) (a) (a$1.class) (a$2.class) (a$3.class) 3. 이해를 돕기 위한 예제(2) : 왜 익명 클래스를 사용하는 지를 설명하는 예제이다. ( 위의 코드를 가..
내부 클래스(inner class)
·
자바/기본적인 개념
1. 내부 클래스란? - 클래스 내에 선언된 클래스를 말한다. - 선언하는 이유는 두 클래스 사이에 서로 긴밀한 관계에 있기 때문이다. - 그러나, 내부 클래스는 주로 AWT 또는 Swing과 같은 GUI 어플리케이션의 이벤트 처리 외에는 잘 사용되지 않는다. 2. 내부 클래스의 장점 - 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근할 수 있다. - 코드의 복잡성을 줄일 수 있다.(캡슐화) 3. 내부 클래스의 종류와 특징 - 변수 선언하는 것과 같은 위치에 선언할 수 있으며, 총 4가지가 있다. (1) 인스턴스 클래스 : 외부 클래스의 인스턴스 멤버들과 관련된 작업에 사용될 목적으로 선언된다. (2) 스태틱 클래스 : 외부 클래스의 static 멤버, 특히 static 메서드에서 사용될 목적으로 선언..
인터페이스의 default & static 메서드
·
자바/기본적인 개념
1. static 메서드는 원래 인터페이스에서 사용 불가였다? - JDK 1.8 전에는 불가능했지만, 이제는 default와 static 메서드를 사용할 수 있게 되었다. - 옛날에는 java.util.Collection이라는 인터터페이스에 static 메서드가 있었는데 추상 메서드만 선언이 가능하다는 이유로 같이 넣지 못해서 Collections라는 클래스가 생성되게 되었다. - static 메서드 역시 앞에 public 접근 제어자가 있고, 생략 또한 가능하다. 2. 디폴트 메서드가 등장하게 된 배경 - 인터페이스에 새로운 메서드를 추가한다는 것은 엄청나게 까다롭다. 그 이유는 인터페이스로 구현한 클래스들이 전부 다시 구현해야 하기 때문이다. - 그러한 이유 때문에, default 메서드를 고안하여 ..
인터페이스 다형성
·
자바/기본적인 개념
1. 인터페이스 다형성 - 상속에서 다형성을 공부할 때, 자손 클래스의 인스턴스를 조상 타입의 참조변수로 참조하는 것이 가능하다는 것을 배웠다. 인터페이스 또한 그렇다. ( 단, c 참조 변수로는 c 인터페이스에서 정의한 것만 참조 가능하다. ) 2. 인터페이스 타입의 활용 ( 위의 인터페이스 타입의 method() 함수를 지정할 수 있는데, 리턴 타입이 인터페이스 라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다. ) ( 또한 아래의 그림처럼 매개변수를 인터페이스의 타입으로 지정할 수 있는데, 이는 인터페이스를 구현한 클래스의 인스턴스를 전달하라는 소리와 마찬가지이다. ) 3. 이해를 돕기 위한 예제(1) Q) 19번째 줄에서 왜 오류가 날까? A) 리턴 타입이 ..
인터페이스
·
자바/기본적인 개념
1. 인터페이스란? - 추상 클래스처럼 추상 메서드를 갖지만, 추상 클래스보다 추상화 정도가 높아서 추상 클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. - 오직 추상 메서드와 상수만을 맴버로 가지고, 어떤 다른 요소도 가지지 않는다. - 추상 클래스를 부분적으로만 완성된 '미완성 설계도' 라고 한다면, 인터페이스는 구현된 것은 아무것도 없고 밑 그림만 그려져 있는 '기본 설계도'라 할 수 있다. - 인터페이스는 인터페이스로부터만 상속 받으며, 하나의 클래스가 다중 인터페이스로부터 상속 받는 것이 가능하다. - 인터페이스 또한 추상 클래스처럼 인스턴스를 생성할 수 없다. - 문법 interface 인터페이스이름{ public static final 상수이름 = 값; pu..
추상 클래스(abstract class)
·
자바/기본적인 개념
1. 추상 클래스란? - 단어의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. - 미완성 클래스는 인스턴스를 생성할 수 없다. ( 단, 생성자는 생성 가능하다. ) - 미완성 클래스는 상속을 통해서 자손 클래스에 의해서만 완성될 수 있다. 2. 추상 클래스가 필요한 이유는? - 예를 들자면, 컴퓨터가 여러 대 있고, 여러 종류가 있으며 각기 다른 기능을 수행하지만, 이 들의 설계도는 90%는 동일할 것이다. 그래서 공통적인 부분을 먼저 설계한 다음 각각의 서로 다른 설계도를 작성하는 것이 효율적이기 때문에, 사용하는 것이다. 3. 추상 메서드란? - 추상 클래스와 개념이 같으며, 추상 메서드는 구현부와 선언부 중에 선언부만 작성한다. - 문법: abstract 리턴타입 메서드이름(); 4. 추상..
다형성(3)
·
자바/기본적인 개념
1. 매개변수의 다형성 ( 위와 같은 클래스들이 있다고 가정해보자. ) ( Product는 Tv, Computer, Audio의 조상이다. ) ( Buyer 클래스는 Tv, Computer, Audio를 구입하는 사람을 표현한 것이다. ) ( 그런 다음, 위와 같이 Buyer 클래스에 buy 메서드를 오버로딩을 해주었다. ) ( 하지만 제품의 종류가 늘어날 때마다 buy 메서드를 계속 오버로딩을 해주어야 된다. ) ( 그래서 위와 같이 매개변수에 다형성을 추가해주면 코드가 간결해진다. ) 2. 예제(1) - 매개변수에 다형성을 활용 3. 예제(2) - 매개변수에 다형성을 여러 종류의 객체 배열로 다루어 보기. ( 예제(1)과 Buyer 클래스와 main 클래스에서 수정이 되었다. ) ( 수정한 결과 Pr..
다형성(2)
·
자바/기본적인 개념
1. 예제(1) - 중복된 인스턴스 변수 ( 오버라이딩 된 메서드만 자손 인스턴스를 참조할 수 있지만, 중복된 인스턴스 변수는 자손 인스턴스에서 참조할 수 없다. ) 2. 예제(2) - 중복된 메서드와 인스턴스 변수 그리고 지역변수, this, super의 차이점 ( 인스턴스 변수를 이 예제처럼 직접 접근을 한다면, 참조 변수의 타입에 따라 사용되는 인스턴스 변수가 달라지므로, private로 접근을 제한하는 것이 좋다 .)
instanceof 연산자
·
자바/기본적인 개념
1. 사용 방법 - 주로 조건문에서 사용한다. - instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입이 피연산자로 위치한다. - 결과값은 boolean 값인 true 또는 false가 반환된다. - 만약 값이 null인 참조변수에 대해 instanceof 연산을 수행하면 false를 결과로 얻는다. 2. 예제(1) - 업-다운 캐스팅 public class Exercise001 { public static void main(String[] args) { car c1 = new car(); car c2 = new sportCar(); sportCar c3 = new sportCar(); if(c1 instanceof car) { System.out.println("1"); } if(c1 instanc..
다형성(1)
·
자바/기본적인 개념
1. 객체지향에서의 다형성이란? (1) '여러 가지 형태를 가질 수 있는 능력'을 의미한다. (2) 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 한다. (3) 즉, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다. 2. 예제(1) - 다형성 구현해보기. ( 여기서 7번째 줄에서 주석으로 달린 것을 사용하면 에러가 발생한다. ) ( 그 이유는 인스턴스인 A의 멤버 개수보다 참조변수 b가 사용할 수 있는 멤버 개수가 많기 때문이다.) --> 자손 타입의 참조변수가 조상 타입의 인스턴스를 참조하는 것은 존재하지 않는 멤버를 사용하고자 할 가능성이 있기에 막아놓은 것이다. ( 예를 들자면, B b = new B()가 있다고 생각해보자. 그러면 b는 자신의..
제어자
·
자바/기본적인 개념
1. 제어자란 - 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여하는 것을 말한다. - 제어자의 종류는 접근 제어자와 그 외의 제어자로 나눌 수 있다. (1) 접근 제어자: public, protected, default, private (2) 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp 2. final - 클래스 앞에 붙으면: 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. (*조상이 되지 못함) - 메서드 앞에 붙으면: 변경될 수 없는 메서드 또한 오버라이딩을 통해 재정의가 불가하다. (*오버로딩은 가능하다.) 3. 생성자를 이용한 final멤버 변수의 초기화 - 일..
import 문
·
자바/기본적인 개념
1. import 문이란? - 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것을 말한다. - 이클립스에서 'ctrl + shift + o'를 누르면, 자동으로 import 문을 추가해준다. 2. java.lang.*; - import 선언할 때 사용되는 문장이다. - System과 String 같은 클래스들이 있는 패키지인데, 선언 없이 사용할 수 있었던 것은 매우 빈번히 사용되는 중요한 클래스이기 때문에 따로 지정하지 않았던 것이다. 3. static import - static 멤버를 호출할 때 클래스 이름을 생략할 수 있다. - 특정 클래스의 static 멤버를 자주 사용할 때 편리하고, 코드가 간결해진다. 4. 예제 - static import 활용해보기. ( 앞에 Sys..
패키지
·
자바/기본적인 개념
1. 패키지란? - 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. - 같은 이름의 클래스 일지라도 서로 다른 패키지에 존재하는 것이 가능하므로, 이름이 충돌하는 것을 피할 수 있다. 2. 패키지의 규칙 (1) 하나의 소스 파일에는 첫 번째 문장으로 단 한 번의 패키지 선언만을 허용한다. (*첫 번째 문장은 반드시 주석과 공백을 제외한 곳이여야 한다.) (2) 모든 클래스는 반드시 하나의 패키지에 속해야 한다. (3) 패키지는 점(.)을 구분자로 하여 계층 구조를 구성할 수 있다. (4) 패키지는 물리적으로 클래스 파일(.class)을 포함하는 하나의 디렉토리이다. (5) 이름은 대소문자로 이용하지만, 소..
super
·
자바/기본적인 개념
1. super란? (1) 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. (2) 멤버 변수와 지역 변수가 이름이 같을 때 this를 사용하는 것처럼, super 또한 조상 클래스에서의 멤버 변수와 자손 클래스의 멤버 변수와 이름이 같을 때 사용된다. (3) 모든 인스턴스 메서드에는 자신이 속한 인스턴스의 주소가 지역 변수로 저장되는데, 이것이 참조변수 this와 super의 값이 된다. (4) this와 마찬가지로 super는 static 메서드에서 사용할 수 없다. 즉, 인스턴스 메서드에서만 사용이 가능하다. 2. super() (1) this()와 마찬가지로 super() 역시 생성자이다. (2) this()는 자신의 클래스에서 다른 생성자를 부르지만, supe..
오버라이딩
·
자바/기본적인 개념
1. 오버라이딩이란? - 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 말한다. - override는 사전적 의미로 '~위에 덮어쓰다'로 해석된다. 2. 오버라이딩 조건 (1) 조상 클래스의 메소드와 이름이 같아야 한다. (2) 조상 클래스의 메소드와 매개변수가 같아야 한다. (3) 조상 클래스의 메소드와 반환타입이 같아야 한다. (4) 조상 클래스의 메소드의 접근 제어자의 범위보다 같거나 커야 한다. ( *접근 제어자 범위 순서: public > protected > (default) > private ) (5) 조상 클래스의 메서드의 예외의 수보다 같거나 적어야 한다. (6) 조상의 인스턴스 메서드를 자손에서 static 메서드로 또는 그 반대로 변경할 수 없다. Q) 만약 조상 stati..
상속
·
자바/기본적인 개념
1. 상속을 씀으로써 얻을 수 있는 기대효과 (1) 코드의 재사용성을 높이고 코드의 중복성을 제거할 수 있다. (2) 프로그램의 생산성과 유지보수에 크게 기여된다. 2. 부모와 아이 - 부모는 조상, 상위, 기반 클래스라고도 불리어진다. - 아이는 자손, 하위, 파생된 클래스라고도 불리어진다. ( age는 부모에서 생성된 age이다. ) ( 이처럼 age는 아이에게 포함되므로 부모에서 정의한 것을 같이 사용할 수 있다. ) 3. 상속될 때 규칙 (1) 생성자와 초기화 블럭은 상속되지 않는다. 맴버만 상속될 수 있다. (2) 항상 상위 클래스보다 하위클래스는 같거나 많은 맴버를 갖는다. 4. 간접적인 상속 관계 ( GrandChild와 Parent 관계가 있을 때, 우리는 간접적인 상속 관계라고 부른다. ..