Sponsored By
















728x90

 

접근권한 에 대한 사용방법임.

 

 

 

 

 

ㅁ. 접근제어(권한) 은 크게 세가지 타입이 있다.

 

1. public ; 변수를 제외하고 거의 모든것을 public으로 놓는다. -> 누구나 사용이 가능하다.

2. private ; 변수를 보통 private으로 놓는다. -> 같은 클래스에서만 사용이 가능하다.

3. 無 ; 아무것도 없을 수 도 있다. -> 같은 패키지내에서만 사용이 가능하다.

 

 

 

 

대부분은 1,2,3 대로 변수와 아닌것으로 구분해서 놓으면 되지만 예외가 한가지 있다.

 

 

 

예외. 아래에서 보는것처럼 내부적으로만 사용가능하게 하기 위할때는 private을 사용한다.

 

(만약 private이 아니라 public으로 놓으면, 메인클래스에서 

Car s = new Car();

s.printError();

를 입력해도 출력이 되기 때문이다. )




this.변수 를 쓰는 이유는 새로 정의하려는 변수와 기존에 있던 변수값이 충돌해서 모호해지기 떄문이다. 

따라서, this를 써서 지금 클래스에서 사용하는 변수라고 지정해 주는 것이다.




 

728x90
728x90

 

생성자(Constructor) 사용방법임. (※ 초기화 메소드라고도 불림)

 

 

 

 

 

ㅁ. 생성자는 변수가 많아지면 겟터셋터를 관리하기 힘들어지기 때문에 사용함이다. 

 

 

 

 

 

ㅁ. 중복정의(overloading)가 가능하기 때문이다.

 

  예, print()

      print(int) {}

      print(double) {}

      print(int, int) {}

      print(int, double) {}

      print(double, int) {}

즉, 파라미터의 갯수나 순서가 구분이 되면 가능하다. 이 구분이 되는 것을 signature라고 한다.

  예2, int print(int);

        double print(int);

라고 정의해놓으면 c = print(3)일때 에는 타입이 다르기때문에 signature로 인정하지 않는다.

 

따라서 타입이 아니라 파라미터(타입)만 다르면 오버로딩 할 수 있다.

 

 

 

 

 

ㅁ. 생성자의 특징에 대해 알아보자.

특징1 : 리턴타입이 없다.

특징2: 클래스 이름과 동일하다.

특징3: 초기화를 수행할 때 사용한다.

특징4: 생성자가 없으면 시스템에서 자동으로 만들어준다.

특징5: 생성자가 하나라도 있으면, 프로그래머의 의지를 반영한다. -> 생성자가 없으면 메인클래스에서 사용할 수 없다.

 

 

 

 

 

 

 

00. 기본구조는 다름과 같다. 나중에 객체생성시 생성자에 따라서 객체를 만들어 줄 수 있다. 

    (따라서, 메인클래스 밖에다 만들어줘야 사용가능.)







 

01. 조금 더 다양하게 만들어보기위해 조금 더 작성해보자.







02. 생성자에 다음과 같은 동작을 하게 작성하고 실행시켜보자. 결과창에 세개가 맞게 출력됨을 확인할 수 있다.







03. 초기화를 해보자. 메인클래스에서 객체를 생성했을때 미리 들어와있는 값으로 초기화 되는 방법이다.

 

 

 

 

 

04. 메인클래스에 다음과 같이 입력하고 출력을 누르면 알맞게 나오게된다.

    (※. 만약 나오지 않는다면 toString()이 제대로 적혀있는지 확인해본다.)

 

 

 

 

 

 






 

728x90
728x90

Getter & Setter 하는 방법임.

 

 

 

 

ㅁ. 겟터셋터의 이름의 유래는 GetXXX SetXXX 인데 이것들을 모아서 겟터 셋터 라고 부르게 되었다.

 

 

 

ㅁ. 겟터셋터 목적: 

 

  ; 재정의하면 문법적으로 맞기때문에 통제 할 수 없다. 따라서 게터세터를 사용해서 통제시킬 수 있다.

