Java 39

싱글톤

애플리케이션 전체에서 단 한개의 객체만 생성해서 사용하고 싶다면 싱글톤 패턴을 적용할 수 있다.싱글톤 패턴의 핵심은 생성자를 private로 선언해 외부에서 new 연산자로 생성자를 호출할 수 없게 하는 것이다.생성자를 호출할 수 없으니 외부에서 객체를 생성하는 것이 불가능해진다. 대신 싱글톤 패턴이 제공하는 정적 메서드를 통해간접적으로 객체를 생성할 수 있다.package ch06.sec15;public class Singleton { // private 접근 권한을 갖는 정적 필드 선언과 초기화 private static Singleton singleton = new Singleton(); // **1번** // private 접근 권한을 갖는 생성자 선언 private Sing..

Java 2024.06.23

Getter / Setter

Setter객체의 필드를 외부에서 마음대로 읽고 변경할 경우 객체의 무결성이 깨질 수 있다.예를 들어 자동차의 속력은 음수가 될 수 없는데 외부에서 음수로 변경하면 객체의 무결성이 깨지게 된다. 이러한 문제점 때문에 직접적인 외부에서의 필드 접근을 막고, 그 대신 메소드를 통해 필드에 접근하는것을 선호한다.메소드가 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다. 이러한 역할을 하는게 Setter 이다. 요약: Java에서 Setter를 사용하면 private 필드에 접근하고 값을 설정할 수 있다. 이 때 유효성 검사를 수행할 수 있다.Setter의 장점1. 정보 은닉: private필드에 직접 접근할 수 없도록 해 객체 내부 상태를 보호2. 유효성 검사: Setter 메서드 내부에서 필드..

Java 2024.06.23

이것이 자바다 - 클래스(2)

리턴 타입 - 리턴 타입은 메소드가 실행한 후 호출한 곳으로 전달하는 결과값의 타입을 말한다.- 리턴값이 없는 메소드는 void로 작성한다.- 리턴 타입이 있는 메소드는 실행 블록 안에서 return 문으로 리턴값을 반드시 지정해야 한다. 매개변수- 매개변수는 메소드를 호출할 때 전달한 매개값을 받기 위해 사용된다.- 전달할 매개값이 없다면 매개변수는 생략할 수 있다. 메소드 호출메소드를 호출한다는 것은 메소드 블록을 실행하는 것을 말한다. 클래스에서 메소드를 선언했다고 바로 호출할 수 있는것은 아니다.메소드는 객체의 동작이므로 객체가 존재하니 않으면 메소드를 호출할 수 없다.클래스로부터 객체가 생성된 후에 메소드는 생성자와 다른 메소드 내부에서 호출될 수 있고, 객체 외부에서도 호출이 가능하다. 가변길..

Java 2024.06.21

이것이 자바다 - 클래스

클래스부분 복습내용객체란?- 객체는 속성과 동적으로 구성된다. 속성(필드), 동작(메서드)ex) 사람은 이름, 나이의 속성 / 걷다, 웃다의 동작 객체 간의 관계- 객체는 단독으로 존재할 수 있지만, 대부분 다른 객체와 관계를 맺고있다.- 집합 관계, 사용 관계, 상속 관계가 있다.(김영한 강의에서 배웠던 클라이언트, 인터페이스, 구현체등을 생각해보자  캡슐화객체의 데이터, 동작을 하나로 묶고 실제 구현내용을 외부에 감추는것외부의 잘못된 사용으로 객체가 손상되지 않기 하게 위해 사용하는 것  클래스의 두가지 용도- 라이브러리 (Library) 클래스 : 실행할 수 없으며 다른 클래스에서 사용하는 클래스- 실행 클래스 : main( ) 메서드를 가지고 있는 실행 가능한 클래스(Student 실행 클래스는 ..

Java 2024.06.19

이것이 자바다 - 열거(Enum) 타입

데이터중 한정된 값을 갖는 경우가 있다. (월화수목금토일 혹은 봄, 여름, 가을, 겨울처럼)이와같이 한정된 값을 갖늩 타입을 열거 타입이라고 한다. package ch05.sec12;import java.util.Calendar;public class WeekEx { public static void main(String[] args) { // Week 열거타입 변수선언 Week today = null; // Calendar 얻기 Calendar cal = Calendar.getInstance(); // 컴퓨터 날짜 및 시간 정보를 가진 Calender 객체 얻고 참조값 cal에 대입 int week = cal.get(Calendar.D..

Java 2024.06.17

이것이자바다 - 배열

배열- 배열은 같은 타입의 값만 관리한다.- 배열의 길이는 늘리거나 줄일 수 없다.- 타입 [ ] 변수 형태로 선언하는게 관례이다.ex) Int[ ] intArray; 배열은 참조 변수이다. 배열도 객체이므로 힙 영역에 생성된다. 배열 변수는 힙 영역의 배열 참조 주소를 저장한다.참조할 배열이 없다면 null로 초기화할 수 있다. (Null이기 때문에 null인 값을 참조하면 npe가 발생한다) 값 목록으로 배열 생성타입[] 변수 = {1, 2, 3, 4, 5} 형식으로 간단하게 배열을 생성할 수 있다.중괄호는 나열된 값들을 항목으로 가지는 배열을 힙에 생성하고 주소를 리턴한다. 배열 변수를 미리 선언한 후에는 값 목록을 변수에 대입할 수 없다. 타입[] 변수;변수 = { 값0, 값1, 값2, 값3, …..

Java 2024.06.15

다형성(3) - OCP

객체지향의 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만든다.- 레고 블럭 조립하듯- 키보드 마우스 갈아 끼우듯- 컴퓨터 부품 갈아 끼우듯- 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법  운전자(클라이언트), 자동차 역할(인터페이스) K3, 아반떼, 모델3 (구현체) 운전자는 자동차의 역할만 알면 된다. k3를 운전하다 아반떼를 운전한다고 운전을 못하게 되는건 아니다. 로미오 역할 (인터페이스)는 대본만 있다면 장동건이 하던, 원빈이 하던 아무 상관이 없다. 내가 들어가도 문제가 없다.(?) 줄리엣 역할도 마찬가지로 김태희가 하지 않는다고 해서 줄리엣 역할이 변하게 되는건 아니란 것이다. 역할과 구현을 분리하자역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며 변경도 편리해진다.- ..

Java 2024.06.13

다형성 (2) - 추상클래스, 인터페이스

다형성 활용이전 파트에서 이해하지 못했던 다형적 참조를 어떤경우에 사용하는지 알 수 있다.동물의 울음소리 문제로, 다형성을 사용하지 않은 코드이다.package poly.ex1;public class AnimalSoundMain { public static void main(String[] args) { Dog dog = new Dog(); Cat cat = new Cat(); Cow cow = new Cow(); System.out.println("동물 소리 테스트 시작"); dog.sound(); System.out.println("동물 소리 테스트 종료"); System.out.println("동물 소리 테..

Java 2024.06.12

다형성 (캐스팅, 메서드 오버라이딩)

다형성이란?다형성은 한 객체가 여러 타입의 객체로 취급될 수 있는 능력을 뜻한다. 보통 하나의 객체는 하나의 타입으로 고정되어 있는데,다형성을 사용하면 하나의 객체가 다른 타입으로 사용될 수 있다. 다형적 참조 - 부모는 자식을 품을 수 있다. (자식 클래스를 참조할 수 있다.) package poly.basic;public class PolyMain { public static void main(String[] args) { //부모 변수가 부모 인스턴스 참조 System.out.println("Parent -> Parent"); Parent parent = new Parent(); parent.parentMethod(); // 자식 ..

Java 2024.06.10