JAVA (9) 썸네일형 리스트형 [OOP, Java] 다형성 & 상속 & 객체 변수 형변환 그림으로 정리 본 포스팅은 자바의 정석과 스프링 입문을 위한 자바 객체 지향의 원리와 이해를 참고하여 만들어졌습니다. 다형성 OOP에서 다형성이란 여러 가지 형태를 가질 수 있는 능력을 의미한다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현해였다. 구체적으로 말하면, 조상 클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다 public class Driver { public static void main(String[] args) { Penguin pororo = new Penguin(); pororo.name = "뽀로로"; pororo.habitat = "남극"; pororo.showName(); pororo.showName("초보.. [Java] 예외처리 예외가 발생하는 프로그램의 실행 순서 package com.company; public class Main { public static void main(String[] args) { int a = 10; int b = 0; int result = a/b; System.out.println(a + "을" + b + "로 나눈 값은 " + result + " 입니다."); } } 1. 예외 상황 발생 2. 에러와 관련된 정보를 가지고 있는 Exception 객체가 생성 3. Exception 객체가 소멸되지 않으면 프로그램은 비정상 종료 Exception 발생시 프로그램이 종료되기 때문에 뒤에 꺼까지 모두 실행되지 않음 예외가 발생하더라도 Exception을 적절하게 처리해서 프로그램을 비정상 종료되지 않.. [Java] 컬렉션 프레임워크 (ArrayList, HashMap) 컬렉션 프레임워크 객체를 담을 수 있는 신축성 있는 주머니이다. 객체가 아닌 것 ex. int, double, 등등..은 Wrapper class를 이용해서 객체로 변환 가능 참고로 인터페이스끼리는 상속이 가능하다. 인터페이스끼리 상속할 땐 다중 상속이 가능하다. 당연히 인터페이스끼리 구현은 불가하다. 구현은 일반 클래스에서 implements를 쓰고 구현해야 하기 때문이다. public interface Animals extends IBird, IFlay { // 인터페이스 간 다중 상속 가능 public void go(); public void run(); } 따라서 Collection은 List가 상속하는 구조이고, 인터페이스를 구현해야 하는 클래스 입장(LinkedList)에서는 구현하고 있다고 .. [Java] 추상클래스 vs. 인터페이스 인터페이스 접근제어자 interface 인터페이스이름 { public static final 타입 상수이름 = 값; // 상수는 선언과 동시에 초기화 필수! ... public abstract 메소드이름(매개변수목록); ... } 인터페이스 내부에 선언하는 변수는 무조건 public static final이다. 인터페이스 변수는 상수로, 반드시 선언 시에 값을 대입해줘야 한다. 인터페이스 내부에 선언하는 메소드는 몸체가 없는 추상메소드이다. 인터페이스 사용 이유 개발 코드 안에서 여러 개의 객체를 변환해서 사용하고 싶을 때 개발코드를 수정하지 않고 사용하기 위해 인터페이스 사용함 개발코드를 수정하지 않고도 여러 객체 받아올 수 있으므로 인터페이스를 참조 변수의 타입으로 설정 class Buyer { //.. [Java] Object 클래스, 다형성 Object 클래스 Object 클래스는 모든 자바 클래스의 최고 조상 클래스가 됩니다. 따라서 자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용할 수 있습니다. 이러한 Object 클래스는 필드를 가지지 않으며, 총 11개의 메소드만으로 구성되어 있습니다. System.out.println(객체명); 만 입력해도 객체명.toString() 메소드가 호출된다. toString()의 리턴 값이 String이어야 한다. System.out.println()을 toString 안에서 하면 안된다. toString()은 문자열을 리턴해야 하는 메소드이므로! http://www.tcpschool.com/java/java_api_object 객체지향 프로그래밍 캡슐화 객체의 실제 구현 내용을 감추.. [Java] 오버로딩, 오버라이딩 오버라이딩 부모로부터 상속받은 메소드의 내용을 자식 클래스에서 다시 재정의하는 것 오버라이딩 조건 메소드 이름 같아야 메소드 파라미터 개수와 데이터 타입 같아야 리턴 타입 같아야 부모의 것보다 접근 제어자가 이상이어야 오버라이딩 불가 조건 부모 메소드 접근 제어자가 private일 때 private 접근 제어자는 오직 자기 자신의 클래스 내부에서만 사용가능하기 때문에 오버라이딩 불가 부모 메소드가 final 키워드로 선언되어 있을 때 (상속 불가) final 클래스 : 자식 클래스를 만들 수 없음 (상속 불가) final 메소드 : 자식 클래스에서 오버라이딩 불가 final 변수 : 값을 변경할 수 없음 (상수) 오버로딩 한 클래스 내에서 같은 메소드 이름으로 파라미터 달리 해서 메소드 내용 여러 개 정.. [Java] 생성자 내에서 생성자 호출하기 상속을 하려면 부모가 먼저 있어야지 생성자 안에서 다른 생성자를 호출하는 경우가 있다. 특히 자식 클래스가 부모 클래스를 상속받고 있다면, 자식 클래스의 객체를 생성하면서 생성자가 호출될 때 첫 줄에 부모 클래스의 생성자가 호출된다. 만약 부모 클래스의 생성자 코드 상에 생략되어 있다면, 자바 컴파일러가 알아서 생성해주고 부모 클래스의 생성자 코드가 실행된다. 이는 상속 관계에서 부모 클래스의 멤버들을 먼저 초기화해주기 위함이다. 상속 받는다는 것은 자식 입장에서 부모 클래스에 있는 멤버들을 자유롭게 갖다가 쓸 수 있어야 한다는 것이므로 부모 클래스의 멤버들을 먼저 초기화해주게 되는 것이다. 내부적인 동작으로는 자식 클래스의 객체가 생성되기 전에 부모의 객체가 먼저 생성되고 자식의 객체가 생성된다. 이러.. [Java] 참조 변수, 메서드와 생성자 배열 초기화 시 배열 크기 반드시 설정해줘야 한다 int [] myArray = new int []; // error "array dimension missing" 반드시 배열 초기화 시 배열 크기를 설정해줘야 한다. 그래야 배열을 초기화 한 것이다. int [] myArray = new int [100]; // good 참조 변수 헷갈릴만한 예제 반드시 primitive type이 아닌 변수는 모두 참조 변수라서 값을 저장하거나, 실행하거나, 호출하려면 반드시 new 연산자를 통해서 객체를 생성해줘야 한다는 것을 주지하자. 아래의 코드는 틀린 코드이다. 틀린 부분을 찾아보자. MyRectangle [] rects = new MyRectangle [100]; rects[n].lu = new MyPoint.. 이전 1 2 다음