인터페이스 추상메소드의 집합(인터페이스의 핵심 메소드) 추상메소드의 집합은 추상클래스도 똑같은거 아닌가? 그럼 인터페이스와의 차이가 무엇일까 추상클래스는 일반 클래스이다. 근데 메소드들 중 추상메소드를 가지고 있으니까 추상클래스가 되는것이다. 인터페이스는 오로지 추상메소드만 가지고있다.(구현된것이 아무것도 없다) 구현된것이 전혀 없는 설계도, 껍데기(모든 멤버가 public) interface 인터페이스이름 { public static final 타입 상수이름 = 값; 오로지 상수만 가질수있다. 변수, iv, lv모두 안된다. public abstract 메소드이름(매개변수목록); 추상메소드이다. } 인터페이스의 모든 멤버는 public이다. interface PlayingCard { public sta..
Java/객체 지향
추상 클래스(abstract class) 미완성 설계도, 미완성 메소드를 갖고 있는 클래스 abstract class Player { abstract void play(int pos); abstract void stop(); } 추상 메소드가 클래스내에 존재한다면 그것은 추상 클래스이다. 그리고 abstract를 붙여주어야한다. 다른 클래스 작성에 도움을 주기 위한것. 인스턴스 생성 불가 Player p = new Player(); //에러 이것은 추상 클래스이기 때문에 인스턴스를 생성할 수 없다 그래서 상속을 통해 추상 메소드를 완성시켜야 인스턴스 생성이 가능하다 class AudioPlayer extends Player { void play(int pos) { // ... } void stop() {..
제어자 클래스와 클래스의 멤버(멤버 변수, 메소드)에 부가적인 의미 부여 접근 제어자 = public, protected, (default), private 그 외 = static, final, abstract, native, transient, synchronized, volatile, strictfp 하나의 대상에 여러 제어자를 같이 사용 가능하다.(접근 제어자는 하나만 사용 가능하다) public class ModifierTest { public static final int WIDTH = 200; public static void main(String[] args) { System.out.println("WIDTH="+WIDTH); } } 그 외 접근자 종류 제어자 대상 의미 static 멤버변수..
생성자 iv 초기화를 편하게 하기 위해 만든것 인스턴스가 생성 될때마다 호출되는 인스턴스 초기화 메소드 인스턴스 생성시 수행할 작업(iv 초기화)에 사용 생성자는 이름이 클래스 이름과 같아야 한다.(매개변수가 있던 없던 이름이 같으면 생성자이다) 리턴값이 없다 (void를 붙이지 않는다) - 항상 반환값이 없기때문에 붙이지 않는다. 모든 클래스는 반드시 생성자가 있어야한다. Card c = new Car(); 여기서 Car()가 생성자를 호출해주는것이다. (기본생성자) 기본 생성자 매개변수가 없는 생성자 클래스 이름() {} == 아무것도 적혀있지 않다 생성자가 하나도 없을 때만, 컴파일러가 자동 추가 만약 생성자가 하나이상 있는데 아무것도 적혀있지 않은 생성자가 없다면 오류가 발생한다. class Da..
오버로딩 하나의 클래스 안에 같은 이름의 메소드 여러개를 정의하는것 대표적인 오버로딩으로 println이 있다. println ( ) 안에 있는 타입을 자동적으로 인식하고 그것을 판별하여 출력한다 오버로딩이 성립하기 위한 조건 메소드 이름이 같아야한다. 매개변수의 갯수 또는 타입이 달라야한다. 반환 타입은 영향이 없다. int add(int a, int b) { return a+b; } int add(int x, int y) { return x+y; } 메소드 이름이 같다. 매개변수의 갯수와 타입이 같다. 타입은 상관없다 == 오버로딩이 아니다 int add(int a, int b) { return a+b; } long add(int a, int b) { return (long)(a+b); } 메소드 이..
스택(Stack) 박스를 쌓는것을 생각해보자 우리는 박스를 하나씩 차곡차곡 쌓일테고 꺼낼땐 가장 나중에 쌓은 상자를 빼면서 사용한다. 중간에 있는것은 뺄수 없다. 호출 스택 메소드 수행에 필요한 메모리 공간 메소드가 호출되면 호출스택에 메모리 할당, 종료되면 해제 예를 들어 가장 처음에 main메소드를 실행시키고 main안에 println이 있다면 main은 println을 호출한다. 그럼 스택에는 가장 밑에 main 그리고 main이 부른 println이 쌓이고 실행이 되면서 println이 빠져나오면서 println()이 종료된다. 그리고 남은 main도 종료가 되면서 빠져나오게 된다. 이로써 스택에는 아무것도 남아있지 않는것이다.
메소드란? 문장들을 묶어놓은것 장점 1. 코드의 중복을 줄일수 있다. 2. 코드의 관리가 쉽다. 3. 코드를 재사용할 수 있다. 4. 간결해서 이해하기 쉬워진다. 1. 중복된 코드의 간결화 작업단위로 문장들을 묶어서 이름을 붙여 사용한다. ( 중복 코드제거, 관리 용이, 재사용가능 ) public static void main(String[] args) { ... for( int i = 0; i < 10; i++ ) { numArr[i] = (int)(Math.random() * 10); } for(int i = 0; i < 10; i++) { System.out.printf("%d", numArr[i]); } System.out.println(); for(int i = 0; i < 10; i++) { ..
우리는 다양한 변수의 종류에 대해서 알아보았다 ..변수를 클릭하면 자세한 내용을 알 수 있다 이번엔 객체 지향에서 변수의 종류에 대해서 알아보자 선언 위치에 따른 변수의 종류 class Variables { int iv; static int cv; void method() { int lv = 0; } } 영역에 따른 변수는 종류가 정해져있고 이는 후에 객체 지향을 할때 굉장히 중요하게 작용한다. 영역은 크게 두개로 나뉜다.클래스 영역(iv)과 메소드 영역(lv) 클래스 영역 ( 클래스 영역은 변수 or 메소드선언만이 가능하다 ) iv = 인스턴스 변수 cv = 클래스 변수(static 변수, 공유 변수) - static이 붙어야만 한다. 메소드 영역 ( 메소드는 안에 내용이 적혀있지 않다면 선언한것이고,..
객체 지향 언어의 역사 80년 초 소프트웨어의 위기 - 시대의 빠른 변화를 쫒아가기 어려움 해결책으로 절차적인 언어 방식에서 객체 지향 언어 방식을 도입하기 시작했다. 기존의 많이 사용하던 C에 객체 지향 개념을 얹은 C++이 탄생했다 하지만 C++의 학습은 생각보다 굉장히 어려웠고 객체 지향 개념이 퍼지지 못했다 그 후 90년대 C++에서 너무 어렵거나 잘 사용하지 않는 개념을 정리한 JAVA의 등장으로 객체 지향 언어를 보편화에 큰 영향을 끼침 객체 지향 언어 = 프로그래밍 언어 + 객체 지향 개념(규칙) 이다. 객체 지향 언어 객체 지향 언어는 코드의 재사용성이 높고, 유지보수가 용이하며, 중복 코드를 제거하는 기능이 많다. 특히 유지보수가 용이한것이 얼마나 좋은것이냐 하면 빠른 변화에 쉽게 대채할..
★ 다형성 여러가지 형태를 가질수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는것 자손 타입의 참조 변수로 조상 타입의 객체를 가리킬수 없다 class Tv { boolean power; int channel; void power() { power = !power } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { String text; void caption() { // 내용내용... } } 지금까지 우리가 객체를 생성할땐 Tv t = new Tv(); SmartTv s = new SmartTv(); 이렇게 진행했다. 하지만 다형성은 다르다. Tv t = new Smar..