본문 바로가기

반응형

프로그래밍언어/JAVA

(61)
[JAVA] 다형성 (Polymorphism) 1. 다형성 (polymorphism) 다형성이랑 '여러가지 형태를 가질 수 있는 능력'을 의미한다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현하였다. 이 말은 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다는 의미이다. class Parent { ... } class Child extends Parent { ... } ... // 각각의 참조 변수의 선언 타입과 일치하는 인스턴스를 참조한다. Parent p = new Parent(); Child c = new Child(); // 각각의 타입과 일치하는 자손 인스턴스를 참조한 위의 예시와 달리 // 조상 타입의 참조 변수로 자손 인스턴스를 참조한다. Par..
[JAVA] 제어자 (Modifier) 1. 제어자 (modifier) 제어자란 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자는 접근 제어자와 그 외의 제어자로 구분할 수 있다. - 접근 제어자: public, protected, default, private - 그 외의 제어자: static, final, abstract, native, transient, synchronized, volatile, strictfp 제어자는 여러 제어자를 조합하여 사용하는 것이 가능한데, 접근 제어자는 4가지 중 하나만 선택해서 사용할 수 있다. 2. static static은 '클래스의' 또는 '공통적인'의 의미를 가지고 있다. 인스턴스 변수는 하나의 클래스로부터 생성되었더라도 각기 다른 값을 유지하지만 클래스 변수는..
[JAVA] 자바 패키지 1. 패키지 (package) 패키지란 클래스의 묶음이다. 패키지에는 클래스와 인터페이스를 포함시킬 수 있으며 관련된 클래스들끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다. 같은 이름의 클래스이더라도 서로 다른 패키지에 위치시키는 것이 가능하기 때문에 같은 이름의 클래스끼리 충돌하는 것을 방지할 수 있다. 클래스가 컴파일되면 하나의 클래스 파일 (.class)가 되는 것처럼 패키지 또한 물리적인 구조를 가지는데, 디렉토리를 통해 계층이 이루어진다. 예를들어 java.lang.String 클래스는 java 디렉토리 안의 lang 디렉토리에 해당 클래스 파일이 위치하고 있다. 하나의 소스파일은 첫번쨰 문장에 package 키워드로 패키지를 선언할 수 있으며, 단 한번의 선언만 허용한다..
[JAVA] 오버라이딩 (Overriding) 1. 오버라이딩 오버라이딩이란 조상 클래스로부터 상속받은 메서드의 내용을 변경하여 사용하는 것이다. 상속받은 메서드의 이름은 유지하면서 메서드의 내용을 변경하여 덮어씌우는 것으로 이해하면 된다. 메서드의 이름은 동일하지만 실행되는 것은 다른 메서드인 것이다. class Parent { public void cal(int a, int b) { return a + b; } } class Child extends Parent { public void cal(int a, int b) { return a * b; } } 자식 클래스인 Child는 Parent를 상속받았기 때문에 Parent의 cal 메서드를 사용할 수 있다. 하지만 이 경우에는 자식 클래스인 Child에 메서드 cal이 새로 구현이 되어있다. 그..
[JAVA] 상속 (Inheritance) 1. 상속 상속은 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 이용하면 기존에 작성한 클래스를 사용할 수 있기 때문에 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 유리하다. 자바에서 상속을 구현하기 위해서는 'extends' 키워드를 사용하면 된다. 클래스 선언 시에 클래스 이름 뒤에 extends 와 상속하려는 클래스의 이름을 적어주면 된다. // Child 클래스가 Parent 클래스를 상속 class Child extends Parent { ... } 상속 관계에 있는 두 클래스는 다음과 같은 용어로 표현한다. - 조상 클래스 - 부모 클래스 (parent), 상위 클래스 (super), 기반 클래스 (base) - 자손 클래스 - 자식 클래스..
[JAVA] HashMap vs HashTable HashMap 과 HashTable 은 모드 key 와 value 를 1대1 형태로 데이터를 저장하는 자료구조이다. 데이터를 저장할 때 key 값과 이와 mapping 되는 value 를 저장하는데, 이름에서 알 수 있듯이 hashing 을 사용하여 데이터를 저장한다. 데이터를 저장할 때 key 값은 hash function 을 통해 hash code 으로 변환되는데, 이 값을 index 로 하여 테이블의 해당 index 에 value 를 저장하는 방식으로 데이터를 저장한다. 둘다 key 에 대한 중복이 없고 순서를 보장하지 않는다. 대신 key 를 알고 있는 경우에 검색 속도는 O(1) 의 시간복잡도를 가지기 때문에 빠른 검색을 보장한다. 차이점 HashMap 은 비동기로 동작한다. thread-saf..
[JAVA] 변수의 초기화 1. 변수의 초기화 변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화라고 한다. 변수의 초기화는 경우에 따라 필수가 아닐 수도 있지만 가능하면 선언과 동시에 초기화 하는 것이 바람직하다. 클래스의 멤버변수는 초기화를 하지 않아도 자동적으로 변수의 자료형에 맞춰 기본값으로 초기화된다. 하지만 지역변수의 경우 자동으로 초기화 되지 않기 때문에 사용전에 반드시 초기화 해야한다. 초기화 하지 않는경우 컴파일 에러가 발생한다. 변수의 초기화 방법에는 다음과 같은 방법들이 있다. 명시적 초기화 (explicit initialization) 생성자 (constructor) 초기화 블럭 (initialization block) 2. 명시적 초기화 (explicit initialization) 변수 선언과 동시..
[JAVA] 생성자 (Constructor) 1. 생성자란? 생성자는 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다. 생성자 역시 메서드처럼 클래스 내에 선언되며, 구조도 메서드와 유사하지만 리턴값이 없다는 점이 다르다. 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 void를 사용하지는 않고, 단지 아무 타입도 표시하지 않는다. 생성자의 조건은 다음과 같다. 생성자의 이름은 클래스의 이름과 같아야 한다. 생성자는 리턴값이 없다. 생성자는 다음과 같이 정의한다. 생성자도 다른 메서드들과 같이 오버로딩이 가능하므로 하나의 클래스는 여러개의 생성자를 가질 수 있다. class Constructor { // 매개변수가 없는..

반응형