
상속 Inheritance : 새로운 A객체가 기존에 있던 B객체가 갖고있는 변수, 메소드를 물려 받고, 새로운 변수나 메소드를 생성하거나 변경하는 것 객체 = 필드(변수)+메소드 우리가 기존 Calculator 예제에서 sum객체와 avg객체를 만들었잖아. 이걸 내가 아닌 다른 사람이 만들었다고 치고, 우리는 여기에 substract객체를 새로 추가하고 싶어. 그런데 기존에 복붙한 Calculator의 소스가 없거나, 있다 하더라도 다른 곳에서는 불필요한 기능일 수가 있어. 그럼 다른 사용자는 substract가 무엇인지 파악해야하는 번거로움이 생겨 등등의 불편함을 극복! 한 것이 상속 → 기존의 객체를 그대로 유지함과 동시에, 또 다른 기능을 추가하는 방법 = 상속 기존의 객체 = 부모 객체 (기능을..

생성자 - class가 생성될 때, class와 같은 이름의 생성자가 실행 + 다른 메소드들보다 먼저 실행됨 → So, 객체가 가장 먼저 해야할 일 = 초기화 작업 class 내부에서 public 생성자이름 {} 생성자는 return값이 없기 때문에 void를 사용하지 않아도 돼 우리가 클래스 안에 생성자를 만들지 않아도 자동으로 동일한 이름의 생성자를 만들어 컴파일되기 때문에 오류가 생기지 않았음

class C { int v = 10; void m() { int v = 20; System.out.println(v); } } C클래스 밑에서 선언한 전역변수 v의 데이터가 디폴트라면, m메소드 안에 선언한 지역변수 v는 m메소드 안에서만 유효한 1회용 데이터 this 인스턴스를 생성하고 this를 사용하면 인스턴스 자신을 의미 + 객체에 대한 전역의 의미 ? class C { int v = 10; void m() { int v = 20; System.out.println(v); //20 System.out.println(this.v); //10 } } 예전에 연습했던 Calculator2 클래스 Line 8 - 우항에 있는 left는 this.가 붙어있지 않기 때문에 컴퓨터가 전역변수보다 지역변수 l..

하나의 단어에 여러가지 뜻이 있는 것처럼, 변수의 이름이 중복되어 사용되는 것을 방지하기 위해 유효범위라는 개념이 생겨났음. Scope라고 부름 메소드 안에서 선언한 변수는 메소드 안에서만 영향을 끼치고 그 밖에서는 영향을 끼치지 않아 = 유효범위 더보기 두 클래스를 비교하고 싶으면 두개 선택하여 오른 클릭 - Compare With - each other 전역변수 Global Variables - 클래스에 직접 속해있는 변수 (클래스 바로 아래 선언됨) 지역변수 Local Variables - 메소드 안에서 선언된 변수 그럼 ScopeDemo(좌)를 ScopeDemo2(우) 결과처럼 나오게 하려면? 전역변수가 아니도록 지역변수로 선언해주면 돼 변수 선언 = 변수의 유효범위도 함께 정함 → 클래스 밑에서..

클래스 - 메소드 설계도 (class Calculator{ }) 인스턴스 - 같은 클래스 아래에 여러가지 목적으로 만들어진 제품 (Calculator c1 = new Calculator();) 각각 인스턴스가 갖고있는 서로 다른 변수에 따라서 상태가 다름 상태에 따라서 인스턴스가 메소드를 실행하면 다른 결과를 돌려줌 = 행위 static이 붙어있는 클래스 변수 클래스 변수 - 모든 인스턴스에서 똑같은 값을 가짐. 인스턴스를 생성하지 않고도 그 값을 직접 사용 가능 인스턴스 변수 - 인스턴스마다 값이 다름 static : 뒤에 오는 변수는 static한 변수됨 → 변수가 클래스의 소속(멤버)이 됨 → 모든 인스턴스에서 동일한 값을 가짐 (인스턴스 멤버가 아니라는 뜻) 그 밑에 int left,right는 ..

class : (객체를 만들기 위한 일종의 설계도 → 메소드 정의 부분) instance : 객체 생성 후 변수에 담았을 때, 객체에 담긴 실제 내용 (설계도에 따라 만들어진 구체적인 제품 → 메소드 호출 부분) 프로그래밍의 포인트! 중복의 제거 → 가장 좋은 방법은 메소드를 사용하는 것 중복을 제거하였지만 이전과 동일한 로직으로 동작하는 것을 refactoring ⭐⭐⭐ 리팩토링을 하면 메소드의 재활용성↑, 유지보수가 쉬워지고, 가독성 향상된다. 로직이 어떻게 사용되는가(메소드 호출)를 먼저 보고, 메소드 정의를 보면 이해가 쉬울거야 메소드 호출 Calculator라는 클래스를 c1 변수에 담음! 더보기 앞에 new가 오면 객체, 오지 않으면 메소드 new 메소드() new 객체() 메소드 정의 cla..
절차지향 프로그래밍 Procedural Programming 우리가 명령을 적은 순서대로 촤라라ㅏㅏㅏ락 처리 데이터 중심 객체지향 프로그래밍 Object Oriented Programming 프로그램을 구성하고 있는 로직(변수,메소드)을 구분해서 서로 연관되어있는 상태와 행위를 그룹핑, 카테고라이징, 분류화한 것 기능과 연관되어 있는 변수와 메소드를 객체라는 락앤락에 담아둔 것이고, 다른 로직과 구분시켜주는 것이 객체지향 기능 중심 객체지향 특징 캡슐화 Encapsulation, 은닉화 Information Hiding 관련된 코드와 데이터를 하나의 묶음으로 정리하고, 사용자는 사용법을 몰라도 그 기능을 쓸 수 있게 함 상속성, 재활용성 a사이트에서 사용한 로직을 b사이트 만들 때 사용 가능 → 그 로직..

앱이 시작할 때 데이터 입력 for-each문 cmd에서 값을 입력하면 이렇게 나와 eclipse에서 실행하고 싶을 때는? 우리가 입력할 값에 따라 출력되는 값이 달라지니까 run configurations 기능을 사용하면 돼 이때, program arguments에 넣고 싶은 입력값을 적으면 되는데 각각의 데이터는 띄어쓰기로 구분 순서: main매소드 - 입력값이 args에 각각의 원소로 들어가고, args는 3가지 원소를 가진 배열이 됨 - for-each를 만나 각각의 원소를 꺼내게 되고 - println을 하면 콘솔에 args 배열의 원소들이 출력됨 앱이 실행 중일 때 데이터 입력 Scanner객체 자바에서 기본적으로 제공하는 라이브러리 중 하나인 Scanner를 이용하여 입력값을 쉽게 넣어보자 ..

입력 input 출력 output 이 두개를 합쳐 IO라고 해 google IO : 1년에 한 번 열리는 개발자 지향 컨퍼런스 이름에 IO를 넣은 것을 보면 소프트웨어 개발에서 IO가 많이 중요한가 싶다 class InputDemo { public static void main(String[] args) { System.out.println(args.length); } } String[] args : String타입으로 된 배열을 가지는 변수 args main( ) : main메소드 → String[] args는 main메소드의 파라미터 (main메소드 안에 들어오는 입력값이야) void : main메소드 앞에 붙어 main메소드는 출력값이 존재하지 않음을 의미 변수.lenght : 배열 변수에 담을 수..

메소드 method - java 함수 function - 그 외 언어 반복문,조건문,변수,상수 같은 것들 = 메소드 객체지향과 같은 개념들은 웅장, 결함X, 유지보수가 쉬운 애플리케이션을 만들기 위한 기법들 메소드 정의와 호출 - 정의 define: 만든다 - 호출 call: 실행 - main 메소드 = 호출 프로그램을 만들 때 "실행하고자 하는 코드를 {} 안에 입력하기"라는 약속과 같은 main메소드 정의한 메소드는 print메소드 안에 넣어도 출력되지 않아 System.out.println(numbering()); = Err 메소드가 없다면? public static void main(String[] args) { for(int i=0;i