- 변수 - 멤버필드
- 인스턴트 멤버필드
- 인스턴스 생성 후에 사용가능
- 클래수 멤버필드(static)
- 인스턴스화를 하지 않아도 사용가능
- 함수 - 멤버메서드
- method 선언
- 식별자
- 동사(소문자) + 명사(대문자)
- 매서드( ){
실행문;
}
OOP (Object Oriented programming) : 객체 지향 프로그래밍
- 4가지 특성 -------------→ 문법
- 캡슐화(은닉화)
- 멤버에 접근을 제어 →특정 권한을 가져야 접근 가능
- 접근제어자
- private
- protected
- package
- public
- 상속
- 추상
- 다형
1
class MethodEx01{
//메서드 선언
void doTest1(){
//변수, 제어문 등이 들어올 수 있음
System.out.println("doTest1() 호출");
}
void doTest2(int data1){
//인자, 매개변수
//int data1 : 지역변수
System.out.println("doTest2() "+data1);
}
void doTest3(int data1, String data2){ //자료형이 다른 두개의 인자를 받을 수 있음
System.out.println("doTest3() "+data1);
System.out.println("doTest3() "+data2);
}
// 두 수를 + 한 결과를 돌려보내는 메서드를 생성
// 리턴할 자료형을 앞에 기술해야 함
int doTest4(int data1, int data2){
int sum= data1 + data2;
return sum;
}
}
public class ExecEx01{
public static void main(String[] args){
MethodEx01 ex01;
ex01 = new MethodEx01();
//메서드의 호출 //재사용이 가능함
ex01.doTest1();
ex01.doTest1();
ex01.doTest1();
ex01.doTest2(10);
ex01.doTest3(20,"홍길동");
int result = ex01.doTest4(10,20); //리턴값을 받아줄 변수를 생성
System.out.println("결과 : " +result);
System.out.println("결과 : " +ex01.doTest4(10,20));
}
}
2
//UtilEx 클래스 만들고 시작단수, 끝단수 입력받아 구구단을 출력하는 gugu 메서드 선언
class UtilEx{
String gugudan(int data1, int data2){
String sum="";
for(int j=data1;j<=data2;j++){
for(int i=1;i<=9;i++){
sum += j+" X "+i +" = "+ j*i+"\t";
}
sum +="\n";
}
return sum;
}
}
/*class UtilEx{
void gugudan(int start, int end){
for(int i=start; i<=end; i++){
for(int j=1; j<=9;j++){
System.out.print(i+" x "+j+" = "+i*j+"\t");
}
System.out.println();
}
}
}*/
public class gugu01{
public static void main(String[] args){
UtilEx g1 = new UtilEx();
System.out.println(g1.gugudan(2,9));
}
}
3
class MethodEx02{
//Method Overloading 매서드의 중복 정의
// 1. 메서드명이 같아야함
// 2. 인자 - 갯수 다르거나, 순서가 다르거나
void doTest1(){
System.out.println("doTest1() 호출");
}
void doTest1(int data1){
System.out.println("doTest1() 호출 " +data1);
}
void doTest1(int data1, String data2){
System.out.println("doTest1() 호출 " +data1 +" -- "+data2);
}
void doTest1(String data1, int data2){
System.out.println("doTest1() 호출 " +data1 +" -- "+data2);
}
}
public class ExecEx02{
public static void main(String[] args){
MethodEx02 ex02= new MethodEx02();
ex02.doTest1(); //인자값에 따라서 다르게 호출함
ex02.doTest1(20);
ex02.doTest1(20, "홍길동");
ex02.doTest1("김범수", 20);
}
}
4
class MethodEx03{
//가변인자
void doTest(String ... names){ ///String[] names = { 인자값1, 인자값2, ... };
System.out.println("갯수 "+names.length);
for(String name : names){
System.out.print(name +"\t");
}
System.out.println();
}
}
public class ExecEx03{
public static void main(String[] args){
MethodEx03 ex03 = new MethodEx03();
ex03.doTest("1");
ex03.doTest("1","2");
ex03.doTest("1","2","3");
}
}
5
class MethodEx04{
//멤버 변수
//선언만 해도 초기값을 가짐
String data1; //초기값 null
int data2; //초기값 0
char data3; //초기값 ''
void printData(){
System.out.println("데이터 : "+data1);
System.out.println("데이터 : "+data2);
System.out.println("데이터 : "+data3);
String data4 =null; //로컬변수는 초기화를 해주지 않으면 에러남
System.out.println("데이터 : "+data4);
}
}
public class ExecEx04{
public static void main(String[] args){
MethodEx04 ex04 = new MethodEx04();
ex04.printData();
}
}
6
class MethodEx05{
//this
String data1 = "박문수";
void printData(String data1){
System.out.println("데이터 : " +data1); //data1은 메서드의 파라매터를 가리킴
System.out.println("데이터 : " +this.data1); //data1은 맴버변수를 가리킴
}
void printData(){
System.out.println("데이터 : "+data1);
System.out.println("데이터 : "+this.data1); //같은 멤버변수에 접근
System.out.println("this : "+this); //자신의 주소를 출력함
this.viewData();
//viewData(); //this를 붙이지 않아도 같은 클래스 안에 매서드를 호출 가능함
}
void viewData(){
System.out.println("viewData() 호출");
}
}
public class ExecEx05{
public static void main(String[] args){
MethodEx05 ex05 = new MethodEx05();
ex05.printData("홍길동");
ex05.printData();
System.out.println("ex05 : "+ex05);
}
}
7
class MethodEx06{
//자동으로 생성되는 생성자 : 디폴트 생성자
//클래스 이를과 같음
//리턴타입이 앞에 없음, 리턴을 할 수 없음
MethodEx06(){
System.out.println("디폴트 생성자 호출"); //밑에서 호출하지 않아도 클래스 생성시 자동적으로 호출됨
}
}
public class ExecEx06{
public static void main(String[] args){
MethodEx06 ex06 = new MethodEx06();
//Methodex06()
//클래스명() : 생성자 (메서드) constructor
}
}
8
class MethodEx07{
String data1;
//생성자 메서드 디폴트
MethodEx07(){
this.data1="홍길동"; //멤버필드 값을 초기화
System.out.println("디폴트 생성자 호출");
}
//생성자 overloading
MethodEx07(String data1){
this(); //생성자에서 생성자를 호출 가능 //첫줄에 적어야 함
this.data1=data1; //외부에서 받은 인자로 멤버필드 값을 초기화 할 수 있음
System.out.println("오버로딩 생성자 호출");
}
void viewData(){
System.out.println(this.data1);
}
}
public class ExecEx07{
public static void main(String[] args){
MethodEx07 ex07 = new MethodEx07();
ex07.viewData();
MethodEx07 ex077 = new MethodEx07("박문수");
ex077.viewData();
}
}
9
class MethodEx08{
//여러개의 멤버 변수를 선택적으로 초기화
String data1;
String data2;
MethodEx08(String data1, String data2){ //data1, 2 둘다 받아서 초기화
this(data1);
this.data2= data2;
}
MethodEx08(String data1){ //data1만 받아서 초기화
this.data1= data1;
this.data2= "기본값";
}
}
public class ExecEx08{
public static void main(String[] args){
MethodEx08 ex01 = new MethodEx08("박문수", "홍길동");
MethodEx08 ex02 = new MethodEx08("박문수");
System.out.println(ex01.data1);
System.out.println(ex01.data2);
System.out.println(ex02.data1);
System.out.println(ex02.data2);
}
}
10
class VariableEx01{
// 인스턴스는 괄호가 끝나면 메모리에서 지워짐
String data1 = "홍길동";
// static 은 메모리상 저장구역이 다름
// 인스턴스 하기전에 먼저 메모리를 잡아둠
// static 은 프로그램 끝까지 메모리를 잡아두기 때문에 될수 있는 한 쓰지 않는 것이 좋음
// static 은 class간에 통신수단으로 사용됨 //공유데이터라고 불림
static String data2= "박문수";
void viewData1(){
System.out.println("viewData1() 호출");
System.out.println(data1);
System.out.println(data2);
}
static void viewData2(){
System.out.println("viewData2() 호출");
//System.out.println(data1); static 안에서는 인스턴스 멤버 변수를 쓸수 없음
//System.out.println(this.data1); static 안에서는 this라는 개념이 없음
System.out.println(data2);
}
}
public class MainEx01{
public static void main(String[] args){
VariableEx01 v = new VariableEx01();
System.out.println(v.data1); //인스턴스 멤버 필드 부르기
v.viewData1();
System.out.println(VariableEx01.data2); //static 멤버 필드 부르기
VariableEx01.viewData2();
}
}
11
class Data{
static String data1 = "홍길동"; //static 필드는 클래스 간의 공유데이터
}
class StudentA{
void viewData(){
System.out.println(Data.data1);
}
}
class StudentB{
void viewData(){
System.out.println(Data.data1);
}
}
public class MainEx02{
public static void main(String[] args){
StudentA s1 = new StudentA();
StudentB s2 = new StudentB();
s1.viewData();
s2.viewData();
Data.data1= "박문수";
s1.viewData();
s2.viewData();
}
}
12
class TestEx{
String data1= "홍길동";
public String data2="박문수";
private String data3= "강감찬";
//매서드 //setter //getter //매서드를 통해서 private데이터에 접근하도록 만들 수 있음
//매서드 안에 조건문을 걸어서 특정 조건을 설정해서 접근제어가능
//set + 멤버변수명 : 입력
//get + 멤버변수명 : 출력
void setData3(String data3){
this.data3=data3;
}
String getData3(){
return data3;
}
}
public class MainEx03{
public static void main(String[] args){
TestEx ex= new TestEx();
System.out.println(ex.data1);
System.out.println(ex.data2);
//System.out.println(ex.data3); // private 데이터에 접근 불가
ex.setData3("박보영"); //set 매소드를 사용해서 private 데이터 초기화 가능
String data = ex.getData3(); //get 메소드를 사용해서 private 데이터 출력 가능
System.out.println(data);
}
}
13
//버블소트
//첫번째 2개 인수 부터 마지막 2개인수까지 차례로 비교를 해서 큰 인수가 뒤로 가게 한다
//더이상 바꿀게 없으면 멈춘다
class UtilEx{
int[] bubblesortAsc(int ... nums){
int perfect=0;
while(perfect<nums.length-1){
perfect=0;
for(int i=0; i<nums.length-1;i++){
if(nums[i]>nums[i+1]){
int a=nums[i+1];
nums[i+1]=nums[i];
nums[i]=a;
}else {
perfect++;
}
}
}
return nums;
}
}
public class MainEx04{
public static void main(String[] args){
UtilEx ex = new UtilEx();
int[] results = ex.bubblesortAsc(4,54,13,2,12,7,53,4,3,86,8,4);
for(int result : results){
System.out.print(result +"\t");
}
}
}
댓글 없음:
댓글 쓰기