Language
-
[JAVA] 다형성(Polymorphism)Language/Java 2019. 11. 9. 21:18
자바에서 다형성이란 같은 이름을 가졌지만 상황에 따라 다른 형태로 해석될 수 있다는 의미입니다. 예를 들어 A 씨는 회사에서는 개발자이고, 집에서는 딸이고, 학원에서는 수강생입니다. 모두 같은 A 씨이지만 각각의 상황에 따라 맡고 있는 역할과 하는 일들이 다릅니다. 이처럼 하나의 객체가 여러 타입을 가질 때, 이를 다형성이라고 합니다. 이러한 다형성은 반드시 상속 관계에서만 성립하는데, 예를 들어 People이라는 클래스를 상속받는 Employee클래스와 Customer클래스가 있습니다. class People{ public void eat(){ // 먹기 } public void breath(){ // 숨쉬기 } ... } class Employee extends People{ public void w..
-
[JAVA] 추상클래스와 인터페이스Language/Java 2019. 11. 9. 16:05
오늘은 그동안 저를 참 헷갈리게 해왔던, 추상 클래스(abstract class)와 인터페이스에 대해 정리해보겠습니다. 추상 클래스란? 추상 클래스는 말 그대로 추상적인 클래스를 의미합니다. 잘 와 닿지 않죠? 변수나 메소드를 가지고 있는 일반적인 형태의 클래스가 바로 실체 클래스입니다. 그리고 추상 클래스는 변수나 메소드가 구체적이지 않은 클래스이고, 그래서 추상 클래스는 어떤 실체 클래스의 공통된 변수나 메소드를 포함하고 있다고 생각할 수 있습니다. 예를 들어 강아지 클래스, 고양이 클래스, 돼지 클래스가 있다고 가정해봅시다. 이 세 클래스가 공통으로 가지고 있는 변수나 메소드에는 어떤 것들이 있을까요? 소리를 낸다는 액션을 공통의 메소드로 표현할 수 있겠죠. 물론 멍멍, 냥냥, 꿀꿀 각 동물들이 내..
-
[JAVA] String 생성 방법(new / literal)Language/Java 2019. 10. 20. 17:39
String 타입의 변수를 생성할 때는 두 가지 방법이 있습니다. 바로 new 키워드를 사용하는 방법과 리터럴을 이용하는 방법입니다. 비슷해 보이지만 두 방법에는 큰 차이가 있습니다. 바로 저장되는 공간이 다르다는 건데요. 우선, new 키워드를 사용하는 경우는 이전 포스팅에서도 자주 언급했습니다. heap메모리 영역에 실제 데이터가 저장되고 그 메모리를 참조하는 주소 값을 String 변수에 저장하는 것입니다. 따라서 new 키워드를 이용해 String객체를 생성하면 아무리 같은 문자열 데이터를 가지고있다 하더라도 서로 다른 주소 값을 갖게 됩니다. public class TestString { public static void main(String[] args) { String str1 = new S..
-
[JAVA] String/String Builder/String Buffer 비교Language/Java 2019. 10. 20. 16:34
자바에서 문자열을 이용할 때 주로 사용하는 대표적인 클래스가 바로 String클래스입니다. 하지만 String 클래스는 immutable속성이 있어서 문자열을 빈번하게 수정하는 경우 성능 저하가 일어날 수 있습니다. 따라서, 문자열을 사용하는 경우 String클래스 대신 String Builder, String Buffer를 사용하라는 이야기를 들어보셨을 텐데요. 그렇다면 왜 String을 사용하는 것이 좋지 않은지, String Builder와 String Buffer와는 어떻게 다른지 알아보겠습니다. String 클래스 우선 String 클래스의 내부 구조를 보겠습니다. String 클래스 내에 문자열을 저장하는 변수를 보면 final char 타입의 배열로 선언되어있음을 알 수 있습니다. final..
-
[JAVA] Static이란? / Static변수 및 메소드 호출Language/Java 2019. 10. 6. 17:20
지난 포스팅에서 Static키워드를 사용하면 프로그램 실행 시 메모리에 할당되고 이는 프로그램 종료 시까지 유지된다고 했습니다. 이러한 이유때문에 static변수나 static메소드들은 해당 클래스의 객체를 생성하지 않고도 접근할 수 있다는 특징이 있습니다. 이 내용을 설명하기에 앞서 non-static변수, 메소드에 접근하는 방법에 대해 먼저 설명을 해야 할 것 같은데요. 이제 조금 익숙한 그림입니다. 프로그램을 실행한 직후에는 Heap영역에 Car객체가 없을 것입니다. 그림에 보시는 것과 같이 메모리에 객체가 생성되는 것은 new키워드를 통해 Car객체를 생성했을 시점인데요. public class Test{ public static void main(String [] args){ Car benz =..
-
[JAVA] Static이란? / Garbage CollectorLanguage/Java 2019. 10. 6. 15:53
public static void main(String[] args) { } 자바 프로젝트가 실행될 때, 코드의 시작이 되는 부분이 바로 main메소드라는 것은 다들 아실 텐데요. 'public'은 접근 제한자, 'void'는 리턴 타입, 'main'은 메소드 이름인데 'static'은 뭐지? 하는 생각을 해보셨을 수도 있습니다. 오늘은 static이 무엇인지, 어떤 역할을 하는지에 대해 알아보겠습니다. 우선, static키워드를 사용하면 해당 데이터는 프로젝트가 실행될 때 메모리 Heap이 아닌 별도의 공간에 자동으로 올라가고 프로그램이 종료될 때까지 남아있게 됩니다. Garbage Collector 여기서 알아야 할 개념 중 하나가 Garbage collector인데요. JVM이 수행하는 여러 가지 ..
-
[JAVA] 접근제한자(Access Modifier)Language/Java 2019. 10. 6. 14:14
지난 포스팅에서 Class내에 선언한 값을 외부에서 직접 접근할 수 없게 하기 위해서 private라는 접근제한자를 지정했습니다. 오늘은 접근제한자의 역할과 종류에 대해서 알아보겠습니다. 접근제한자란 말 그대로 접근을 제한하는 기능을 합니다. 접근제한자의 종류는 다음과 같습니다. 접근제한자(Access Modifier) 역할(접근 가능 범위) 비고 Public 어디서나 누구나 접근 가능 클래스, 변수, 생성자, 메소드에 적용 가능 Protected 같은 패키지 내에서 접근 가능 또는, 상속관계에 있는 경우 접근 가능 변수, 생성자, 메소드에 적용 가능 (생략) 같은 패키지 내에서만 접근 가능 클래스, 변수, 생성자, 메소드에 적용 가능 Private 같은 클래스 내에서만 접근 가능 변수, 생성자, 메소드..
-
[JAVA] Class와 객체Language/Java 2019. 10. 5. 16:24
자바에서 가장 핵심적인 개념을 꼽자면 단연 객체(Object)라고 할 수 있습니다. 그렇다면 객체란 무엇일까요? 논리적 개념으로는 실제 세계의 모든 유, 무형의 모든 것들을 의미합니다. 모든 객체들은 각각 고유의 속성과 기능을 가질 수 있습니다. 자동차를 예로 들면, 자동차는 크기, 색깔 등의 속성을 가지고, 주행, 멈춤 등의 기능을 가지고 있죠. 이러한 속성과 기능을 포함한 자동차라는 객체가 생성될 수 있습니다. 자바를 처음 시작할 때 Class와 객체의 개념을 혼동하는 분들이 많은데 Class와 객체는 아주 비슷하지만 다른 개념입니다. 이 차이를 설명할 때 흔히들 붕어빵을 예로 들어 Class는 붕어빵 틀이고, 객체는 붕어빵이라고 설명하곤 합니다. 더 구체적으로, 위에서 언급한 자동차를 이용해 Cla..