전체 글

· IT/Java
추상(abstract) 추상은 실체 간에 공통되는 특성을 추출한 것을 말한다. 추상 클래스(abstract class) 추상적으로 밖에 그려지지 않은 클래스로, 클래스가 전체적인 구성을 다 가지지 못한 채 설계만 되어 있는 클래스다. 객체를 생성할 수 있는 클래스를 실체 클래스라 하면, 실체 클래스의 공통적인 필드나 메소드를 추출해서 선언한 클래스가 추상 클래스다. 추상 클래스는 실체 클래스의 부모 역할을 한다. 실체 클래스는 추상 클래스를 상속해서 공통적인 필드나 메소드를 물려 받을 수 있다. 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들어진거라 new 연산자를 사용하여 객체를 직접 생성할 수 없다. class Child extends Parent {...} 실체 클래스를 만들기 위한 부모 클래..
· IT/Java
instanceof 객체가 어떤 클래스인지, 어떤 클래스를 상속 받았는지 객체의 타입을 확인할 때 사용한다. boolean result = 객체 instanceof 타입; boolean result = parent instanceof Child 좌항의 객체가 우항의 타입이면 true, 아니면 false를 산출한다. 강제 타입 변환하기 전 매개값이 맞는지 여부를 확인하기 위해 사용한다. 예제 코드 package ch07.sec09; public class Person { // 필드 선언 public String name; // 생성자 선언 public Person(String name) { this.name = name; } // 메소드 선언 public void walk() { System.out.pri..
· IT/Java
다형성(Polymorphism) 하나의 객체가 여러가지 타입을 가질 수 있으며 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질이다. 객체 사용 방법이 동일하다는 것은 동일한 메소드를 가지고 있다는 뜻이다. 1. 필드 다형성 필드 타입(사용 방법)은 동일하지만 대입되는 객체에 따라 실행 결과가 다양하다. 예제 코드 더보기 package ch07.sec08.exam01; public class Tire { public void roll() { System.out.println("회전합니다."); } } package ch07.sec08.exam01; public class HankookTire extends Tire { @Override public void roll() { System.out.pr..
· IT/Java
클래스 변환은 상속 관계에 있는 클래스에서 발생한다. 자동 타입 변환(Promotion) 상속 관계에서 자식이 부모 타입으로 타입 변환하는 것을 클래스의 자동 타입 변환이라 한다. 부모타입 변수 = 자식타입객체; Child child = new Child(); Parents parents = child; Parents parents = new Cat(); Parents와 Child 변수는 타입만 다르고 동일한 Child 객체를 참조한다. 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입이라면 자동 타입 변환이 가능하다. 상속 관계에 있지 않으면 컴파일 에러가 나타난다. 예제 코드 더보기 package ch07.sec07.exam02; public class Parent { // 메소드 선언 publi..
· IT/Java
Method Overriding 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메소드를 상속 받는다. 상속 받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의 후 사용할 수도 있다. 즉, Method Overriding이란 상속된 메소드를 자식 클래스에서 직접 재정의하는 것이다. Method Overriding이 되면 부모 메소드는 숨겨지고, 자식 메소드가 우선적으로 사용된다. Overriding 규칙 메소드의 동작만 재정의하는 것으로, 자식 메소드의 선언부가 부모 메소드의 선언부(리턴 타입, 메소드 이름, 매개변수)와 동일해야 한다. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다. 예제..
· IT/Java
상속(Inheritance) 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 기존에 정의되어 있던 클래스(부모 클래스)의 모든 필드와 메소드를 물려받아 새로운 클래스(자식 클래스)를 생성할 수 있다. 상속의 장점 기존에 작성된 클래스를 재활용 가능하므로 중복되는 코드를 줄여 개발 시간이 단축된다. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성하면, 자식 클래스에 해당 멤버를 작성하지 않아도 된다. 부모 클래스를 수정하면 모든 자식 클래스도 수정되기에 최소한만 수정할 수 있다. 클래스 간의 계층적 관계를 구성하여 다형성의 문법적 토대를 마련한다. 문법 public class Child extends Parent { } 자바는 다중 상속을 허용하지 않아,..
· IT/Java
접근 제한자(Access Modifier) 경우에 따라 외부에서 객체의 필드를 변경하거나 메소드를 호출하지 못하게 막아야 할 때가 있다. 중요한 필드와 메소드가 외부로 노출되지 않아야 객체의 무결성을 유지한다. 그러기 위해 접근 제한자를 사용한다. 접근 제한자 제한 대상 제한 범위 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 같은 패키지 또는 자식 객체만 사용 가능 (default) 클래스, 필드, 생성자, 메소드 같은 패키지 private 필드, 생성자, 메소드 객체 내부 접근 제한 강화 순서 public > protected > default > private 1. 클래스 접근 제한 클래스는 public, default 접근 제한을 가진다. [public..
· IT/Java
값 변경을 금지하고 읽기만 허용할 때 주로 final 필드와 상수를 선언하여 사용한다. 1. final 필드 선언 final 필드는 초기값이 저장되면 최종적인 값이 되어 프로그램 실행 중에 수정할 수 없다. final 타입 필드 [=초기값]; 초기값은 필드 선언 시와 생성자에서 대입할 수 있다. 고정된 값이라면 필드 선언 시에 주고 복잡한 초기화 코드가 필요하거나 객체 생성 시 외부에서 전달된 값으로 초기화하면 생성자에서 준다. 두 방법을 사용하지 않으면 컴파일 에러가 발생한다. 예제 코드 더보기 public class Korean { // 인스턴스 final 필드 선언 final String nation = "korea"; // 고정값으로 초기 대입 final String ssn; // korean 생..
· IT/Java
1. 인스턴스(Instance) member 객체에 소속되어 있으며, New를 통해 객체 생성 후 사용할 수 있는 필드와 메소드이다. 객체 내부의 인스턴스 멤버에 접근하려면 this를 통해 가능하다. public class Car { // 인스턴스 필드 선언 int gas; //인스턴스 메소드 선언 void setSpeed(int speed) {...} } gas 필드는 객체에 소속된 멤버지만 setSpeed() 메소드는 객체에 포함되지 않는다. 메소드를 객체마다 저장 시 중복 저장으로 메모리 효율이 떨어지기에 메소드 코드는 메소드 영역에 있지만 공유하여 사용하고 객체 없이는 사용 불가하게 제한이 걸려있다. 1-1. this 키워드 객체 내부에서 인스턴스 멤버에 접근하기 위해 this를 사용한다. 생성자..
· IT/Java
메소드 선언은 객체의 동작을 실행 블록으로 정의하는 것이며, 메소드 호출은 실행 블록을 실제로 실행하는 것이다. 메소드는 객체 내부에서도 호출되지만 다른 객체에서도 호출될 수 있다. 1. 메소드 선언 1-1. 리턴 타입 리턴 타입은 메소드가 실행한 후 호출한 곳으로 전달하는 결과값의 타입이다. 리턴값이 없는 메소드는 void로 작성한다. void powerOn() {...} // 리턴값 없음 double divide(int x, int y) {...} // double 타입 값을 리턴 리턴 타입이 있는 메소드는 실행블록 안에서 return 문으로 리턴값을 반드시 지정한다. 1-2. 메소드명 첫 문자를 소문자로 시작하고, camel 스타일로 작성한다. void run() {...} void setSpeed..
Huitopia
summary