본문 바로가기
728x90
반응형

분류 전체보기281

12)객체지향-호출스택(call stack) 12)객체지향-호출스택(call stack) 호출 스택은 모든 프로그래밍 언어에서 공통적인 거고요. 매우 중요한 개념입니다. 호출 스택을 이해하지 못하면 앞으로 배울 기본형 매개변수, 참조형 매개변수, 예외처리를 이해하기 힘듭니다. 12-1) 스택(stack) 밑이 막힌 상자. 위에 차곡차곡 쌓인다. A. 넣을 때 B. 꺼낼 때 C. 1, 2 사이에 3을 넣을 수도, 1, 2중에 1을 먼저 뺄수도 없다. 12-2) 호출 스택(call stack) 메서드 수행에 필요한 메모리가 제공되는 공간 메서드가 호출되면 호출 스택에 메모리 할당. 종료되면 해제 main()이 println()을 호출합니다. println()이 실행되는 동안 main()은 대기상태가 됩니다. println()이 종료되면 main()은 .. 2021. 5. 18.
11) 객체지향-return문 11-1) return문이란? 실행 중인 메서드를 종료하고 호출한 곳으로 되돌아 가는 것 마지막에 return을 써야 하는 것이 맞으나, 반환 타입이 void일 경우 생략 가능합니다. 11-2) return문 주의사항 return문을 생략해버리면 result의 반환 타입이 어떤것인지 모르기때문에 반환타입이 있는 경우 return문을 꼭 써줘야 합니다. 실행하면 'return문이 없음'이라는 에러가 나옵니다. a> b일 경우는 a값을 반환하는데, 만약 a b일 경우와 그렇지 않은 경우를 나눠서 써야 합니다. 정말 많이 실수합니다!!!!★★★★★★★★★ char, byte, short와 같이 int보다 크기가 작은 타입이 와도 알아서 형변환 해줍니다. result는 반환 값이 int이기 때문에 알아서 int.. 2021. 5. 18.
10) 객체지향-메서드의 호출(call), 메서드의 실행흐름 10-1) 메서드 호출(call) 메서드 호출도 간단합니다. 누구를 불러 일을 시키고 싶을 때 이름 부르는 것과 같습니다. 메서드 이름(값 1, 값 2, …); //메서드를 호출하는 방법 ex) print99danAll(); //void print99danAll()을 호출 int result = add(3,5); //int add(int x, int y)를 호출하고, 결과를 result에 저장 메서드 print99danAll의 경우 매개변수가 없어 괄호 안에 아무것도 없고, 반환 값도 없기 때문에 void를 씁니다. 하지만, add메서드의 경우 매개변수도 존재하고(3, 5) 반환값도 존재하기 때문에(result) 매개변수로 int x, int y를 쓰고 반환 값으로 int result를 씁니다. int .. 2021. 5. 12.
9) 객체지향-메서드의 정의, 메서드의 선언부와 구현부 9-1) 메서드란? ① 문장들을 묶어놓은 것. 작업 단위로 문장들을 묶어서 이름 붙인 것. 어렵게 생각하지 마시고 이게 전부예요. 위 그림에서 위쪽 코드는 메서드를 필요할 때마다 매번 호출합니다. 그러면 너무 귀찮고 코드는 길어지겠죠? 그래서 아래 그림처럼 메서드를 한 번만 쓰고 필요할 때마다 메서드 이름으로만 호출하면 훨씬 간결한 코드가 됩니다. ② 값(입력)을 받아서 처리하고, 결과를 반환(출력) 수학 시간에 봤던 함수와 비슷합니다. 함수에서 '함'자가 '박스'라는 뜻을 담고 있습니다. 객체지향에서 메서드는 함수를 지칭하는 용어이기도 합니다. 메서드≒함수 차이가 있다면, 메서드는 꼭 클래스 안에 위치해야 합니다. 하지만 함수는 클래스에 독립적입니다. 따로 존재할 수 있습니다. 그냥... 근본적으로 같.. 2021. 5. 12.
8) 객체지향-클래스 변수와 인스턴스 변수의 차이점 8) 객체지향-클래스 변수(cv)와 인스턴스 변수(iv)의 차이점 포커 카드 하나하나가 객체이지요. 지금 위 사진에는 카드가 3장이니 객체가 3개 있습니다. 숫자와 무늬는 객체마다 다르게 유지(숫자:A~10까지/무늬:하트,스페이스..)되어야 하는 값이고 높이와 폭은 포커마다 같게 유지(카드의 높이와 폭은 모두 같다)되어야 하는 값입니다. 속성(변수)= 인스턴스변수(개별속성): 무늬, 숫자 / 클래스변수(공통속성): 폭, 높이 class Card { String kind; //무늬(iv) int number; //숫자(iv) static int width; //폭(cv) static int height; //높이(cv) } 클래스를 만들었으면 객체를 만들어서 객체의 속성과 기능을 사용해야겠죠. Card c.. 2021. 5. 11.
7)객체지향-선언 위치에 따른 변수의 종류 7) 객체지향-선언 위치에 따른 변수의 종류 선언 위치에 따라 변수는 3가지로 나눠집니다. 어느 변수를 먼저 쓰든 순서는 상관없습니다. 영역 변수 종류 생성시기 클래스영역(클래스 시작부터 끝까지: 선언문만 가능 인스턴스변수 (instance valiable: iv) 인스턴스가 생성되었을 때 클래스변수 (class valiable: cv: 인스턴스변수 앞에 static붙인것) 클래스가 메모리에 올라갈 때 클래스영역 이외의 영역(메서드, 생성자, 초고화블럭 내부) 지역변수 (local valiable: lv) 변수 선언문이 수행되었을 때 -lv는 메서드 영역 내에서만 써야 합니다. iv와 변수 이름이 같다 해도 서로 다른 변수라는 걸 잊지 마세요. -iv의 생성시기는 인스턴스가 생성되었을 때인데, 즉 객체가.. 2021. 5. 11.
6)객체지향-클래스의 정의 6) 객체지향-클래스의 정의 클래스는 크게 세 가지로 정의할 수 있습니다. 첫 번째는 계속 써왔던 '설계도'로 정의할 수 있고요. 두 번째는 '데이터+함수'로 정의할 수 있습니다. 세 번재는 '사용자 정의 타입'으로 정의합니다. 오늘은 두 번째, 세 번째 정의를 배워보도록 하겠습니다. 어려울 것 없고요. 클래스는 당연히 데이터(변수)+와 함수(메서드)로 이루어지잖아요? 그게 다 입니다. 6-1) 클래스 == 데이터 + 함수 -변수: 하나의 데이터를 저장할 수 있는 공간 -배열: 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간 -구조체: 다른 종류의 여러 데이터(종류 관계 x)를 하나로 저장할 수 있는 공간 -클래스: 데이터와 함수의 결합(구조체+함수) 근데 클래스에선 왜 구조체와 함수를 같이 묶었.. 2021. 5. 11.
5)객체지향-객체배열 5) 객체지향-객체 배열 객체를 여러 개 만들고 싶은데, 그 많은 객체를 일일이 만들다 보면 시간이 많이 걸립니다. 그래서 '배열'을 만들죠. 중복을 피하고 코드를 간결하게 하기 위함이죠. 객체지향에서도 객체를 만들 때 배열을 쓰기도 합니다. 대신, 객체를 배열하기 전에 참조 변수를 먼저 배열해야 합니다. 티브이가 3개 있는 객체를 배열로 만들기 Tv tv1, tv2, tv3; ----------------> Tv[] tvArr = new Tv[3]; 위 그림은 3개의 티브이를 배열로 만든 것입니다. 객체를 만들기 위해서는 먼저 참조 변수가 선언되어야 한다고 했죠.(티브이에 접근하기 위해서는 리모컨이 필요하니까요) 그럼 참조 변수의 배열을 먼저 만듭니다. 참조변수의 배열의 이름은 tvArr이라고 쓰고 주.. 2021. 5. 11.
4)객체지향-객체의 생성과 사용 4)객체지향-객체의 생성과 사용 4-1) 객체의 생성 클래스명 참조변수명; // 클래스의 객체를 참조하기 위한 참조 변수를 선언 참조 변수명 = new 클래스명(); // 클래스의 객체를 생성 후, 객체의 주소를 참조 변수에 저장 여기서 참조변수는 리모컨 Tv를 다루기 위해서 꼭 리모컨이 필요하듯이, 자바에서도 객체를 다루기 위해서 꼭! 리모컨이 필요하다. 그게 참조변수. ①Tv t; // Tv클래스 타입의 ①참조 변수 t를 선언 ③t = ②new Tv(); //② Tv인스턴스를 생성한 후, 생성된 ③Tv인스턴스의 주소를 t에 저장 =이 두줄을 한 문장으로 연결하면 Tv t = new Tv(); 이다. 4-2) 객체의 사용(=변수와 메서드 사용) t.channel = 7; // (변수사용) Tv인스턴스의.. 2021. 5. 11.
728x90
반응형