*배운 내용을 바탕으로 직접 쓰는 것이기 때문에 틀린 부분이 있을 수 있습니다. 오류를 지적해주시면 감사하겠습니다. *
프로그램 개발의 2가지 방법
1. 객체 지향적 (Object-Oriented Programming, OOP) : 내가 주로 쓰는 java는 객체 지향 언어로 java외 python, c++ 등이 있다. 현실세계의 객체(사물, 개념)를 클래스(class)와 객체(object)의 개념으로 컴퓨터에서 구현한다.
2. 절차 지향적 (Procedural Programming) : C언어 ,컴퓨터의 작업처리 방식과 유사하기 때문에 시간적으로 유리.
차이점
- 데이터 중심으로 함수를 구현하는 절차지향
- 기능을 중심으로 메서드를 구현하는 객체지향
'객체가 생성되었다'라는 뜻 ?
heap이라는 메모리 영역에 공간이 할당 된 것을 의미하며 주소도 생긴다.
'객체를 사용한다'라는 뜻 ?
클래스에 만들어놓은 메소드를 호출할 수 있다.
단어 이해
클래스 : 객체의 특성을 서술한 것, 속성과 행위를 변수와 메서드로 정의한 것 (추상적인 주체)(추상화)
인스턴스(instance)(객체) : 클래스에서 정의한 것을 토대로 실제 메모리 상에 할당된 것(실체화), 실제 프로그램에서 사용되는 데이터, new 연산자를 사용해 객체를 생성하면 heap메모리 공간에 할당된다.
생성자 : 객체를 만들어주는 메소드 , 클래스에 반드시 존재, 클래스 이름과 동일한 이름을 가진 메소드이다. return값이 없다.
- 기본생성자는 작성하지 않을 경우, 클래스 사용시 JVM이 기본 생성자를 자동 생성한다.
- 매개변수 있는 생성자 : 작성시 JVM이 기본 생성자 자동 생성하지 않는다.
추상화(abstraction) : 대상에서 특징만을 뽑아내어 표현한 것, 간결하고 이해하기 쉽게 만드는 작업
다형성: 상황에 따라 다른 의미로 해석될 수 있는 것(오버로딩, 오버라이딩이 가능한다)
오버로딩(Overloading)(다중정의): 한 클래스 내에서 같은 이름의 메소드를 여러개 정의, 같은 이름의 함수를 여러개로 정의하고 매개변수의 타입과 개수, 순서를 다르게 해 매개변수에 따라 다르게 호출할 수 있게 하는 것.
오버라이딩(Overriding)(재정의) : 부모클래스의 메소드와 같은 이름, 매개변수(개수, 타입 동일 , 리턴 타입 동일)를 재정의 하는 것(동적바인딩) @Override
*차이점 명확히 알기 :
*UML표현(따로 정리)
필드(field) = 속성(attribute) = 멤버변수 = state = property
메소드 = 기능 =멤버메소드 = operation = behavior(행위)
++
* 변수의 분류
- 1) data type : 기본형과 참조변수가 있다. 8가지 기본형변수(논리형boolean, 문자형char, 정수형 byte.short.int.long, 실수형 float.double), 이외는 참조형(String포함)
- 2) 선언 위치 : 멤버변수(클래스변수, 인스턴스 변수) 와 지역변수 (매개변수(파라미터): 힘수를 정의할때 사용되는 변수)
* 멤버변수(클래스변수/인스턴스변수 2가지 종류존재) : 클래스영역에 선언,
클래스 변수는 공통적 속성(예약어 static)일때-프로그램 종료시 소멸, 인스턴스 변수는 개별적 속성일때-객체소멸시
*static : 프로그램 시작시 정적 메모리 영역에 자동 할당되는 멤버에 적용한다
*지역변수 : 메소드나 생성자 내부, 초기화블럭내부에 선언, 호출시 생성되고 종료되면 사라진다.
ex. void print() { }, public static void main(String [] args) { }
+public 변수에 접근시 className.변수명
++ field 예약어
- final : 하나의 값만 계속 저장해야 하는 변수에 사용
++method 예약어
static : 객체 생성 없이 사용
final : 상속시 오버라이딩 불가
abstract : 미완성된, 상속해 오버라이딩으로 완성시켜 사용해야된다.
++method 반환형
void : 반환값 없을 경우
기본자료형
배열
클래스 : 반환값이 해당 클래스 타입의 객체일 경우 사용
객체 지향의 원칙 3대 요소
1. 캡슐화(encapsulation) : 정보 은닉, 목적은 클래스 내부 구현의 응집도(cohesion)를 높이고 외부 다른 클래스와의 결합도(coupling)를 낮추는데 있다.
접근제한자(access modifier) 문법
* public : 외부에서 제한 없이 접근 가능
* private : 외부에서 접근 불가( 클래스 내부에서만 접근 가능)
* protected : 상속한 하위 클래스에서만 접근 가능
* default : 동일 패키지 내부에서 사용가능
* 매개변수(표현) : 기본 자료형, 배열, 클래스, 가변인자
2. 상속(inheritance) : 공통적 규약을 정의, 자식 클래스는 부모 클래스의 모든 특징들을 물려받는다.
java는 단일상속만을 지원한다.
java의 최상위 부모클래스는 Object java.lang.Object
자식 클래스 밑에 또 자식 클래스 형성 - 계층형 구조(hierachical structure) 형성
아래로 내려갈수록 specialize, 위로 올라갈수록 generalize
장점은 적은 양의 코드로 새로운 클래스 작성 가능, 코드 중복을 제거, 코드 추가 및 변경이 용이하다, 생산성과 유지보수에 크게 기여한다.
주의점은 클래스 간의 is-a관계여야 한다는 것.
2가지 종류
Has a 포함 관계 : 1개의 클래스가 다른 1개의 클래스의 일부로 속할때.
Is a 상속 관계 : 1개의 클래스와 1개의 클래스가 서로 포함관계인 것. 서브타입 <> instanceOf관계
3. 다형성(polymorphism) : 상황에 따라 다른 의미로 해석될 수 있는 특징
* @Override (재정의) :부모클래스의 속성을 자식클래스에서 재작성
subtype polymorphrism : 객체를 참조하는 방법에 따라 구현되는 다형성
* toString ( ) : Object 클래스가 가진 메소드 중 하나. return값은 문자열, true, false
그 객체를 설명해주는 문자열을 리턴한다(기본: 객체의 해시코드 출력 // 클래스풀네임@해시코드)
*up-casting 과 down-casting
up-casting 예시 Parent p = new Child();
상속관계에 있는 부모, 자식클래스 간에 부모타입의 참조형 변수가 모든 자식 타입의 객체의 주소를 받을 수 있다.
down-casting 예시 ((Sonata)c).moveSonata();
*동적바인딩 ?
컴파일시 정적 바인딩된 메소드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것.
객체지향의 장점
1. 코드 재사용 2. 유지보수가 쉬움 3. 대형프로젝트 적합
객체지향의 단점
1. 처리속도가 상대적으로 느리다
2. 설계시 많은 노력과 시간이 필요
* getter와 setter 사용 이유
getter와 setter는 메서드를 통해 접근하는 것이기에 메서드 안에서 매개변수와 같이 어떤 올바르지 않은 입력에 대해 사전에 처리할 수 있게 제한하거나 조절할 수 있기 때문이다.
*setter 메소드 : 필드에 변경할 값을 전달받아 필드값을 변경하는 메소드
매개변수 = 필드명 : this.연산자 사용
*getter 메소드 : 필드에 기록된 값을 읽어서 요구하는 쪽으로 읽은 값을 넘기는 메소드
return
* this. vs super.의 차이 ?
this. 내가 가진 멤버변수의 값을 호출, 해당 객체의 주소값을 담고 있다 (지역변수)
super. 부모가 가진 멤버변수의 값을 호출
reference
1.
[객체지향] Object-Oriented Programming 핵심 개념의 이해
배경 데이터 흐름(Flow)에 기반한 절차지향적 프로그래밍 방법은 복잡한 로직을 갖는 큰 규모의 소프트웨어 개발에는 적합하지 않습니다. 하드웨어 성능이 폭발적으로 성장하면서 요구되어지는
gracefulprograming.tistory.com
2.
[자바개념정리01]멤버변수 지역변수 전역변수 등 헷갈리지 않게 구분하기
제가 자바를 공부하는 동안 뭔가 궁금증이 완전히 해소되지 않는 상태로 방치되어 있었던 개념들이 있었습니다. 오늘을 시작으로 자바개념정리 시리즈를 연재하면서 하나씩 정리해나갈 생각
easywebs.tistory.com
3.
자바[JAVA] 자바 변수 정리
자바를 처음 공부할 때 헷갈렸던 것 중에 하나가 있는데 바로 변수를 지칭하는 용어가 너무 많아 헷갈렸었다. 멤버변수 지역변수 인스턴스변수 클래스변수 참조변수...등등 어떤게 어떤건지 왜
sleepyeyes.tistory.com
'Back > Java' 카테고리의 다른 글
[Java / 개념이해 ] 자바의 정석 : 자바 언어 특징, JVM, 자바개발환경구축 (0) | 2022.02.15 |
---|---|
[programming basic] 메소드와 클래스, 객체, 추상화, 필드 (+캡슐화) (0) | 2021.07.11 |
[programming basic] java의 특징, 메모리, 연산자 정리 (0) | 2021.07.11 |
[programming basic] 간단한 기본지식과 java의 자료형 (0) | 2021.07.09 |
이클립스 단축키 모음(수정) (0) | 2021.06.24 |