본문 바로가기

전체 글

(252)
211029 Java - 인터페이스(Interface) 정리 및 예제 인터페이스(Interface) "나는 이름만 줄테니 네가 알아서 정의해" 다른 클래스를 작성할 때 기본이 되는 툴을 제공하고 그 사이의 중간 매개 역할까지 담당하는 추상클래스를 의미한다. 그럼 implements로 받아주는 클래스에서 정의를 하면 됨. 자바에서는 원래 다중상속을 지원하지 않지만 인터페이스를 통해서는 다중상속이 가능하다. 인터페이스는 오로지 추상메소드와 상수만을 포함하지만, 추상클래스는 추상메소드를 포함해 생성자, 필드, 일반 메소드도 포함하고 있다는 점이 큰 차이점이다. 그래서 abstract는 추상메소드에만 들어있음! 인터페이스에는 따로 해주지 않아도 컴파일러가 인식을 해준다. 인터페이스 문법 처음부터 Pakage Explorer -> New에서 생성할 때 클래스가 아니라 인터페이스에서..
211028(3) Java - 추상클래스 추상 클래스 하나 이상의 추상메소드를 포함하는 클래스이다. 추상 메소드 : 자식 클래스에서 반드시 오버라이딩을 해야만 사용할 수 있는 메소드임. 선언부는 있고 구현부는 없어서 재정의를 해줘야한다. 반드시 사용해야 할 메소드를 추상 클래스에 추상메소드로 선언을 하면 이 클래스를 상속 받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의 해야함. Car에 대한 클래스에 gearType, door, color 모두 지정을 해놨다. 거기에 추상메소드로 "차마다 오디오 시설은 다르다? 반드시 그걸 네가 지정해야 돼"라며 정의를 해둔다. 추상클래스는 추상메소드를 한 개 이상은 꼭 포함하고 있어야한다. 그 외에는 일반 클래스와 모든 점이 같다. 그러니까 abstract 키워드와 추상메소드 한 개 이상을 포함한 것 ..
211028(1) Java - 접근제한자와 캡슐화 접근제한자 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. (접근을 하든가 못 하든가) 왜? 외부로부터 데이터 보호하고, 내부적으로 사용되는 부분을 감추기 위해서 사용한다. private - 같은 클래스 내에서만 접근 가능 - "내가 알아서 처리할 거니까 값만 던져주면 돼" (안에는 안 보이게 보호를 한다) default - 같은 패키지 내에서만 접근 가능 (그래서 다른 패키지에서 클래스를 여러개 만들어도 가능함) protected - 같은 패키지 내에서와 다른 패키지의 자손 클래스에서 접근 가능(상속 받았다면 가능함) public - 접근제한이 없음(가장 많이 사용) 지금까지 접근제한자를 하지 않은 이유는 자동으로 default가 지정되기 때문..
211027 java - 생성자에서 상수 초기화 (5) 생성자에서 상수 초기화 final로 정의된 값은 상수 라고 한다. 원래는 초기화 하자마자 값을 세팅해줘야 하지만 여기서는 특이하게 생성자에서 상수 초기화를 해줄 것이다. 이 의미는 메인에서 객체 생성을 할 때 인자에 값을 주게 되면 그 값이 바로 상수가 된다는 것이다. 이 후로는 바꿀 수 없는 값이라고 생각하면 됨 일단 코드 훑어 보기 class Card2 //extends Object 생략된 것임 { final int NUMBER; //상수는 풀대문자. //final은 원래는 초기화 하자마자 값을 세팅해야함 //그런데 유일하게 생성자에서 세팅하는 것도 가능하다. final String KIND; static int width = 100; static int height = 250; //생성자 오버로딩 ..
211027 Java - 클래스 상속 후 부모 생성자 호출 (4) 상속 받았을 때 생성자에서 생성하기 부모에게서 상속을 받았을 때 모두 쓸 수 있지만 그 중에서 쓸 수 없는 것이 있다. 바로 부모의 생성자와 초기화인데 생성자를 쓸 수 없지만 내부적으로 호출하는 방법은 가능하다. 그래서 이번에 호출 하는 방법을 배워 볼 것이다. ※프로젝트를 할 땐 3개로 나누어서 파일을 만들어줘야한다※ class Point { int x = 10; int y = 20; //Point(){} Point(int x, int y) { this.x = x; this.y = y; } } 인스턴스 변수 x, y이다. 별도의 메소드는 존재하지 않음 생성자명은 클래스 명과 동일한다. 매개변수는 몇 개가 와도 되고 타입이 달라도 됨. int x, int y 지역변수 변수명이 중복될 때!! 인스턴스 변수..
211027 Java - 상속과 오버라이딩, 상속 받고 생성자 호출 방법(3) public class Sample1027_2 { /** * @param args */ public static void main(String[] args) { CaptionTv ctv = new CaptionTv(); ctv.channel = 11; ctv.channelUp(); System.out.println("현재 채널 : " + ctv.channel); ctv.displayCaption("hello java..."); ctv.caption = true; //자막을 켰다. ctv.displayCaption("hello java..."); //여기서부터 찍힘 CaptionTv ctv2 = new CaptionTv(); ctv2.channel = 11; ctv2.channelDown(); ctv2.c..
211027 Java - 초기화 블록 순서, 생성자 없이 인스턴스 블록에서 구현 (2) 초기화 블록 순서 static //클래스 초기화 블록 { System.out.println("static{ }"); } //해당 클래스가 메모리에 한 번 실행될 때 딱 한 번 실행됨 { //인스턴스 초기화 블록 System.out.println("{ }"); } //인스턴스 객체가 생성 되면서 클래스 초기화 되고 얘가 오고 생성자가 그 다음 온다. Sample1027() //생성자 { System.out.println("Sample1027 생성자"); } static{ ... } 클래스 초기화 블록 클래스가 메모리에 올라갈 때 딱 한 번만 실행이 된다. 그러니 클래스 초기화 블록 static{ } 이게 가장 첫번째에 출력이 단 한 번 됨 { } 인스턴스 초기화 블록 객체 생성 시 메모리를 할당 받고 나서..
211027 Java - 생성자를 통한 인스턴스 복사 (1) 생성자를 통한 인스턴스 복사 class Car2 { String color; String gearType; int door; Car2() { this("white", "auto", 4); } Car2(Car2 c) //인스턴스 복사 { color = c.color; gearType = c.gearType; door = c.door; //c를 갖고와서 내거에다가 대입 } //나를 호출할 때 Car2(String color, String gearType, int door) { this.color = color; this.gearType = gearType; this.door = door; } } 일단 클래스 부분만 본다. 패키지 안에 이미 Car 클래스가 있어서 Car2로 클래스를 만들었다. 생성자를 생성할..