상속은 어떠한 클래스로부터 속성과 기능을 물려받아 그대로 사용할 수 있는 개념이라고 했다.한번더 정리하자면, 물려준 클래스를 부모 클래스라 하고(=슈퍼 클래스)물려받은 클래스를 자식 클래스(=서브 클래스) 라고 한다.자식클래스는 부모클래스의 멤버들을 갖고있고, 거기에 자신의 멤버를 추가 할 수 있는데이는, '자식클래스는 부모클래스가 갖고있는 속성과 기능이 많거나 같다'는 의미로 해석 할 수 있다.이제부터 상속의 특징에 대해 살펴본다. 자바 기술 면접에서 상속에 대한 질문이 빠지면 그것 참 섭한 일이다.이 상속에서 빠질수 없는 것이 '오버라이딩'오버라이딩은 '부모클래스의 기능을 자식 클래스에서 재정의해 사용하는것'을 말한다.아래 예제를 보자. 부모 클래스 ParentClass에 log라는 메서드를 하나 만..
상속은 만들어져 있는 클래스의 속성,기능을 새로운 클래스에게 제공해주는 개념이라 할 수 있다.ParentClass라는 클래스가 갖고 있는 멤버변수, 메서드를 새로 만들 클래스에서도 사용하게 된다고 생각해보자.코드를 똑같이 작성하게 되면 개발단계에서도 비효율적인 작업이 될 것이고,유지보수적인 측면에서도 코드의 수정,변경,삭제가 일어나면 두 클래스를 모두 손봐야 할것이다. 상속을 사용하는 방법을 코드로 배워본다. public class ParentClass {int score;String name; public ParentClass() { System. out .println ( "ParentClass constructor " ); } public void parentFun() { System. out .p..
객체가 가지고 있는 데이터를 외부로부터 변질되지 않도록 보호하는 방법에 대해 학습해보자.자바에서는 public, protected, (default), private 4개의 접근제한자를 제공한다. - public은 모든 동일 패키지 뿐 아니라, 외부 패키지에서도 모든 접근을 허용한다. - protected는 동일 패키지에서 만들어진 클래스에서만 접근을 허용 한다. (단, 외부패키지에서 상속을 받는 경우는 접근가능)- (default)는 접근키워드가 붙지 않은 기본 접근제어자로 동일 패키지에서 만들어진 클래스에서만 접근을 허용 한다.- private는 해당 클래스 외 모든 접근을 불허한다. 아래의 멤버 변수는 default로 선언이 되어있기 때문에, 외부에서 쉽게 데이터를 변경 할 수 있다. public ..
static 키워드는 중요한 개념이기도 하지만, 잘못 사용하면 낭패를 볼 수 있기 때문에 잘 이해하고 넘어가야 한다.우선 앞서 배운 클래스와 객체의 개념을 간단히 정리해보자. 1. 클래스는 객체를 만들기 위한 틀.2. new 연산자를 통해 객체를 생성하면 기본 생성자를 가장 먼저 호출.3. 메모리에는 객체의 주소가 올라가며, 참조변수는 주소를 담고 있음. 아래와 같은 클래스가 있다. public class EmployeeBank { String name; int amount = 0; public EmployeeBank(String name) { this.name = name; }public void saveMoney(int money) { amount += money ; System. out .print..
생성자는 객체를 생성하는 순간 가장 먼저 실행 되며, 객체의 초기화를 위해 존재한다.앞선 포스팅에서는 생성자를 명시적으로 작성하고 객체를 생성하였지만, 생성자를 작성하지 않아도 컴파일 시점에서 자동 생성이 된다. public class ObjectClass{int level;int score;String name; /* 주석처리 public ObjectClass{주석처리 됨.}*/ public void addScore(){score += 1000;} } 위의 코드처럼, 생성자 부분을 주석 처리하고 객체를 생성해보면 문제가 없음을 확인 할 수 있을것이다.다만 이렇게 생성자를 명시하지 않은 상태에서 자동으로 생성된 생성자는 '디폴트 생성자'라고 하며 파라미터가 없는 기본 생성자를 생성하게 된다. 파라미터가 ..
1. 메모리에서 객체 생성(동적 생성) 객체는 new 연산자를 이용하여 생성하면 메모리에서 동적 생성된다. 객체가 더 이상 필요 없게 되면(사용하지 않게되면) 가비지 컬렉터(Garbege Collector)에 의해서 제거 된다. 2. 레퍼런스 생성 객체의 주소를 변수에 저장하는것을 레퍼런스라고 한다.객체의 주소가 담긴 변수를 통해 객체에 접근 할 수 있다.실습을 통해 확인해본다.먼저 'ObjectClass'라는 클래스를 만든다.객체를 생성한후 주소값만 확인 하는 출력문을 작성할 것이므로 클래스만 만들어 놓은 상태에서 main메서드를 갖는 'MainClass' 클래스를 만들고 ObjectClass객체를 3개 생성한다.객체의 주소를 찍어본다. ObjectClass.java public class Object..
자바에서 메서드는 같은 작업, 같은 내용의 반복이 일어날때마다 같은 코드를 작성하지 않고클래스 내부에 코드를 만들어 재사용하기 위해 사용한다. 메서드의 방법은 아래와 같다. 이미 주석문에서 대략적인 설명을 작성했지만 반환형을 추가로 정리하면 void는 메서드를 호출할때 반환할 값이없다는것을 의미한다.반환하는 값이 있다면 반환되는 타입을 명시해주고 타입에 맞게 결과값을 리턴해주면 된다.예를들어 메서드의 반환형이 int라면 결과값을 정수형으로 return하여 메서드를 호출하는곳에 넘겨준다. 클래스안에 메서드를 만들어보자. getInfo(), getInfo(int x, int y), getInfo(String s1, Strings2) 라는 메서드를 만들었다.세 메서드 모두 이름이 똑같다. 잘 살펴보면 파라미터..
클래스는 속성(멤버 변수)과 기능(메서드), 생성자로 이루어져 있다.Granduer라는 클래스를 작성한다. 클래스가 만들어졌으면 이젠 new 연산자를 이용해서 객체를 생성 할 수 있다.Graunduer 클래스의 객체 myCar1, myCar2를 생성하여 멤버변수에 적절한 값을 대입해주고run(),stop(),info() 모든 메서드를 호출한다. 결과값을 확인해보자. myCar1, myCar2 객체에 멤버 변수의 값을 세팅해줬기때문에 호출된 메서드에는 각각의 값이 담겨 출력된다.주의깊게 살펴볼점은 객체를 생성하고 메서드를 호출한 코드는 있지만, 생성자를 호출한 코드는 없는데'Granduer constructor'가 출력됐다.이유는 객체가 만들어지면 기본적으로 생성자를 호출하게되있기 때문이다.
배열은 구성하는 데이터의 자료형에 따라 결정된다.기본 자료형 int형 타입은 int형이 가질 수 있는 데이터의 범위안에서 값이 몇이 담겼든 4byte를 사용하는데,3개의 int형 데이터를 갖는 배열이 있다면 3 X 4byte로 계산하여 12byte의 메모리를 쓰게 된다. 이제부터 정말 중요한 부분을 다룬다.배열의 주소.기본 자료형의 변수에는 값이 직접적으로 담겨진다.int a = 120; double b = 350.545;char c = 'a';a,b,c에는 각각 120 , 350.545 , 'a'의 값이 담기는것이다. 기본 자료형(byte,short,int,long,float,double,char,boolean)이 아닌 모든 변수는 참조타입 변수라고 하는데값을 직접 담지 않고, 값이 저장된 주소를 담는..
int a = 5;int b = 3;......int c = 200;위와 같이 수십,수백,수천,수만건의 데이터들을 다룰때 일일히 하나씩 변수를 만들어 담아 관리하는건 매우 비효율적일 것이다.(정수형 데이터를 예로들었지만, 배열은 정수든, 실수든, 문자든, 문자열이 다 사용 가능하다.) 배열은 이러한 작업을 효율적으로 처리할 수 있도록 인덱스를 이용해서 같은 자료형의 데이터를 관리하는 것이다.배열을 선언하고 처음 들어가는 값의 인덱스 주소는 0이 되기때문에 마지막 값의 인덱스는 n-1이 된다. 10개의 정수를 다루는 배열을 선언하면 아래와 같이 할 수 있다.int[] array = int[10]array[0] = 5; array[1] = 3;......array[9] = 2000; 배열은 어차피 같은 타입..