[Java 객체지향] Singleton Pattern (static 응용)
·
Java & Kotlin
Singleton Pattern 디자인 패턴 : 소프트웨어 설계할 때 공통적으로 발생하는 문제에 대한 재사용할 수 있는 해결책이다. 디자인 패턴을 사용해서 설계하면 프로그램의 수정이 용이하고, 유지 보수가 쉬우며 확장성이 크다. 하나의 클래스에서 여러 개의 인스턴스가 생성되는 경우가 대다수지만 인스턴스가 여러 개일 때 문제가 생기는 경우가 있을 수 있다. (e.g. 날짜, 회사 ..) Singleton Pattern : 디자인 패턴의 일종으로 프로그램에서 인스턴스가 단 한개만 생성되어야 하는 경우에 사용한다. 예제 코드 Company.java 1) 클래스 내부에서 private으로 유일한 인스턴스를 생성한다. static으로 변수를 설정하는 것은 static method에서 사용하기 위함, private..
[Java 객체지향] Static 메서드
·
Java & Kotlin
Static 메서드 메서드가 수행되려면 메서드 내부에 있는 변수들은 메모리가 할당된 상태여야 한다. 인스턴스 변수는 인스턴스 생성이 완료되어야 메모리에 할당된다. static 메서드는 인스턴스가 생성되기 전, 프로그램이 로드되는 시점부터 사용될 수 있다. 따라서 static 메서드에서는 생성이 완료되지 않은 인스턴스 변수(멤버 변수)를 사용할 수 없다. 하지만 static 변수는 이미 존재하므로 일반 메서드 안에서의 사용이 가능하다. Employee.java의 static 메서드 getSerialNum() 메서드 내에서 생성된 지역변수는 사용하는데 문제가 없다. public static int getSerialNum() { int i = 0;// 메서드 내부에 선언된 지역변수. 메서드 호출시 생성 & 완..
[Java 객체지향] Static 변수
·
Java & Kotlin
Static 변수 인스턴스는 각각 다른 메모리 공간에 할당되어 다른 멤버 변수 값을 가진다. 하지만 같은 클래스에서 공유해야 할 변수가 필요한 경우가 발생할 수 있다. 예를 들어 고유 번호를 만든다고 할 때 중복된 값이 생성되면 안된다. (e.g. 학번, 카드번호, 사번 ...) static 변수는 이를 판단하기 위한 기준값을 설정하는데 쓰인다. 클래스 변수, 정적 변수라고도 한다. Static 변수의 메모리 공간 인스턴스는 동적 메모리인 힙 메모리에 생성된다. static 변수는 인스턴스가 생성될 때 만들어지지 않고 프로그램이 메모리에 로드되는 순간 생성된다. 프로그램이 메모리에 로드되면 Data 영역, Code 영역 두가지 영역으로 나뉘어진다. static 변수는 프로그램이 메모리에서 unload 되..
[Java 객체지향] 객체 간 상호작용 구현해보기
·
Java & Kotlin
객체지향 프로그래밍 할 때 고려할 점 1. 무엇을 객체로 구현할 지 정해야 한다. 2. 그 객체의 역할에 따른 속성과 기능을 구현해야 한다. 3. 하나의 객체는 객체의 이름에 맞는 유일한 기능을 해야한다. 객체 간 상호작용 객체 간 상호작용을 위한 정보 전달은 메세지 전달을 통해 이루어지기도 하고, 객체 자체가 매개 변수로 전달될 수 도 있다. 예제 프로그램 1) 학생이 버스나 지하철을 타면 요금을 지불하고 버스나 지하철은 그만큼의 수익을 얻고 승객 수가 늘어난다. Student.java 학생 클래스는 이름과 가지고 있는 금액을 속성으로 갖는다. takeBus, takeSubway는 매개 변수로 각각 Bus, Subway 클래스의 객체를 받는다. take 메서드를 이용해 버스와 지하철의 수입이 증가한다...
[Java 객체지향] this 키워드
·
Java & Kotlin
this 키워드 역할 인스턴스 자신의 메모리를 가리킨다. 생성자 내에서 또 다른 생성자를 호출한다. 생성된 인스턴스의 메모리 주소값을 가진다. 참조 변수는 외부에서 인스턴스의 주소 값 (참조 값)을 가리킨다. this 키워드는 인스턴스 내부에서 자신의 메모리 주소 값을 가리킨다. 말은 어렵지만 결국 하나의 클래스에서 생성된 참조 변수와 인스턴스의 this 키워드는 같은 값을 가진다는 것이다. 예시 저번에 만든 CheckDate 클래스를 이용해서 참조변수, this, 인스턴스의 관계를 알아보자. CheckDate의 인스턴스를 생성하고 setDay 메서드를 이용해서 date의 멤버변수를 설정하는 코드이다. setDay() 메서드에서 this 키워드가 사용되는데, 이는 참조변수인 date와 같이 생성된 인스턴..
[Java 객체지향] 캡슐화
·
Java & Kotlin
캡슐화 (Encapsulation) 객체 지향의 특징 중 하나이다. 데이터와 데이터를 처리하는 기능을 묶어 놓은 것이다. 클라이언트 측에게 꼭 필요한 정보나 기능만 제공하고 일부는 은닉한다. 장점 사용하기 쉽다 : 클라이언트는 객체 내부의 복잡한 로직을 알아야 할 필요가 없다. 일관된 기능을 제공한다 : 클라이언트는 제공된 기능만 수행하면 내부 기능은 서비스를 제공하는 객체 쪽에서 수행된다. 디버깅이 용이하다 : 클라이언트 측에서 정보를 수정할 수 없기 때문에 오류 발생 시 객체의 코드만 확인하면 된다. 예제 코드 레포트를 만들어주는 프로그램 MakeReport.java - StringBuffer는 String을 쭉 연결해주는 버퍼 ( '+'로 연결하는 것은 오버헤드↑) - 사용자는 public으로 정의..
[Java 객체지향] 접근 제어 지시자
·
Java & Kotlin
접근 제어 지시자 (access modifier) 클래스, 멤버 변수, 메서드 등 자료형 앞에 제시되어 외부에서의 접근을 제한하여 정보를 보호할 수 있는 키워드이다. 접근 제어 지시자를 이용하여 정보를 보호할 수 있다. public : 외부 어디에서나 사용 가능 private : 같은 클래스 내부에서만 사용 가능 ( 외부 클래스 또는 상속 관계에서도 접근 X) protected : 같은 패키지나 상속 관계의 클래스에서 접근 가능, 그 외 외부 클래스 X default : 같은 패키지 내에서만 접근 가능, 상속 관계라도 패키지가 다르면 X Getter & Setter private으로 멤버 변수를 선언했더라도 public 메서드를 이용해 값을 가져오거나 변경하는 것이 가능하다. get() 메서드만 사용할 ..
[Java 객체지향] 참조 자료형 변수
·
Java & Kotlin
참조 자료형 변수의 자료형에는 int, char 등과 같이 기본형 타입과 클래스를 정의하여 자료형으로 사용하는 참조 자료형이 있다. 기본형 타입은 선언 시 고정된 길이의 메모리가 주어지지만, 참조 자료형은 정의된 클래스에 따라 가변 길이의 메모리 공간을 가진다. 참조 자료형 변수를 선언하면 변수에 대한 메모리 공간이 주어진다. 선언한 후에는 변수에 대해 생성 해주어야 한다. ( String 클래스는 예외 ) 변수에 대한 생성은 대부분 생성자 내부에서 한다. 클래스 생성 시 유의할 점 학생의 정보와 학생이 수강한 과목에 대한 정보를 나타내고 싶다고 할때, 학생 클래스에 학생의 정보와 수강한 과목 정보를 모두 구현한다. (X) → 학생마다 수강하는 과목 수, 종류 등이 다 다를 수 있어 수강할 수 있는 과목..
[Java 객체지향] 생성자
·
Java & Kotlin
생성자 (constructor) 생성자는 함수나 메서드와 달리 기능을 구현하지는 않고 오로지 객체를 생성하기 위해 호출된다. (new 키워드 사용) 객체가 생성될 때 변수나 상수를 초기화하거나 다른 초기화 기능을 수행한다. 생성자는 반환값이 없고 클래스와 동일한 이름을 사용한다. 대부분 정의된 클래스(server 코드)에서 사용하는 것이 아닌 외부(client 코드)에서 사용되기 때문에 public인 경우가 대다수지만, 경우에 따라 private으로 선언하기도 한다. 기본생성자 (default constructor) 클래스는 적어도 하나의 생성자는 반드시 가져야 한다. 생성자가 없는 경우에도 컴파일러가 생성자 코드( e.g. public Student() {} )를 넣어주어 객체를 생성할 수 있다. 이때..