( 예, 객체.변수 = 임의의값; -> 임의의값이 그냥 출력된다.

      객체.setter(임의의값); -> 클래스에서 if 문등을 써서 제어할 수 있다. - 예, 음수값이 나오면 error출력 )

 

 

 

 

 

 

 

일단 시작해보자.

 

 

 

00_1. Car클래스를 하나 만들고 변수를 private으로 두자.

 

변수들이 private이 되면 값이 고정되므로, 다른 클래스에서 없는변수(invisible)로 나오기 때문에 

값을 수정해 주고 싶을때에는 Setter로 재정의 하게 만들어주고 Getter로 불러오게 하는 개념이다.







00_2. 메인클래스를 만들어서 셋터로 값을 수정해서 겟터로 출력해보자.







01. 값이 출력된 것을 확인할 수 있다.







02. 아래와 같이 받은 셋터값을 변수로 담아서 출력해도 무관하다.  

 

 

 

 

 

※. 코드

 

 

※. 코드

 

 

class Car{

 private String color;  // 원칙적으로 변수는 private

 private int speed;

 

 public String getColor()

 {

  return color;

 }

 

 public void setColor(String color)  // return type이 필요없는경우 void  // default 값으로 String c를 color에 셋팅해라.

 {

  this.color =color;  // this 는 자기 자신을 나타내는 객체(여기서는 제일위에 선언된 color)

 }

 

 public void setSpeed(int speed)  // setter가 없으면 다른 사람들이 값을 setting 할 수 없으므로 제공해줘야함.

 {

  if(speed <0)

  {

   speed = 0;

  }

  this.speed = speed;  // = set 한 speed 값을 우리가 처음 선언한 speed 값으로 재정의해라.

 }

 

 public int getSpeed()

 {

  return speed;

 }

 

 public String toString()

 {

  return "(speed, color) = (" + speed + "," + color + ")";

 }

  

}// Car Class

 

 

public class Test {

 

 public static void main(String[] args) {

  

  Car taxi = new Car();

      

  taxi.setSpeed(-20);  //taxi.speed = 50; 대신에 setter를 이용해서 사용  

  int taxiSpeed =taxi.getSpeed();

  taxi.setSpeed(77);  //taxi.speed = 50; 대신에 setter를 이용해서 사용

  int taxiSpeed2 =taxi.getSpeed();

  

  taxi.setColor("BLACK");

  

  System.out.println(taxiSpeed);

  System.out.println(taxiSpeed2);

  System.out.println(taxi.getSpeed());

  System.out.println(taxi.getColor());  

  

 }// main

}// Class

 

 

 

 

 

 

 

728x90
728x90

객체지향언어(OOP)인 자바의 클래스 사용법, 객체생성 및 메소드, 상태선언 등에 대한 방법임.

 

 

 

 

먼저, 객체지향언어의 목적은 두가지 정도가 있다.

 

1. 코드를 재사용 함으로써, 생산성을 높인다.

 

2. 정보보호(은닉)를 위함이다.

 

 

 

 

 

00. 먼저 Car라는 클래스를 다음와 같이 만든다. 상태정보(변수) 와 동작정보(메소드)를 포함시킨다.

 

 

 

 

 

01_1. Test라는 메인클래스를 만들고 Taxi라는 객체를 위에서 만든 Car 타입으로 Casting 시킨후 

       Taxi 객체에 Car메소드를 실행시켜본다.

 

(  ※ 객체를 만든다 라 함은 만들어놓은 클래스와 메인클래스를 연결시켜준다고 생각하면 된다.

      여기서는 Car taxi = new Car(); 이 행위가 객체생성 하는 행위이다. 

        ; 해석하면 위에 만들어놓은 Car 타입의 형태로 taxi라는 객체를 새롭게(new) Car()클래스를

           만든다 라는 소리.

      또한, 재정의 및 메소드 실행은 만들어진 taxi객체에서 Car클래스에서 만들어 놓은 변수를 다시 

      선언(설정) 하거나 Car클래스에서 만들어 놓은 메소드(기능)들을 실행하게 하는것. )

 

 

 

 

 

01_2. 큰그림으로 보면 이런식으로 되겠다.







