-
2023년 1월 13일 2023년 1월 16일 2023년 1월 17일
- 객체지향프로그래밍(Object Oriented Programming)
- 실제 세상에서 사물의 속성과 기능, 사물간의 관계를 컴퓨터 프로그램에서도 사용할 수 있게 프로그래밍하는 방법 이다.
- 객체지향 프로그래밍 언어의 특징
- 상속
- 부모가 가지고 있는 여러 속성과 기능들을 자식이 그대로 물려받을 수 있게 한다
- 코드의 중복을 줄여준다
- 다형성
- 부모/자식간의 관계가 있는 클래스는 자식이 부모의 타입으로 변환이 가능하다
- 예) 메인보드의 그래픽카드 슬롯이 있고 회사가 다르지만 그래픽카드에 꽂아 쓸 수 있다
- 추상화
- 개발자들이 구현하기 전에 객체들의 특징이나 속성들을 파악하고 설계하는 과정이다(장점 : 설계 시 이점이 있다)
- 보고서 양식 같은 것 들 ( 값이 채워져 있지 않지만 미리 설계된 포멧, 보고서양식, 이력서, 회원가입등등 양식이 있는 서류)
- 캡슐화
- 하나의 관련 있는 속성이나 기능들을 하나로 묶어 담아둬서 관리하기 편하도록 하기 위함
- 하나는 속성이나 기능들을 객체 내부에 숨겨 놓고 외부에서 불필요한 정보를 볼 수 없도록 해서 개게 내부에 문제가 생기지 않도록 보호하며 꼭 필요한 속성이나 기능만 외부로 노출하는 것이다.
- 상속
- new연산자
- 인스턴스 생성
- 생성자를 호출해 힙 영역에 필드를 초기화 후 주소를 확보해 반환하는 연산자
- 클래스와 객체
- 클래스는
- 클래스의 구조
- 속성과 기능으로 나눌 수 있다
- 필드
- 생성자나 메서드 안에 있는 변수와는 다르다. 생성자와 메서드 안의 변수는 그 안에서 사용되지만 필드는 클래스 내부의 전체에서 사용된다.
- 생성자
- 선언
- 메서드
- 객체의 기능이 해당하는 것 toString과 같은 것
- 필드
- 속성과 기능으로 나눌 수 있다
- 필드
- 객체의 고유한 속성이나 상태값을 저장하는 곳
- Car라는 클래스가 있으면 그 안에 색상, 종류, 제조사 등이 필드이다.
- 클래스 변수는 클래스 타입으로 부르는게 좋다 인스턴스변수로 부를 수는 있다.(글자가 기울임에 따라 변수가 뭔지 알 수 있음)
클래스변수 클래스 블록 내 static int num; 클래스가 메모리에 로드(해당 프로그램 실행중에 클래스가 언급 될 때) 프로그램이 종료 시 까지 해제가 안됨 인스턴스 변수 클래스 블록 내 int num; 객체생성(인스턴스가 생성될때) 더이상 참조하는 객체가 없을 때(해당 객체가 null값이 될때) 객세가 사라질때(인스턴스가 사라질때) 지역 변수 메서드 등 기타 블록 내 int num; 해당 실행문이 실행될 때(메서드가 호출 됐을 때) 메서드가 return값을 줄떄 생명이 끝남 - 메서드
- 의존호출 (객체의 기능)
- 객체로부터호출(대부분)
- 접근제한자 리턴타입 메서드명 (매개변수...){ 실행문 … return 값 }
- 접근제한자
- public, protected, private, defult
- 리턴타입
- 실행 포인트로 되돌려 주는 것
- 리터값이 없으면 void(명시적)라고 적어줘야한다.
- 선언을 String으로 하면 리턴 값도 String으로 해야한다.
- 메서드명 작성 규칙
- 영문소문자로 하고 두 단어 이상이면 카멜 법을 사용한다.
- 매개변수
- 외부로부터 변수를 입력받기 위해 사용된다. 입력받은 변수는 메서드 안에서 사용된다.
- 가변인자(매개변수와 매개변수 사이에 … 을 찍는다)예)(int…x)를 매개변수로 해두면 몇 개를 받을지 모를 때 사용하면 된다.
- 가변인자를 쓰면 배열로도 받을 수 도 있고 그냥 자료형 타입으로도 받을 수 있다.(int… x)는 인트형 배열이든 인트형 변수든 상관 하지 않는다)
- 매개변수는 0개 이상 받을 수 있지만 리턴은 1개이다
- 매개변수와 지역변수는 같은 색이다 (회색)
- p.add2(10, 5); 10과 5는 인자(arguments) 이다
- void add(int x, int y) {} (x,y는 파라미터라고 한다)
- 메서드의 실행(호출)
- 메서드를 실행하는 곳을 크게 같은 클래스 내부에서 호출하는 경우와 다른 클래스 외부에서 호출하는 경우로 나뉜다
- 메서드도 변수와 마찬가지로 클래스 메서드와 인스턴스 메서드가 있따. 클래스 메서드는 클래스명으로 직접 실행이 가능하고, 인스턴스 메서드는 객체를 통해 실행할 수 있다. 객체 생성 없이 바로 실행할 수 있는 메서드는 선언부에 static을 붙여 주면 된다.
- 큐의 규칙을 따른다 LIFO(후입선출) 1,2,3들어가면 3, 2, 1순으로 출력된다.\
- 메서드 오버로딩
- 리턴타입, 이름, 파라미터(갯수와 타입 중요)
- 이름은 같지만 파라미터가 다른 걸 오버로딩 이라고 한다
- 같은 이름을 가진 메서드이면서 매개변수의 자료형, 매개변수의 개수, 순서 중에 하나 이상 달라야 한다
- 생성자
- 생성자의 용도는 객체의 초기화 목적이다 .
- 클래스 이름과 생성자 이름은 동일해야 한다.
- 클래스명 ( 매개변수…)초기화}
- 실행문…
- {
- 기본생성자
- 모든 클래스는 생성자가 반드시 하나 이상 존재 한다. 사용자가 직접 생성하지 않아도 생성은 되지만 직접 생성 할 경우 기본 생성자는 없어진다.
- new를 통해서 생성자를 생성한다
- this
- 미래에 생성되는 주소 값
- A a = new A()를 인스턴스를 생성할때 초기화 하는 주소 값
- 인스턴스나 생성자 내에서만 사용한다
- 사용법에는 this.변수 도 있지만 this(”문자열”,변수,변수)도 사용 할 수 있다
- this(”문자열”,변수,변수)는 해당 생성자를 찾는다
- 이 방법은 잘 사용하지 않는다. this로 생성자를 호출하는 경우는 없다
- this. 이 있지만 생략되어있다.
- this()
- a() a(int i){ this(); } 매개변수있는 A생성자가 기본생성자 A를 부를때 this()를 써서 호출 할 수 있다.
- super
- 조상의 인스턴스 this와 차이점
- this와 super는 동시에 올 수 없고 첫 줄에 쓴다.
- 초기화 블록
- 객체지향프로그래밍(Object Oriented Programming)