Life is Good

수콩이의 시선

Coding/JAVA 15

[기본 API 클래스] Object 클래스(equals(), toString())

[참고] 라이브러리 추가 방법 1. 프로젝트 폴더 마우스 오른쪽 우클릭 > Export > Java > JAR file 2. 원하는 클래스 선택> next > finish 다른 폴더에서 작성한 클래스를 import하여 사용할 수 있다. import api01.Object.(클래스명); 객체 비교 equals() : Object 클래스의 eqauls() 메소드는 비교 연산자인 ==와 동일한 결과를 리턴한다. 두 객체가 동일한 객체라면 true를 리턴하고 그렇지 않으면 false를 리턴한다. 객체 문자 정보 toString() : Object클래스의 toString() 메소드는 객체의 문자 정보를 리턴한다. 객체의 문자 정보란 객체를 문자열로 표현한 값을 말한다. 기본적으로 Object클래스의 toStrin..

Coding/JAVA 2022.04.04

클래스의 관계(Dependency, Association)

클래스를 파라미터로 사용 -> 의존관계 객체를 멤버객체(필드)로 사용 => 연관관계 연관관계 관계(Relationship) 1. 정의 - 구성요소들간의 의미 있는 연관성을 표현 - 일반적으로 클래스들간의 관계 표현 시 사용된다. 2. 종류 일반화관계(Generalization Relationship) 실체화, 실현화 관계(Realization Relationship) 의존관계(Dependency Relationship) 연관관계(Association Relationship) 집합연관(Aggregation Relationship) 복합연관(Composition Relationship) -> 집합연관관계와 복합연관관계는 설계에 따라 다르다. Dependency(의존관계) 생명주기가 같다. 클래스 안에 메소드..

Coding/JAVA 2022.04.04

의존관계(Dependency)

예제 1) RAM 구조 heap stack new AA()... 0x100 a 0x100 b 0x100 c 0x100 d 0x100 new AA()... 0x200 x 0x200 y 0x200 a, b, c, d 새로 할당 받지 않고 주소값을 참조한다. new라는 키워드로 객체를 발생하면 새로운 공간을 할당 받는다. b.func() 이 실행되는 이유는 a=null; 로 해줘도 b는 주소값을 참조하기때문이다. RAM heap stack a null b null c null d null new AA()... 0x200 x 0x200 y 0x200 메모리는 constant, heap, stack 영역이 존재. constanct : static. 종료까지 살아있다. stack : 블럭단위로 존재한다. heap ..

Coding/JAVA 2022.04.04

다형성(Polymorphism)

