public class Ec05_this{
	public static void main(String[] args) {
    	Test5 t = new Test5();
        
        t.set(5);
        t.print();
    }
}
class Test5 {
	// 인스턴스 변수는 해당 클래스의 모든 인스턴스 메소드에서 바로 접근 가능.
    rpviate int a;
    private int b;
    
    public void set(int b) {
    	// 지역변수(매개변수)와 필드 이름이 동일하면 지역변수 (매개변수)가 우선순위
        a = 10; // 필드
        b = b + 100; // 매개변수의 값 변경
    }
    
    public void print() {
    	System.out.println("a: "+a+", b: "+b);
    }
    
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0715_Ex07_this  (0) 2021.07.18
0715_Ex06_this  (0) 2021.07.18
0715_Ex04_constructor : 생성자  (0) 2021.07.17
0715_Ex03_constructor : 생성자  (0) 2021.07.17
0715_Ex02_constructor : 생성자  (0) 2021.07.17
public class Ex04_constructor {
	public static void main(String[] args){
    	Test4 t1 = new Test4(); // 인자가 없는 생성자 호출
        t1.print();
        
        Test4 t2 = new Test4(10); // 인자가 하나인 생성자 호출
        t2.print();
    }
}
// 생성자 중복 정의
class Test4 {
	private int a;
    
    public Test4() {
    	System.out.println("인자가 없는 생성자");
    }
    
    public Test4(int n){
    	a = n;
    	System.out.println("인자가 있는 생성자");
    }
    
    public void print() {
    	System.out.println("a: "+a);
    }
    
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0715_Ex06_this  (0) 2021.07.18
0715_Ex05_매개변수, 필드  (0) 2021.07.17
0715_Ex03_constructor : 생성자  (0) 2021.07.17
0715_Ex02_constructor : 생성자  (0) 2021.07.17
0715_Ex01_sort : 정렬  (0) 2021.07.17
public class Ex03_constructor {
	public static void main(String[] args) {
    // Test2 tt = new Test2(); 컴파일오류. 인자가 없는 생성자가 없다.
    // 생성자가 존재하면 자바는 디폴트 생성자를 만들지 않는다.
    
    Test2 tt = new Test2(10);
    tt.print();
    
    }
}
class Test2 {
	private int a;
    
    public Test2(int n) { // 관호 안에 인자가 있음.
		a = n;
        System.out.println("인자가 하나인 생성자...");
    }
    
    public void print() {
    	System.out.println("a: "+a);
    }
    
}

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0715_Ex05_매개변수, 필드  (0) 2021.07.17
0715_Ex04_constructor : 생성자  (0) 2021.07.17
0715_Ex02_constructor : 생성자  (0) 2021.07.17
0715_Ex01_sort : 정렬  (0) 2021.07.17
0715_복습  (0) 2021.07.16

 

public class Ex02_constructor{
	public static void matin(String[] args) {
    Test1 ob = new Test1();
    // 객체가 생성되고 객체에 필요한 초기화 작업이 이루어짐.
    ob.print();
    }
}

1) 객체의 메소드 할당 : a 필드가 heap영역에 메모리 할당을 받는다.
2) a 필드는 디폴트값(0)으로 초기화 된다.
3) 생성자 몸체를 실행하여 a 필드는 10으로 초기화 된다.
    생성자 몸체는 객체가 생성될 때 한 번만 실행된다.

 


- 생성자
      클래스와 동일한 이름을 가지며 return 타입이 존재하지 않는다.
      모든 클래스는 하나이상의 생성자를 가진다.
      생성자를 만들지 않으면 자바는 컴파일할 때 아무코드도 없고 매개변수도 없는 디폴트 생성자를 만든다.
      생성자는 new 연산자 다음에 호출하며 객체를 생성할 때 초기화를 담당한다.
      생성자는 일반 메소드처럼 호출할 수 없다.

class Test1 {
	
    private int a;
    
    public Test1() {
    	a = 10;
        System.out.println("생성자...");
    }
    public void print() {
    	System.out.println("a: "+a);
    }
}

티스토리에서 게시글 (특히) 제목 쓸 때 왜 자꾸 지워지는지 모르겠다 정말 사소한 것이지만 너무 성가시다;;

 

public class Ex01_sort {
	public static void main(String[] args) {
    	int []a = {15,10,25,17,33,40};
        
        print("source: ", a);
        sort(a);
        
        print("sort: ", a);
    }
    