02. 메인 클래스에 Taxi 객체와 bus 객체를 만들어주고 다음과같인 선언 및 메소드를 구동시켜보자.







03. Car클래스에 speed 변수를 추가해서 다음과같이 사용할 수 도 있다.








처음 접할때에는 객체생성 방법과 생성된 객체에 변수를 재정의(변수선언) 및 메소드 실행시키는 방법이 많이 했갈린다.

 

많은 코딩을 해서 익숙해지는 방법밖에 없는 듯 하다.

 

 

이해안가는 부분은 댓글 환영.!!

 

 

 

 

 

※. 코드

 

 

class Car {

// 상태정보: 색상

String color;

int speed;

 

// 동작정보: 시작하기, 멈추기

// 클래스 내부에 있는 함수: 메소드(method)

int start() {

System.out.println("start()");

return 1; // start() 가 int 타입 이므로 return 1이 에러나지 않는다.

}

 

void stop() {

System.out.println("stop()");

}

 

// toString() 메소드

public String toString() { // (speed, color) = (97, RED)

 

return "(speed, color) = (" + speed + "," + color + ")";

 

}// toString끝

 

}// Car Class

 

 

 

public class Test {

 

public static void main(String[] args) {

Car taxi = new Car();

 

taxi.color = "RED";

taxi.speed = 97;

 

taxi.start();

taxi.stop();

 

System.out.println("택시의 색상은 " + taxi.color);

System.out.println("택시의 속도는 " + taxi.speed);

 

Car bus = new Car();

 

bus.color = "BLUE";

String bcolor = bus.color;

 

bus.speed = taxi.speed + 10;

int bspeed = bus.speed;

 

bus.start();

bus.stop();

 

System.out.println("버스의 색상은 " + bcolor);

System.out.println("버스의 속도는 = " + bspeed);

 

System.out.println(taxi);

 

}// main

 

}// Class

 

 

 


 

728x90
728x90

난수(Random) 발생시키는 방법임.

 

 

 

 

 

 

간단한 개념을 설명하자면 랜덤은 0 ~ 1 사이의 값들이 랜덤으로 나오는 것이다.

 

따라서 for문이나 while문으로 반복시키면 그만큼의 랜덤수들이 나오게 된다.

 

0~1사이의 수가 나오므로 int 타입으로 Casting 시켜서 정수값이 나오게 하는것이 편하다.

 

 

 

 

 

 

00. 정말 0~1사이의 수가 나오는지 확인해보자. 







01. int타입으로 Casting 시키고 주사위로 가정해서 1~6까지 수 중 랜덤하게 나오게 해보자.







02. 한번 더 해보자. 







03. 내가 적은 수와 랜덤수가 일치할 때 까지 질문하도록 만들어보자.







04. 확률적으로 보통 6번이면 맞추게 된다.







05. 그럼 응용해서 다음과같이 미니로또 번호도 나오게 만들 수 있다.

    (중복값이 나오는데 이것은 뒤에나오는 배열 에서 다시 언급함.)

 

 

 

 

 

 

 

 

 

 

※ 미니로또 프로그램 코드 주소값: http://blog.naver.com/pandekten5/220774908599 )

 

 

 

 

 

 

 

※. 코드

 

 

import java.util.Scanner;

 

public class Test {

public static void main(String[] args) {

/* 난수발생 */

 

int i, j, cnt, random;

 

Scanner scan = new Scanner(System.in);

 

int diceFace;

int userGuess;

cnt = 0;

 

while(true)

{

System.out.println("주사위값 예측해라. ");

userGuess = scan.nextInt();

diceFace = (int)(Math.random() * 6) +1;

 

cnt ++;  

 

if(userGuess == diceFace)

{

break;

}else

{

System.out.println("diceFace값= " + diceFace);

}

}// while

 

System.out.println("당신은 " + cnt + " 회 만에 맞췄습니다.");

 

scan.close();

 

 

 

 

for(i =1; i<=6; i++)

{

System.out.print((int)(Math.random() * 45) +1 + "\t");

}

 

 

 

 

}// main

}// class

 

 

 

 

728x90


Sponsored By















+ Recent posts