Programming Language/Java 21

[Java] 11. OOP - 내부 클래스(Inner Class), 익명 클래스

내부 클래스(inner class)내부 클래스는 AWT나 Swing같은 GUI Application 이벤트 처리를 제외하고는 잘 쓰이지 않는다.이런 게 이렇게 작동하는구나 정도만 이해하고 넘어가자내부 클래스란?내부 클래스: 클래스 내에 선언된 클래스클래스에 다른 클래스 선언하는 이유 : 두 클래스가 서로 긴밀한 관계에 있기 때문내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점이 있고, 외부에는 불필요한 클래스를 감춰 코드 복잡성을 줄일 수 있다.class A { // class B { // }}class A는 외부 클래스, class B는 내부 클래스이다.이 때 내부 클래스인 B는 외부 클래스인 A를 제외하고..

[Java] 10. OOP - 인터페이스(Interface)

인터페이스(Interface)인터페이스란?일종의 추상 클래스추상 클래스처럼 추상 메서드를 갖지만 추상화 정도가 높아서 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다.오직 추상메서드와 상수만을 멤버변수로 가질 수 있다.추상 클래스를 '미완성 설계도'라고 하면, 인터페이스는 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도' 라고 할 수 있다.인터페이스는 다른 클래스를 작성하는데 도움 줄 목적으로 작성된다.인터페이스의 작성class 대신 interfaceinterface에도 클래스와 같이 접근 제어자로 public 또는 default를 사용할 수 있다.interface 인터페이스이름 { public static final 타입 상수이름 = 값; public ab..

[Java] 09. OOP - 추상 클래스(abstract class)

추상 클래스(abstract class)미완성 설계도로 완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성할 수 없다.추상 클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.추상 클래스는 새로운 클래스를 작성하는데 있어서 바탕이 되는 조상클래스로서의 중요한 의미를 갖는다abstract class 클래스이름 { // ...}키워드 'abstract'를 붙이기만 하면 된다추상 클래스에도 생성자가 있으며, 멤버변수와 메서드를 가질 수 있다추상메서드(abstract method)선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 메서드. 미완성 메서드임미완성으로 남겨둔 이유는?메서드의 내용이 상속받는 클래스에 따라 달라질 수 있기 때문에 조상 클래스에서는 선언부만을 작성하고, 주석을 ..

[Java] 08. OOP - 다형성(polymorphism)

다형성(polymorphism)여러가지 형태를 가질 수 있는 능력자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 구현조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다공통으로 포함된 인스턴스만 접근할 수 있다같은 타입의 인스턴스라도 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다반대로 자손 타입의 참조변수로 조상 타입을 참조할 수 없음(컴파일 에러)참조변수가 사용할 수 있는 멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다참조변수의 형변환기본형 변수와 같이 참조변수도 형변환이 가능함단, 서로 상속 관게에 있는 클래스 사이에서만 가능함 (부모 자식)Up-casting : 자손타입을 부모타입에 // 형 변환 생략 가능(..

[Java] 07. OOP - 상속과 접근제어자

상속과 접근제어자상속(inheritance)기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것class 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다class Child extends Parent { // ...}조상 클래스 : 상속해주는 클래스 (a.k.a 부모, 상위(super), 기반(base) 클래스)자손 클래스 : 상속 받는 클래스 (a.k.a 자식, 하위(sub), 파생된(derived) 클래스)생성자와 초기화 블럭은 상속되지 않음. 멤버만 상속됨자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다class Tv { boolean power; // 전원상태(on/off) int channel; // 채널 void power() ..

[Java] 06. OOP - 클래스와 객체

클래스와 객체클래스와 객체의 정의클래스의 정의 : 객체를 정의해 놓은 것클래스의 용도 : 객체를 생성하는데 사용된다객체와 인스턴스클래스의 인스턴스화(instantiate) : 클래스로부터 객체를 만드는 과정인스턴스 : 어떤 클래스로부터 만들어진 객체ex) Tv클래스로부터 만들어진 객체를 Tv클래스의 인스턴스라고 함인스턴스의 생성과 사용클래스명 변수명; // 참조변수 선언변수명 = new 클래스명();Tv t;t = new Tv();객체 배열객체 배열을 다루기 위한 참조 변수 배열을 생성객체를 생성해서 배열의 각 요소에 저장Tv[] tvArr = new Tv[3]; // 참조변수 배열을 생성// 객체를 생성해서 배열의 각 요소에 저장tvArr[0] = new Tv();tvArr[1] = new Tv();t..

[Java] 05. 배열

배열배열 생성 방법타입[] 변수이름 = new 타입[길이]길이가 0인 배열을 생성할 수 있다JVM이 모든 배열의 길이를 별도로 관리하고, '배열이름.length'를 통해서 배열의 길이에 대한 정보를 얻을 수 있다.배열은 한 번 생성하면 길이를 변경할 수 없다.공간이 부족해 배열의 길이를 변경해야 하는 경우 더 큰 길이의 새로운 배열을 생성한 다음 기존 배열의 값을 새로운 배열에 복사한다유효한 인덱스 범위를 넘어서면 ArrayIndexOutOfBoundsException이라는 예외가 발생한다코드를 변경해 배열의 길이가 바뀔 때, '배열이름.length'는 for문에서 알아서 값을 update 해준다.배열의 초기화배열 생성과 동시에 자동적으로 자신의 타입에 해당하는 기본값으로 초기화 됨선언과 생성을 동시에 ..

[Java] 04. 변수

변수 단 하나의 값을 저장할 수 잇는 메모리 공간 지역변수는 사용되기 전에 초기화를 반드시 해야 함 클래스변수와 인스턴스변수는 초기화를 생략할 수 있다 변수의 명명규칙 변수의 이름처럼 프로그래밍에서 사용되는 모든 이름을 '식별자(identifier)'라고 함 식별자는 같은 영역 내에서 서로 구분(식별)될 수 있어야 한다. 식별자를 만들 때는 다음과 같은 규칙을 지켜야 함 대소문자가 구분되며 길이에 제한이 없다 예약어(a.k.a. keyword, reserved word)를 사용해서는 안 된다(ex. true는 불가능, True는 가능) 클래스나 변수, 메서드의 이름으로 예약어를 사용할 수 없다 숫자로 시작해서는 안 된다 특수문자는 '_'와 '$' 만을 허용한다 ..

[Java] 03. 화면에서 입력받기

화면에서 입력받기 화면에서 입력받기 - Scanner import java.util.* // Scanner클래스를 사용하기 위해 import Scanner scanner = new Scanner(System.in); // Scanner 클래스의 객체를 생성 nextLine()이나 nextInt(), nextFloat()를 이용하기 String input = scanner.nextLine(); // 입력받은 내용을 input에 저장 int num = Integer.parseInt(input); // 입력받은 내용을 int타입의 값으로 변환 // float의 경우 Float.parseFloat() 사용 int num2 = scanner.nextInt(); // 정수를 입력받아 변수 num에 저장 예제 imp..

[Java] 02. 자바로 프로그램 작성하기

자바로 프로그램 작성하기 "Hello, world." 출력하기 코드 class Hello { public static void main(String[] args) { System.out.println("Hello, world."); // 화면에 글자를 출력 } } 위 코드를 editor를 통해 작성한 다음 Hello.java로 저장 (이 때, class의 이름 'Hello'가 대소문자까지 정확히 같아야 함) 자바 컴파일러를 통해 소소 코드(Hello.java)로 부터 클래스파일(Hello.class)를 생성 자바 인터프리터로 실행(java.exe) > javac Hello.java > java Hello Hello, world.java 코드 설명 class 클래스 이름 { /* 주석을 제외..