    public static void print(String title, int[] num) {
    // print 라는 클래스 메소드를 만듦. 
    // 배열에 있는 값을 출력할 때 마다 밑에를 쓸 필요가 없어짐!
    	System.out.print(title);
        for(int n : num) {
        	System.out.print(n+" ");
        }
        System.out.println();   
    }
    
    public static void sort(int[] num) {
    // 이 클래스 메소드를 통해 배열에 있는 값들을 작은 값부터 큰 순으로 정렬할 수 있다.
    	boolean b=ture;
        int t;
        
        for(int i=1; b; i++) { 
        // 배열이 정렬이 다 되면 빠져나가기 위함
        	b = false;
            for(int j=0; j<num.length-i; j++){
            	if(num[j]>num[j+1]){
            // j<num.length-i 인 이유 ? 배열은 0부터 시작임. 그리고 
            // 이 정렬방법은 첫 회전에 배열 0에 제일 작은 값이 들어감. 
            // 그 이후로는 배열 0에 있는 값은 비교할 필요가 없음. (회전 수가 5, 4, 3, 2, 1로 줄어든다!)
            // j가 배열의 크기보다 커지면 나가고 정렬을 종료함
            		t=num[j]; num[j]=num[j+1]; num[j+1]=t;
                    b = true;
                }
            }
        }
    }
    
    
}

 

레퍼런스 변수
 - 기본형을 제외한 나머지 타입으로 주 기억 장치에 저장되어 있는 객체의 주소 값을 가리킨다.
 - 레퍼런스 변수(자바) 배열참조형, 클래스 참조형, 인터페이스 참조형, enum 참조형
 - 변수 자체가 값을 포함하지 않으며 참조 값만을 가진다.
 
 null ? 해당 값을 가진 레퍼런스 변수의 경우에 가리키고 있는 인스턴스가 없다는 것을 의미.
 
 인스턴스 메소드
 - 객체를 생성 후에 객체를 이용하여 접근
 - 메소드 내에서 인스턴스 변수나 클래스 변수를 바로 접근 가능
 - 메소드 내에서 다른 인스턴스 메소드나 클래스 메소드 호출 가능
 
 클래스 메소드
 - 리턴 타입 앞에 static 키워드를 붙여서 선언
 - 인스턴스 변수나 인스턴스 메소드를 접근하기 위해서는 먼저 객체를 생성해야 함.
 
 재귀 호출
 - 메소드 내에서 메소드 자기 자신을 호출하는 방식
 - 실행 시간의 관점에서는 처리 속도가 느려 반복문 보다 비효율적
 - 종료 조건을 사용하여 재귀 호출을 종료 하도록 한다.
 - Stack 영역을 사용
 
 메소드 오버로딩
 - 한 클래스 내에서 이름이 같은 메소드를 정의 하는 것으로 매개변수의 타입이 다르거나 매개변수의 개수가 달라야 한다.
 - 메소드 리턴 타입은 오버로딩 구현하는데 아무런 영향을 주지 못함
 =============================================

생성자

- new 라는 연산자와 꼭 같이 사용되어 객체를 생성할 때 호출됨
- 객체가 생성되면 생성자의 몸체를 실행해 초기화를 담당한다. 
- 생성자는 인스턴스 변수의 초기화 및 객체가 생성될 때 실행해야 할 작업을 위해 사용
- 자바의 모든 클래스에는 하나 이상의 생성자가 존재한다.
- 생성자는 인수를 가질 수 있으며, 중복 정의가 가능하다.

디폴트 생성자
- 생성자를 정의하지 않는 경우에 컴파일러는 인수도 없으며 
  아무런 기능도 지니지 않는 생성자를 자동 삽입하는데 이를 디폴트 생성자라 한다.
  

package member1;

public class MemberVO {
	// 회원 1명의 정보를 저장할 수 있는 저장소
	private String name;
	private String phonenum;
	private String address;
	private int num;
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhonenum() {
		return phonenum;
	}
	public void setPhonenum(String phonenum) {
		this.phonenum = phonenum;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public int getNum() {
		return num;
	}
	
	/*
	public void setNum(int num) {
		this.num = num;
	}
	회원고유번호 외부에서 바꿀필요없음.
	*/
	
	
}

오늘은 class와 method를 만들고 실행할 수 있는 프로그램을 간단하게 짜보았다. (내가 짠건 아니지만..ㅠ) 숙제도 하는데 뭔가 코드 이해하기에도 바쁜 느낌 ㅜㅜ

'쌍용강북교육센터 > 7월' 카테고리의 다른 글

0715_Ex01_sort : 정렬  (0) 2021.07.17
0715_복습  (0) 2021.07.16
0714_복습_객체지향? 클래스? 필드+메소드?  (2) 2021.07.15
0714_Ex13_method 만들기 예제  (0) 2021.07.15
0714_Ex12_객체 배열  (0) 2021.07.15

절차지향 프로그래밍
장점
- 컴퓨터의 처리 방식과 유사하며, 처리 속도가 빠르다.
단점 
- 코드의 양이 증가할수록, 재사용성과 유지보수의 어려움이 급격하게 증가
- 대형 프로젝트에 부적합

