전체

    Java 타입 변환과 다형성

    인터페이스의 다형성 인터페이스는 동일한 인터페이스로 구현 객체를 교체해서 다양한 프로그램 실행 결과를 얻을 수 있다. 자동 타입 변환 구현 객체와 그 구현 객체의 자식 객체는 인터페이스 타입으로 알아서 자동 타입 변환이 된다. Interface_Name var = new Test(); // Test의 자식 객체도 구현 객체처럼 사용할 수 있음. 강제 타입 변환 보통 구현 객체가 인터페이스 타입으로 자동 변환 되면 인터페이스에 있는 메소드만 사용이 가능한데 구현 객체에서만 선언된 필드나 메소드를 사용할 필요가 있을 경우엔 강제 타입 변환이 필요하다. interface Vehicle{ void run(){} } class Bus implements Vehicle{ void run(){} void only()..

    Java 인터페이스

    인터페이스 객체의 사용 방법을 정의한 타입으로서 다양한 객체를 동일한 사용 방법으로 이용할 수 있다. 즉, 인터페이스를 이용하면 개발 코드를 바꾸지 않고서 다양한 객체를 사용할 수 있다. 인터페이스 사용은 interface 인터페이스이름{ //상수 타입 상수이름 = 값; // 추상 메소드 타입 메소드이름(매개변수); } 상수 필드 선언 상수 필드에는 데이터를 저장할 인스턴스나 정적 필드가 올 수 없다. 따라서 처음 값을 지정해줘야한다. [public static final] 타입 상수이름 = 값; //앞에 부분은 상수필드이기 때문에 생략이 가능 추상 메소드 선언 추상 메소드도 마찬가지로 앞에 public abstract를 앞에 생략 가능하며 인터페이스의 메소드 호출은 객체에서 메소드에서 실행된다. 구현 ..

    Java 추상클래스

    추상클래스 여러 클래스의 공통된 특성(필드나 메소드)를 추출해서 선언한 것을 추상 클래스라고 한다 보통 추상클래스와 실체 클래스는 부모 자식 관계를 가진다. 즉, 실체 클래스(자식)는 추상 클래스(부모)와 상속 관계를 갖게 된다. 추상 클래스 선언 추상 클래스 선언할 때는 abstract 키워드를 이용한다. 그 이유는 상속을 통해 자식 클래스만 만들 수 있게 하기 위해서이다.(즉, 부모로서의 역할만 수행하도록 함) public abstract class 클래스명 { //필드 선언 부분 //생성자 선언 부분 //메소드 선언 부분 } 추상 클래스는 부모로서의 역할만 하기 때문에 new 키워드로 객체를 생성할 수 없으나(직접 객체 생성이 불가능) 그러나 자식 객체가 생성될 때 객체화 된다.(자식 생성자에서 s..

    Java 타입 변환과 다형성

    타입 변환 기본 타입과 마찬가지로 클래스에도 타입 변환이 존재! 프로그램 실행 도중 자동으로 타입 변환이 일어나는 것을 자동 타입 변환이라고 하고 형식은 부모타입 변수 = 자식타입; 로 나타낼 수 있다. Sub test = new Sub(); Main test1 = test; 자동 타입 변환은 굳이 바로 위의 부모가 아니더라도 상속 계층에서 상위 타입인 경우에도 일어날 수 있다. 그리고, 부모 타입으로 자동 변환된 이후에는 부모 클래스에 선언된 필드 및 메소드만 접근이 가능! 하지만 자식 클래스에서 메소드가 재정의 되었을 경우엔 자식 클래스의 메소드가 대신 호출된다 public class Main { public void test1() {} public void test2() {System.out.pri..

    Java 상속

    상속이란 부모 클래스의 멤버를 자식 클래스에게 물려주는 것을 말한다. 그러면 상속을 쓰는 이유는 무엇일까? 이미 개발된 클래스를 재사용하여 코드의 중복을 줄이거나 부모 클래스의 한번의 수정으로 모든 자식 클래스가 수정되는 효과가 있어 유지보수 시간이 줄어들게 되기 때문에 사용! class 자식클래스 extends 부모클래스 { //필드 //생성자 //메소드 } class TestSub extends TestMain {} 위처럼 자식 클래스는 여러 개의 부모 클래스를 상속할 수 없으며 부모 클래스에서 private 접근 제한 갖는 필드와 메소드는 상속 대상에서 제외되며 부모와 자식 클래스가 서로 다른 패키지에 존재할 경우 default 접근 제한된 필드와 메소드도 제외! 부모 생성자의 호출 자식 객체를 생..

    Java 접근 제한자

    접근 제한자 - 클래스와 인터페이스 및 이들이 가진 멤버의 접근 제한 - public : 외부 클래스가 자유롭게 사용 가능 - protected : 같은 패키지 또는 자식 클래스에서 사용 가능 - private : 외부에서 사용 불가능 - default : 같은 패키지에 소속된 클래스에서만 사용 가능 외부에서 객체에 마음대로 접근할 경우 객체의 무결성이 깨질 수 있기 때문에 Getter method와 Setter method가 필요! public class Test { private double val; private double cm; } Setter method - 주로 외부의 값을 받아 필드의 값을 변경하는 것이 목적 void setTest(double val){ if (val < 0){ this...

    Java 인스턴스 멤버와 정적 멤버

    인스턴스 멤버 - 객체마다 가지고 있는 멤버 => 객체를 생성한 후 사용할 수 있는 필드와 메소드 public class Car { int gas; int speed; void setSpeed(int speed) { this.speed=speed; } } public class Test { public static void main(String[] args) { Car myCar = new Car(); myCar.gas=10; myCar.setSpeed(60); //여기선 gas와 setSpeed를 인스턴스 멤버라고 할 수 있음 } } this - 객체 내에서 인스턴스 멤버에 접근하기 위해 사용 Car(String mode){ this.model = model; //car클래스에는 이미 model fie..

    Java 메소드

    메소드 선언부 - 리턴 타입 - 메소드 이름 - 매개변수 선언 - 메소드 실행 블록 리턴타입 메소드이름 ([매개변수 선언]){ 실행코드 } void test(int x, int y){ //결과값이 없을 경우 void로 작성 } // 결과값이 있을 경우 int test1(int x, int y){ return x+y; } test(x,y); int result = test1(x,y); # 매개 변수의 개수를 모를 경우 // 배열 타입으로 선언 int sum1(int[] value){} // 배열 타입이 아니라 목록만 넘겨주는 방식 int sum2(int ... value){} sum1의 경우 메소드를 호출할때 배열 타입으로 매개변수를 넘겨줘야 하지만 sum2의 경우엔 값의 목록만 넘겨줘도 상관없음! int..

    Java 객체와 클래스

    객체(Object) 객체는 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지며 식별 가능한 것을 말하고 속성인 필드값과 메소드를 가진다. 클래스(Class) 클래스는 주로 객체를 만들기 위한 설계도이며 실행 클래스와 라이브러리(API)용도의 클래스로 구분된다. 보통 클래스로부터 객체를 생성해서 사용하는데 그걸 주로 인스턴스라고 부르고 사용 방법은 다음과 같다. Test val; //클래스 변수; val= new Test(); // 변수 = new 클래스(); Test val = new Test(); // 클래스 변수 = new 클래스(); 그리고 클래스는 주로 필드(속성), 메소드, 생성자로 구성된다. 필드는 주로 객체의 고유 데이터, 상태 데이터 등을 저장하고 생성자(Con..

    Java의 배열

    배열 생성은 보통 타입[] 변수 = {값0,값1,...}; or int[] 변수 = new int[10]; 두 방식을 이용한다 하지만 미리 배열 변수를 선언한 후 값 목록을 나중에 결정하려면 다음처럼 작성한다. String[] test = null; test = new String[] {"1","2"}; 2차원 배열 보통 행렬의 구조는 int[][] test = new int[3][3]; //앞은 행 뒤에 숫자는 열을 의미 이렇게 선언한다. 하지만 계단식 구조로도 선언이 가능한데 int[][] test = new int[3][]; test[0] = new int[1]; test[1] = new int[2]; test[2] = new int[3]; 위처럼 선언하면 첫번째 행에는 배열 한개가 들어가고 2번째..