자바의 다형성 (Polymorphism) 다형성의 사전적 의미는 '여러 개의 형태를 갖는다'라는 뜻이다. 여러 형태를 갖으므로써 사용자는 사용편의성을 취할 수 있다. 다형성이라는 것은 객체에게만 국한된 개념은 아니다. 오버로딩과 오버라이딩은 메소드의 다형성을 쉽게 설명할 수 있는 개념이다. 반면에, 객체의 다형성은 쉽지 않아 개념을 정리해보았다. 설명을 위한 예제 클래스는 아래와 같이 구현되어 있다. class 자동차{ void run() { System.out.println("달린다."); } } class 슈퍼카 extends 자동차{ @Override void run() { System.out.println("빨리 달린다."); } void turbo() { System.out.println("순간..

Coding/JAVA 2022.04.04

인터페이스(interface), 접근제한자(public, private, protected, default)

인터페이스(interface) : 인터페이스란? 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스보다 추상화 정도가 높아서 추상클래스와 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 다른 어떠한 요소도 허용하지 않는다. 추상클래스를 부분적으로만 완성된 '미완성 설계도' 라고 한다면, 인터페이스는 구현된 것은 아무 것도 없고 밑그림만 그려져 있는 '기본 설계도' 라고 할 수 있다. - 자바에서 인터페이스는 객체의 사용 방법을 정의한 타입이다. - 객체의 교환성을 높여주기 때문에 다형성을 구현하는 중요한 역할을 한다. - (클래스는 필드, 생성자, 메소드를 구성 멤버로 가지는데) 인터페이스는..

Coding/JAVA 2022.04.04

상속(inheritance) / 메소드 재정의(오버라이딩 Overriding)

클래스의 특징 3가지 ① 은닉화 -> public 보다 private를 사용한다. ② 중복성 -> 중복 (함수중복/생성자중복) ③ 상속성 -> 부모클래스의 멤버를 자식에게 물려준다. 자바에서 만들어진 모든 클래스는 Object 클래스를 상속받는다. 자바는 다중 상속을 허용하지 않는다. 즉, 여러 개의 부모클래스를 상속할 수 없으므로 extends 뒤에는 하나의 부모클래스만 와야한다. 상속inheritance : 상속이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그..

Coding/JAVA 2022.04.04

생성자 중복(Overloading), 다른 생성자 호출(this()), 지정예약어(static/ final/ static final)

생성자 중복 : 매개변수를 달리하는 생성자를 여러 개 선언하는 것 매개변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개변수 이름만 바꾼는 것은 생성자 오버로딩이 아니다. 다른 생성자 호출(this()) : 생성자에서 다른 생성자를 호출할때는 this() 를 사용한다. 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한 생성자에서 이러한 현상을 볼 수 있다. 이 경우에는 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다. 중복 코드를 최소화한다. 조건 1) 반드시 생성자의 첫 줄에서만 허용된다. 2) 생성자의 이름으로 클래스이름 대신..

Coding/JAVA 2022.04.04

함수 중복(오버로딩 Overloading)&(오버라이딩 Overriding), 객체 배열

생성자와 함수와의 차이점 - 생성자는 리턴타입이 없고 클래스 이름과 동일하다. - 함수이름은 같지 않아도 상관없다. (실무에서는 코드가 복잡하기 때문에 비슷한 기능을 하는 함수는 이름을 같게 해준다. ) 함수중복 - Overload / Overloading 조건 1) 함수명은 같지만 2) 파라미터(매개변수)의 타입이나 개수가 달라야 한다. 오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용 오버로딩(Overloading) 같은 이름의 함수(메서드)를 여러개 정의하고, 매개변수의 유형과 개수를 다르게 하여 다양한 유형의 호출에 응답할 수 있..

Coding/JAVA 2022.04.04

접근제한자(public, private) / 생성자

클래스의 3대 특징 은닉화 함수중복 상속성 private 는 내 소스 밖에서는 사용할 수 없다. 함수는 private를 쓰지 않는다. 대부분 public으로 선언해 사용한다. 변수는 private 로 선언해도 함수를 통해서 사용이 가능하다. 그래서 변수는 private를 사용한다. 하나의 클래스는 1개의 자바 파일로 작성하지만, 여기서는 설명을 편하게 하기 위해 하나의 파일에 작성해서 사용하겠다. 하나의 자바 파일에서 여러 개의 클래스를 작성할 때는 한 개의 메인클래스만 public으로 하고, 나머지는 public선언을 빼줘야한다. 생성자에서 다른 생성자를 호출할 때에는 다음과 같이 this() 코드를 사용한다. this는 생략이 가능하다. 그렇지만 이 경우에는 멤버변수와 지역변수가 동일한 변수명이기 때..

Coding/JAVA 2022.04.04

배열(Array)과 클래스(Class)

배열 변수는 한 개의 데이터만 저장하지만, 배열은 같은 타입의 데이터를 연속된 공간에 저장하므로 속도면에서 좋다. 각 데이터는 인덱스를 부여한다. 배열은 생성 시 0으로 초기화된다. 빨간(스택영역), 파란색(힙영역) b는 array의 주소값을 가지게 된다. 이는 메모리 공간을 절약 하게 된다. ( 만약, 주소값을 참조하지 않는다면 메모리 공간을 차지해서 array 20byte + b 20btye = 40byte 가 필요하게 되지만 b가 주소값을 가지면 array 20 byte + b 1byte = 21btye) 주소값을 가지고 heap영역에서 해당 주소값을 찾아가서 값을 가져온다. 배열 = null; 쓰지 않아도 상관없다. C나 C++은 가비지 컬렉션이 없기때문에, 개발자가 메모리 해제 해줘야한다. 이때..

Coding/JAVA 2022.04.04