본문 바로가기

develop

(58)
상속(Inheritance) 상속 현실에서 부모가 자식에게 재산이나 부동산을 상속하듯, 프로그래밍에서도 부모 클래스에서 자식 클래스가 코드를 그대로 상속 받을 수 있다. 상속 받은 코드는 자식 클래스에서 합쳐서 사용 가능함. 부모 클래스의 멤버를 자식클래스에서 물려받아 선언없이 사용하는 것 부모 클래스 - 슈퍼클래스, 상위클래스 => 멤버를 물려주는 클래스 자식 클래스 - 서브클래스, 하위클래스 => 멤버를 물려받아 선언없이 사용하는 클래스 클래스 정의 시 별도로 상속 대상을 지정하지 않을 경우 jave.lang.Object 클래스를 자동으로 상속 받는다. 특정 클래스를 상속 받은 서브클래스를 다시 상속받는 경우 상속받은 슈퍼클래스 뿐만 아니라 상속받은 슈퍼클래스의 슈퍼클래스 멤버까지 모두 상속, 계층 구조를 갖게 됨 (아들 - 아..
싱글톤 디자인 패턴(Singleton Design Pattern) 아.. 다 써놨는데 날렸다. 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우. 단 하나만 생성하는 객체를 싱글톤이라고 한다. 유일한 객체 사용을 위해 하나의 인스턴스만 생성하도록 함. 1. 외부에서 인스턴스 생성을 하지 못하게 차단 (=private) 2. 클래스 내에서 직접 인스턴스 생성해 외부에 리턴 (=getInstance()) 3. 해당 클래스는 누구나 생성된 인스턴스를 전달받아 사용해야함 (=기존의 인스턴스 공유) 단 하나의 객체를 만들기 위해서 클래스 외부에서 new 생성자로 호출할 수 없도록(인스턴스 생성할 수 없도록) 막기 위해서 접근 제한자 private를 붙혀준다. 그리고 static 변수를 하나 선언하고 자신의 객체를 생성해 초기화한다. (이 경우는 생성자 호출 가능)..
static 메서드 static 메서드 (정적 메서드) 보통 메서드 모양 public (리턴타입) 메서드명(){} static 메서드 모양은 public static (리턴타입) 메서드명(){} 데이터타입(리턴타입) 앞에 static 키워드를 붙혀 클래스가 메모리에 로딩될 때 함께 로딩된다. 이 역시도 인스턴스 생성과 무관하며 클래스명만으로도 접근 가능하다. (인스턴스 생성 전에 먼저 메모리에 로딩됨) 인스턴스 생성 시점에서 메모리에 로딩되는 대상들은 static 메서드 내에서 접근 불가능. 1. 인스턴스 멤버에 접근 불가 2. 레퍼런스 this 사용 불가 => static 키워드가 붙은 메서드가 로딩되는 시점과 일반 인스턴스들이 로딩되는 시점이 다르다는 점을 유념해야 함! static 메서드도 참조변수를 통해서 호출할 수..
static static 키워드 클래스, 메서드, 변수의 지정자로 사용가능하다.. 메서드 혹은 변수에 static 키워드를 사용할 경우 인스턴스 생성과 관계없이 클래스가 로딩되는 시점에 메모리에 로딩.. => 따라서, 인스턴스 생성(참조변수) 없이 클래스명만으로 접근 가능 static 변수=정적 변수 인스턴스 생성되기 전, 클래스가 메모리에 로딩될 대 함께 로딩됨 인스턴스 생성 없이 클래스명만으로도 해당 변수에 접근이 가능함 => 클래스명.변수명 형태로 접근 모든 인스턴스가 하나의 변수(메모리)를 공유 => 하나의 인스턴스에서 값을 변경하면 나머지 인스턴스도 영향받음 보통은 인스턴스가 생성되서 앞에 참조 변수를 붙인 형태로 접근했지만 static이 붙으면 클래스가 메모리에 로딩되면서 같이 나타난다. 그래서 인스턴스 ..
코드의 재사용 코드의 재사용 메서드 오버로딩= 하나의 메서드로 서로 다른 파라미터를 전달 받아 비슷한 작업들을 수행하는 것. 앞서 우리가 아는 메서드 오버로딩 class WalkTest{ public void walk(){ //1번 메서드 System.out.println("100cm 이동"); } public void walk(int distance){ //2번 메서드 System.out.println(distance + "이동"); } public void walk(int distance, String unit){ //3번 메서드 switch(unit){ case "cm" : break; case "m" : distance *= 100; break; case "inch" : distance *= 2.5; break..
this 키워드 this 키워드 인스턴스가 생성될 때 자동으로 생성되는 변수의 일종이며 자신의 인스턴스 주소가 자동으로 저장된다. 메서드(또는 생성자) 내에서 선언된 변수(=로컬변수)와 클래스를 정의할 때 선언되는 변수(=멤버변수)의 이름이 동일할 경우 멤버변수를 가리키기 위해 사용되는 참조변수 역할을 함. this.멤버변수명 or this.메서드명() 형태로 사용 class Student{ String name;
생성자 오버로딩(Constructor Overloading) 생성자 오버로딩 생성자는!!! 멤버변수를 초기화하는 놈이였다.. 생성자 오버로딩은 메서드 오버로딩과 마찬가지로 생성자의 파라미터를 달리하여 동일한 이름으로 다른 기능을 수행하도록 하는 것. 생성자의 기본 목적이 멤버변수를 초기화하는 건데, 멤버변수의 초기화를 다양하게 수행하기 위해 생성자의 파라미터를 다양하게 정의하는 것이다. 생성자는 new 다음에 위치하면 호출됨 // 오버로딩 된 생성자를 호출하여 객체를 다양하게 초기화하기 // MyDate() 생성자 호출 MyDate d1 = new MyDate(); d1.print(); System.out.println("-----------"); // MyDate(int) 생성자 호출 MyDate d2 = new MyDate(2021); d2.print(); S..
가변인자 Variable Arguments 가변인자 = 비정형 인자 😖 가변인자를 사용하는 이유?.. 일반적으로 메서드 오버로딩시 전달인자의 갯수와 메서드가 가진 파라미터 갯수가 일치해야 오류가 발생하지 않는다. 하지만 사용자가 넣을 파라미터가 몇개인지를 항상 예측하고 메서드 파라미터를 열어둘 수 없기 때문에 가변인자를 통해서 파라미터 갯수에 대한 제한을 없애도록 함. -메서드 파라미터의 인자가 변하는 형태(갯수의 제한이 없는 전달인자) -메서드 정의시 선언부 파라미터 부분에 변수를 선언할 때, 변수의 데이터타입과 변수명 사이에 가변인자 기호(...)를 사용 -가변인자를 사용하여 메서드를 정의하면 메서도 호출 시점에서 파라미터 갯수에 대한 제한이 없어짐 => 같은 타입의 인자, 배열만 전달 가능 -전달받은 데이터는 변수명에 해당하는 1차원 배열로..