제네릭(Generic) 제네릭(Generic)은 '일반적인'이라는 뜻을 지니고 있다. 자바에서 제네릭이란 타입을 내부에서 지정하는 것이 아닌 외부에서 사용자가 지정하는 것을 말한다. 필요에 의해 지정할 수 있는 일반(Generic) 타입을 사용한다는 의미이다. 예를 들면, 아래 Basket 클래스는 오직 String 타입만을 저장할 수 있다. 따라서 여러 타입의 데이터를 저장할 수 있는 객체를 만들려면, 그 수만큼 클래스를 생성해야 한다. class Basket { private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item..
지난 글에 이어서 조금 더 긴 코드로 인터페이스의 장점에 대해 알아보자. 상황은 다음과 같다. 카페를 운영하는 사람이 있다. 단골은 매일 같은 음료만 먹는다 단골손님 A는 아이스 아메리카노를 먹는다. 단골손님 B는 딸기라떼를 먹는다. 위와 같은 내용을 코드로 옮겨보면 다음과 같을 것이다. class CafeCustomer { public String CafeCustomerName; public void setCafeCustomerName(String CafeCustomerName) { this.CafeCustomerName = CafeCustomerName; } } class CafeCustomerA extends CafeCustomer { } class CafeCustomerB extends CafeC..
final 키워드 영어로 '최종의', '마지막의'라는 뜻을 지니고 있는 final 키워드는 필드, 메서드, 클래스 앞에 위치할 수 있으며 각각 위치에 따라 의미가 조금씩 다르다. 조금씩 다른 의미를 지녔지만 공통적으로 변경이 불가능하고 확장할 수 없다는 특징을 가지고 있음을 알 수 있다. 이를 코드로 간략히 표현해보면 다음과 같다. final class FinalEx { // 확장/상속 불가능한 클래스 final int x = 1; // 변경되지 않는 상수 final void getNum() { // 오버라이딩 불가한 메서드 final int localVar = x; // 상수 return x; } } 정리하면 final 제어자가 앞에 붙으면 해당 대상은 더 이상 변경이나 확장이 불가능한 성질을 지니게 ..
추상화 추상화는 앞서 알아본 상속, 캡슐화, 다형성과 함께 객체지향 프로그래밍의 네 가지 기둥 중 하나이다. 자바에서의 추상화는 객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다. 이전에 살펴본 상속이 상위 클래스를 이용해 하위 클래스를 정의하는 것이라고 한다면, 추상화는 반대로 기존 클래스들의 공통점을 뽑아서 상위 클래스를 만들어내는 것이라고 할 수 있다. 위 그림은 추상화에 대해 잘 나타내고 있다. 자동차와 오토바이의 공통된 기능을 추출해 Vehicle이라는 클래스에 담았다고 생각하면 된다. 이런 식으로 공통적인 속성과 기능을 모아주면 코드의 중복을 줄일 수 있고, 클래스 간의 관계설정도 쉬워지며 유지/보수가 용이해진다. 자바에서의 추상화는 두 가지 문법요소를 이용해 구현되는데, 추상 클래..
이 예제는 어제 수업시간에 배운 것이다. 다형성이라는 객체 지향 프로그래밍의 개념이 어떻게 실제로 사용되는지를 쉽게 볼 수 있다. 먼저 손님이 카페에 방문하여 커피를 주문하는 상황을 가정하자. class Coffee { int price; public Coffee(int price) { this.price = price; } } class Americano extends Coffee {}; class CaffeLatte extends Coffee {}; class Customer { int money = 50000; } 하나의 멤버와 생성자를 가진 Coffee 클래스와 그 하위 클래스 Americano, CaffeLatte가 선언되어 있다. Customer 클래스는 손님을 나타내는데, 기본적으로 5만 원..
참조 변수의 타입 변환 기본 자료형과 마찬가지로 참조 변수도 형 변환이 가능하다. 참조 변수의 형 변환은 사용할 수 있는 멤버의 개수 조절을 의미하는데, 자바의 다형성을 이해하는 데 있어 필수적인 개념이라고 할 수 있다. 참조 변수의 타입 변환에는 다음의 세 가지 조건이 필요하다. 서로 상속 관계에 있는 상위 - 하위 클래스 사이에서만 가능하다. 하위 클래스에서 상위 클래스로의 형 변환(업 스케일링)은 형 변환자(괄호)를 생략할 수 있다. 상위 클래스에서 하위 클래스로의 형 변환(다운 스케일링)은 형 변환자(괄호)를 반드시 명시해야 한다. 예시를 통해 조금 더 살펴보자. public class VehicleTest { public static void main(String[] args) { Car car..
다형성(Polomorphism)이란 자바의 객체지향 프로그래밍의 네 가지 기둥 중 하나이자, 객체지향 프로그래밍에서 가장 중요하다고 할 수 있는 부분이다. 자바에서 다형성이란 하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다. 자바 프로그래밍에서 다형성이란 한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것이며, 더 직관적으로 보자면 상위 클래스 타입의 참조변수를 통해 하위 클래스의 객체를 참조할 수 있도록 허용된 것이라 할 수 있다. 도대체 무슨 말인지 잘 감이 오지 않는데, 다음의 쉬운 예를 보자. //참조변수의 다형성 예시 class Friend { public void friendInfo() { System.out.println("나는 당신의 친구입니다."); } }..
앞선 글에서 캡슐화의 목적이 데이터의 은닉 데이터의 보호 라는 것을 언급했다. Getter와 Setter 메서드는 이 캡슐화의 목적을 달성하면서도 클래스 내부의 변수에 접근하고 싶을 때 사용하는 방법이다. 즉, 외부에서 데이터로의 직접 접근이 아닌 메서드를 통한 간접 접근을 가능하게 만들어주는 메서드라 할 수 있다. 아래의 예를 보자. public class GetterSetterTest { public static void main(String[] args) { Worker w = new Worker(); w.setName("김코딩"); w.setAge(30); w.setId(5); String name = w.getName(); System.out.println("근로자의 이름은 " + name); ..
자바 프로그래밍에서 제어자(Modifier)는 클래스, 필드, 메서드, 생성자 등에 부가적인 의미를 부여하는 키워드를 말한다. '파란 하늘', '붉은 노을'에서 '파란'과 '붉은' 처럼 명사를 꾸며주는 형용사와 같다고 생각하면 편하다. 자바 프로그래밍에서 제어자는 크게 두 종류로 나뉘는데, 각각은 다음과 같다. 하나의 대상(클래스, 필드, 메서드 생성자)에는 여러 가지 제어자가 사용될 수 있으나, 접근 제어자는 하나밖에 사용할 수 없다는 것이 특징이다. 주로 static, final, abstract등을 사용하는 기타 제어자에 관해선 나중 글에 보기로 하고, 여기서는 접근 제어자에 대해서 알아보도록 하자. 접근 제어자(Access Modifier)는 자바 객체지향 프로그래밍의 캡슐화 구현을 위한 핵심적인..
캡슐화 캡슐화는 상속과 마찬가지로 자바 객체지향 프로그래밍의 중요 개념 중 하나이다. 먼저 간단하게 정의하자면, 캡슐화란 관련이 있는 필드와 메서드를 하나의 클래스로 묶어 데이터를 외부로부터 보호하는 일이다. 구체적으로 나누자면 첫 째로는 데이터 보호, 두 번째로는 내부 데이터의 불필요한 노출 방지에 그 목적이 있다. 즉, 캡슐화의 가장 큰 장점은 데이터 은닉(data hiding)에 있다고 볼 수 있다. 외부로부터 객체의 필드와 메서드가 함부로 변경 되는 것을 막고, 데이터가 변경 되더라도 다른 객체에 영향을 주지 않도록 할 수 있다. 이는 코드 확장시에 오류를 최소화 하는데 도움이 되며, 당연히 유지보수에도 장점이 된다. 패키지 패키지(Package)는 관련이 있는 클래스와 인터페이스의 묶음을 의미한..
- Total
- Today
- Yesterday
- 야경
- 세계여행
- 스프링
- 스트림
- 여행
- java
- 자바
- 리스트
- RX100M5
- 세모
- 유럽여행
- 백준
- 맛집
- spring
- 알고리즘
- Backjoon
- 칼이사
- 남미
- Python
- 세계일주
- a6000
- 지지
- 파이썬
- 동적계획법
- 유럽
- Algorithm
- 기술면접
- 중남미
- BOJ
- 면접 준비
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |