Java

package ch98; public class Product { int price; // 제품의 가격 int bonusPoint; // 제품구매시 제공하는 보너스 점수 Product(int price) { this.price = price; bonusPoint = (int) (price / 10.0); // 보너스 점수는 제품가격의 10% 제공 } } // end of Product class package ch98; public class Tv1 extends Product{ Tv1() { // 조상클래스(Product)의 생성자 Product(int price)를 호출 super(100); // TV가격을 100만원 } // Object 클래스의 toString()을 오버라이딩 public Stri..
기본형 변수처럼 참조변수도 형변환이 가능하다. 단, 서로 상속관계에 있는 클래스 사이에서만 가능! 자손타입의 참조변수를 조상타입의 참조변수로, 조상타입의 참조변수를 자손타입의 참조변수로의 형변환만 가능하다. class Phone { } class IPhone extends Phone { } class AndroidPhone extends Phone { } 예를 들어 Phone클래스가 있고 이를 상속받는 IPhone과 AndroidPhone 클래스가 있을때, IPhone타입의 참조변수 i는 조상타입인 Phone으로 형변환이 가능하다. IPhone과 AndroidPhone은 상속관계가 아니기 때문에 형변환이 불가능하다. IPhone i = new IPhone(); Phone p = (Phone)i; // o..
인터페이스 일종의 추상클래스 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높다 추상클래스와 달리 몸통을 갖춘 일반 메서드 or 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외에 어떠한 요소도 허용하지 않는다. 추상클래스 = 부분적으로 완성된 미완성 설계도 인터페이스 = 구현된 것이 없는 밑그림만 그려져 있는 '기본 설계도' 인터페이스 작성해보기 인터페이스를 작성하는 것은 클래스 작성하는 것과 같다. 클래스는 class라는 키워드를 사용하지만 인터페이스는 interface라는 키워드를 사용한다. interface는 접근제어자로 public 또는 default만 사용할 수 있다. interface 인터페이스이름 { public static f..
문자열을 만들 때에는 두 가지 방법, 문자열 리터럴을 지정하는 방법과 String 클래스의 생성자를 사용해서 만드는 방법이 있다. 변경불가능한 클래스 String 클래스에서는 문자열을 저장하기 위해 문자형 배열 참조변수(char[ ]) value를 인스턴스 변수로 정의해놓고있다. 한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수 만있고, 변경할 수는 없다. 예를 들어 + 연산자를 이용해서 문자열을 결합하는 경우 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되는 것이다. String str1 = "반가워"; // 문자열 리터럴 "반가워"의 주소가 str1에 저장됨 String str2 = new String("반가워"); // 새로운 Strin..
추상클래스(abstract class) : 미완성 설계도 클래스를 설계도로 비유하면 추상클래스는 미완성 설계도라 볼 수 있다. 클래스가 미완성이라는 것은 멤버의 개수에 관계된 것이 아니라, 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미이다. 미완성 설계도이므로 인스턴스를 생성할 수 없다. 미완성 메서드(추상 메서드)를 포함하고 있는 클래스 추상 클래스 사용법은 'abstract'를 붙이기만 하면 된다. abstract class 클래스이름 { .... } 추상메서드 메서드는 선언부와 구현부로 구성되어 있다. 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔 것이 추상메서드이다. 즉, 설계만 해놓고 실제 수행될 내용은 작성하지 않았기 때문에 미완성 메서드인 것이다. 왜 미완성으로 놔둔 것일까..
다형성(polymorphism) : 여러 가지 형태를 가질 수 있는 능력 하나의 코드가 여러 자료형으로 구현되어 실행되는 것 같은 코드에서 여러 다른 실행 결과가 나옴 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나 다형성을 잘 활용하면 유연하고, 확장성있고, 유지보수가 편리한 프로그램을 만들 수 있음 이전까지 인스턴스 타입과 일치하는 타입의 참조변수만을 사용해왔지만 만약 두 클래스가 상속관계라면 다형성을 적용할 수 있다. 즉, 조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것도 가능하다. package ch06; public class Animal { public void makeSound() { System.out.println("동물이 소리를 내고 있습니다."..
객체지향 언어의 특징을 알아보자 1. 코드의 재사용성이 높다. 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다. 2. 코드의 관리가 용이하다. 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다. 3. 신뢰성이 높은 프로그래밍을 가능하게 한다. 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다. 클래스와 객체 클래스란 객체를 정의해놓은 것, 설계도 또는 틀 이라고 정의할 수 있다. 클래스는 객체를 생성하는데 사용되고, 객체는 클래스에 정의된 대로 생성된다. 객체란 실제로 존재하는 것을 의미한다. 예를 들어 휴대폰, 노트북, 책상, 의자 등등.... 같은 사물들이 객체라고 한..
배열을 어떻게 활용해야 할까? 활용예제 1) 총합과 평균 - 배열의 모든 요소를 더해서 총합과 평균을 구한다. package ch01; public class Ex5_2 { public static void main(String[] args) { int sum = 0; // 총합을 저장하기 위한 변수 선언과 초기화 float average = 0f; // 평균을 저장하기 위한 변수 선언과 초기화 int[] score = { 100, 88, 100, 100, 90 }; for (int i = 0; i
swith문에 대해 자세히 알아보자! if 문의 경우 결과가 참, 거짓 두가지 밖에 없다. 경우의 수가 많아 질 수록 else - if를 계속 추가해야해서 복잡하고, 처리시간도 길어진다. switch 문 단 하나의 조건식으로 많은 경우의 수를 처리 표현도 간결해 알아보기가 쉽다. 처리할 경우의 수가 많은 경우에는 if문 보다 switch문으로 작성하는 것이 좋다. 단, switch문은 제약조건이 있기 때문에, 경우의 수가 많아도 어쩔 수 없이 if문으로 작성해야하는 경우가 있다. 조건식을 계산한다. 조건식의 결과와 일치하는 case문으로 이동한다. 이후의 문장들을 수행한다. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다. 만약 조건식의 결과와 일치하는 case문이 하나도 없..
부모 클래스인 Hero 만들기 package ch03_1; public class Hero { String name; int hp; public Hero(String name, int hp) { this.name = name; this.hp = hp; } // 접근제어 지시자 - protected // 상속을 받는 자식 클래스들은 접근할 수 있다. protected void attack() { System.out.println("기본 공격을 시작합니다."); } } 자식 클래스인 Warrior / Archer / Wizard 만들기 package ch03_1; public class Warrior extends Hero { // !! 부모 클래스에 사용자 정의 생성자가 있다면 // 자식 클래스에서 반드시..
객체 지향 패러다임의 핵심 객체와 객체간의 상호작용 그리고 관계를 형성해 나가는 것 오버라이딩 : 상속에서는 부모메서드의 재정의가 가능하다. 조상클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야하는 경우도 존재한다. 이럴 때 조상의 메서드를 오버라이딩한다 라고 한다. class Cal2 extends Cal { public Cal2() { System.out.println("Cal2() 생성자 호출 - 자식"); } public int minus(int n1, int n2) { return n1 - n2; } @Override // 어노테이션 이라 부른다. public int mutiply(int n1..
객체 간의 상속은 어떤 의미일까? 상속? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 클래스 상속 새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(Inheritance)받아서 속성이나 기능을 확장하여 클래스를 구현함 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야 할 때 기존 클래스를 상속함 상속하는 클래스 : 상위 클래스, parent calss, super class 상속받는 클래스 : 하위 클래스, child class, subclass 상속을 구현하는 경우 상위 클래스는 하위 클래스 보다 더 ..
2주녘
'Java' 카테고리의 글 목록 (4 Page)