Java 관련/Java

    [Java] 제네릭(Generic)

    [Java] 제네릭(Generic)

    제네릭(generic)은 개발자가 의도한 타입만 저장할 수 있도록 하는 것으로 데이터의 타입을 강제하는 것입니다. 즉, 타입을 일반화한다(generalize)는 것을 의미합니다. 제네릭은 메소드나 클래스에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다. 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가집니다. 1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다 2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다. class MyArray { T element; void setElement(T element) { this.element = element; } T getElement() { retur..

    [Java] 싱글톤 패턴(Singleton pattern)

    [Java] 싱글톤 패턴(Singleton pattern)

    싱글톤 패턴(Singleton pattern)이란? 싱글톤 패턴이란 어떤 클래스가 생성자가 수차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 한 번만 메모리를 할당하며 그 메모리에 객체를 만들어 사용하는 패턴입니다. 생성자의 호출이 반복적으로 이루어져도 실제로 생성되는 객체는 최초 생성된 객체를 반환해 줍니다. 이런 싱글톤 패턴은 자바에서 많이 사용합니다. ​ 1. Singleton.java package com.singleton; // singleton pattern : 메모리(heap)에 객체를 한번만 생성 public class Singleton { // 2. 객체를 확인할 주소(reference) 변수 선언 private static Singleton singleton; // 1. 보통은 ..

    [Java] 내부 클래스(inner class)

    [Java] 내부 클래스(inner class)

    1. 내부 클래스(inner class) 내부 클래스란 어떤 클래스 내부에 선언된 또 하나의 클래스를 의미합니다. 이런 내부 클래스는 외부 클래스(outer class)에 대해 두 클래스가 서로 긴밀한 관계를 맺고 있을 때 선언이 가능합니다. 또한 클래스안에 클래스를 만드는 건 가능하지만 해당 페이지에서만 사용하게 만들어야 합니다. 따라서 public 클래스는 하나만 있어야 합니다. class Outer { // 외부 클래스 ... class Inner { // 내부 클래스 ... } ... } ​ ​ ​ 2. 내부 클래스의 장점 1. 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할 수 있게 됩니다. 2. 서로 관련 있는 클래스를 논리적으로 묶어서 표현함으로써, 코드의 캡슐화를 증가시킵니다. 3. 외..

    [Java] 인터페이스(interface)를 이용한 도형의 넓이 구하기 & 캡슐화

    [Java] 인터페이스(interface)를 이용한 도형의 넓이 구하기 & 캡슐화

    캡슐화(Encapsulation)는 캡슐안에 어떤 가루약이 들어 있는지 은닉된 것처럼 코드를 은닉하는 것을 말합니다. 예를 들어 우리가 지금까지 사용하는 출력 명령어 System.out.println();의 경우 해당 메소드를 계속해서 사용하고는 있지만 해당 메소드의 코드는 알지 못합니다. 해당 메소드의 코드는 캡슐화되어 코드가 은닉되었기 때문입니다. 이런 점으로 캡슐화는 정보 은닉이 가능하다는 장점을 가지고 있습니다. 캡슐화는 변수와 메소드를 하나의 추상화된 클래스로 묶는 과정으로 캡슐화를 이용해서 변수와 메소드가 독립적으로 동작되지 않도록 만듭니다. 캡슐 속 객체는 데이터와 메소드를 포함하고 있으므로 따로 분리할 수는 없습니다. ​ 인터페이스를 이용한 도형의 넓이를 구하는 코드 1. Area.java..

    [Java] 추상클래스(abstract class)

    [Java] 추상클래스(abstract class)

    1. 추상메소드(abstract method) 추상 클래스를 알아보기 전에 추상메소드(abstract method)부터 알아보겠습니다. 추상메소드는 보디(body)가 없고 껍데기만 있는 메소드입니다. abstract 리턴타입 메소드명(); 위와 같이 선언만 되어있고 구현되지 않은 메소드입니다. 선언할 때 abstract 키워드를 사용합니다. 구현되어 있지 않기 때문에 {}를 사용할 필요 없이 세미콜론(;)으로 문장이 끝났습니다. 이런 추상메소드는 상속받는 자식 클래스에서 반드시 구현이 되어야 합니다. 즉, 오버라이딩되어야만 사용할 수 있는 메소드입니다. 만약 자식 클래스에서도 구현되지 않았다면 그 자식의 자식 클래스에서 구현이 되어야 하겠네요. 공통적인 부분은 미리 만들어진 것을 사용하지만 상속받아 사용..

    [Java] 상속과 다형성

    [Java] 상속과 다형성

    AAA.java package com.aaa; public class AAA { private int abc; public AAA() { System.out.println("AAA 생성"); } public AAA(int abc) { //this : 나(객체) this.abc = abc; System.out.println("AAA 생성 -> abc : " + abc); } public int getAbc() { return abc; } public void setAbc(int abc) { this.abc = abc; } public void prn() { System.out.println("AAA의 prn() 메소드"); } } ​ BBB.java package com.bbb; import com.aaa..

    [Java] 다형성(polymorphism)

    [Java] 다형성(polymorphism)

    다형성 다형성은 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 말합니다. 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 할 수 있습니다. 부모 타입 형태로 자식 객체의 행위를 하는 것이죠. 오버라이드랑 매우 비슷한 특징을 가지고 있습니다. 다형성의 특징은 다음과 같습니다. ​ 1. 부모의 타입으로 자식 생성 Parent p = new Child(); 2. 부모의 이름으로 자식 대입 Child c = new Child(); Parent p = c; 3. 부모의 매소드를 통해 자식의 매소드 호출 같은 부모를 상속받은 자식 클래스는, 컴파일 시 형 변환 가능한 것처럼 작성되지만, 실행시(runtime)시 ClassCastException을 발생시킴. ​ 다형성은 이와 같..

    [Java] 상속(inheritance)

    [Java] 상속(inheritance)

    자바는 객체지향프로그래밍(OOP)라고 했습니다. 이런 객체지향언어의 대표 특징 4가지가 있는데 그중 2가지가 다형성과, 상속이고 나머지 2가지는 추상화와 캡슐화입니다. 이번 포스팅에서는 그 중 상속에 대해 중점으로 보면서 다형성도 같이 알아보겠습니다! ​ 1. 상속 상속이란 클래스에 다른 클래스의 기능을 추가하거나 재정의 하는 것을 말합니다. 상속으로 다른 클래스에 있는 메소드와 필드를 물려받아 사용하게 되는 클래스를 만들 수 있게 됩니다. 이런 기존의 클래스 상속해 주는 클래스를 부모클래스, 슈퍼(super)클래스, 상위클래스, 기초클래스라고 하며 상속받는 클래스를 자식클래스, 하위클래, 파생클래스라고 부릅니다. 또한 상속을 위한 키워드는 extends입니다. 자식클래스와 부모클래스를 벤다이어그램으로 ..

    [Java] 오버로딩(Overloading), 오버라이딩(Overriding)

    [Java] 오버로딩(Overloading), 오버라이딩(Overriding)

    1. 오버로딩(Overloading) 오버로딩(overloading)은 같은 이름의 메소드를 중복하여 정의하는 것입니다. 오버로딩을 사용하여 메소드에 사용되는 이름을 절약할 수 있으며 오버로딩을 이용해 메소드를 만들어 놓으면 메소드를 호출할 때 전달해야 할 매개변수의 타입이나 개수에 대해 신경을 쓰지 않고 호출할 수 있게 됩니다. 오버로딩은 객체 지향 프로그래밍의 특징 중 하나인 다형성(polymorphism)을 구현하는 방법입니다. 이런 오버로딩에도 충족해야 하는 조건이 있습니다. 1. 메소드의 이름이 같아야 합니다. 2. 매개변수의 개수나 타입이 달라야 합니다. ​ ​ MySum.java package com.test01; public class MySum { public int sum(int i) ..

    [Java] 클래스(class)

    [Java] 클래스(class)

    1. 클래스(class)란? 자바는 객체 지향 프로그래밍(Object Oriented Programming : OOP) 언어입니다. 객체지향언어에서는 모든 데이터를 객체(object)로 취급하고 객체가 프로그래밍의 중심이 되어야 합니다. 객체란 일상에서 볼 수 있는 사물로 설명할 수 있습니다. 사물의 상태와 행동처럼 객체를 구체화하는 형태의 언어라고 볼 수 있습니다. 여기서 클래스란 이런 객체를 만들어 내기 위한 설계도와 같다고 볼 수 있습니다. 게임으로 예를 들어보면 스타크래프트에 배럭이라는 건물을 보시면 유닛을 찍어내는 버튼이 있습니다. 이 버튼이 마린을 생산해낼 수 있는 설계도입니다. 이 생산 버튼을 통해 마린(객체)를 많이 생산합니다. 자바도 마찬가지로 이런 설계도인 클래스를 이용해 여러 객체를 ..