 특징
- 행동(코드) 중심 // 일에따라서 함.
- 처리해야 할 명령어를 결정하고, 필요한 데이터 요청 // 데이터를 나중에 요청한다.
- Top-Down 방식으로 설계 // 위에서 아래로

=> 따라서 객체지향이 나옴

객체지향 프로그래밍
- 실제 세계를 모델링 하여 소프트웨어를 개발하는 방법
- 메세지를 교환하는 상호작용을 통해 전체 시스템이 운영되는 개념
- 속성, 메소드로 표현 

데이터(상태) 중심
- 개발의 편리, 효율성을 높이는데 목적이 있다. 
- 생산성을 향상 시킬 수 있다.
- 프로그램 모듈을 재사용 할 수 있다.
- 프로그램의 확장 및 유지 보수가 용이하다.

객체란 ?
- 자동차, 컴퓨터, 책 등과 같이 우리 주위에서 손쉽게 접할 수 있는 모든 물리적 사물 또는 실체를 가르키는 말
- 객체는 특성과 행위, 정체성 등 세가지 특징이 있다.
특성(속성)은 해당 객체에 저장되어 있는 정보
하나의 클래스 안에는 단일책임, 서로 관련성있는 데이터와 코드로 구성되어야 한다.

통장(계좌) : 속성(필드) - 이름, 계좌번호, 패스워드, 금액
  동작(메소드) - 입금한다. 출금한다.

a - 통장
b - 통장
c - 통장 ...

필드 : 데이터, 상태, 속성, 필드
메소드 : 동작, 행동

클래스 : 속성과 메소드를 정의하는 일종의 틀 template 이다. 
   클래스는 객체를 만들기 위해 필요한 속성, 메소드로 구성 

클래스로부터 생성된 실체는 '객체'
객체가 일할수있도록 한 것이 '메소드'

추상화 ?
하나의 클래스를 만들 때 저장할 데이터와 실행해야하는 기능을 추출하는 것. 모델링

캡슐화 ?
객체의 속성과 행위를 하나로 묶고, 실제 구현 내용을 외부에 감추어(변경할 수 없게 함) 은닉한다.
데이터를 보호할 수 있다. 이용자가 데이터에 직접 접근하는 것을 차단하므로 객체 내 데이터 및 코드의 손상과 오용을 막고 안전하게 보호할 수 있다.
ex ; Tv를 시청하려면 Tv의 동작 원리를 알아야할까? no. 전원버튼만 누르면 tv를 시청할 수 있다.

하나의 클래스에는 한 가지 종류의 기능을 두어야 한다. (단일 책임의 원칙!) => 응집력을 높이기 위함이다.

인스턴스 생성 -> 메모리를 할당받는다.
생성자는 클래스와 이름이 동일함. 생성자는 메모리를 할당할 때만 씀! new 생성자

인스턴스 변수 
- 객체에 종속적이므로 객체에서 호출된다.

클래스 변수
- 클래스 변수는 모든 인스턴스들이 공통적인 값을 갖는다.
- 일반적으로 객체가 아닌 클래스 이름을 이용하여 외부에서 접근한다.

생성자
- 클래스와 동일한 이름을 가져야 한다.
- 객체를 생성하거나 생성된 객체의 초기화를 담당.
- 하나의 클래스에는 하나 이상의 생성자가 필요하다.★
(개발자가 만들지않으면 컴파일할때 자바가 알아서 넣어준다.)

클래스 이름은 대문자로 시작하고 자바 API가 제공하는 클래스의 이름과 중복으로 사용하면 안된다.

일반 독립 클래스에 붙이는 접근 제어자
- public 
- default : 동일한 패키지(동일 폴더) 에서만 사용가능하다.

내부 클래스 
- private
- protected
- 클래스 안에서만 사용 가능

필드의 접근제어자
- private < default(아무 것도 안 붙인 것) 동일한 패키지에서 사용가능 
< protected 동일한 패키지에서는 사용가능+ 자식은 패키지가 달라도 접근가능
< public 누구든지 사용가능

+ Recent posts